天天看点

分布式理论CAP和BASECAP理论BASE理论

CAP理论

所谓CAP理论,就是分布式系统下的:

  • 一致性(C:Consistency)
  • 可用性(A:Availability)
  • 分区容忍性(P:Partition tolerance)

一致性(C:Consistency)

在分布式环境下,一致性是指数据在多个副本之间能否保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一直的状态。

  • 对于将数据分布在不同分布式节点上的系统来说,如果对A节点的数据进行了更新操作,并且更新成功
  • 却没有使得B节点上的数据得到同步的更新,对第二个节点的数据进行读取操作时,获取的是脏数据
  • 这就是典型的分布式数据不一致的情况。
  • 在分布式系统中,如果能够做到针对一个数据项的更新操作执行成功后,所有的用户都可以读取到其最新的值,那么这样的系统就被认为具有强一致性

可用性(A:Availability)

可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。关键是"有限时间内"和"返回结果"。例如银行系统

  • "有限时间内"是一个操作请求,系统必须能够在指定的时间内返回对应的处理结果
  • 如果超过了这个时间范围,那么系统就被认为是不可用的
  • "有限的时间内"是指系统设计之初就设计好的运行指标
  • 对于用户请求,系统必须存在一个合理的响应时间

"返回结果"是可用性的另一个非常重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果。正常的响应结果通常能够明确地反映出队请求的处理结果,即成功或失败,而不是一个让用户感到困惑的返回结果。

分区容忍性(P:Partition tolerance)

分区容忍性约束了一个分布式系统具有如下特性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

  • 网络分区是指在分布式系统中,不同的节点分布在不同的区域(机房或异地网络)中
  • 由于一些特殊的原因导致这些网络之间无法连通,但各个网络的内部网络是正常的
  • 从而导致整个系统的网络环境被切分成了若干个孤立的分区

如何取舍

一个分布式系统无法同时满足一致性、可用性、分区容忍性三个特点,所以我们就需要抛弃一样:

  • CA:放弃分区容忍性,加强一致性和可用性,单机数据库
  • AP:放弃一致性(保证最终一致性),追求分区容忍性和可用性,大多数使用缓存的系统均采用这种方案
  • CP:放弃可用性,追求一致性和分区容忍性,很少系统会选择这种策略

CA without P:

  • 如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。
  • 但放弃P的同时也就意味着放弃了系统的扩展性
  • 此时的系统都不应该称为分布式系统,就是传统的单机数据库

CP without A:

  • 如果放弃可用性,相当于每个请求都需要在服务器之间保持强一致
  • 而P(分区)会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),
  • 一旦发生网络故障或者消息丢失等情况,就要等待所有数据全部一致了之后再让用户访问系统
  • 这种情况下用户体验会很差,很少系统会采用这种策略

AP wihtout C:

  • 要保证系统的高可用,并且允许分区,则需要放弃一致性。一旦分区发生,节点之间可能会失去联系,数据就有可能不一致
  • 为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。
  • 典型的应用就是电商抢购,你打开网页的时候,页面显示有库存的,当你下单的时候,系统提示你下单失败,商品已售完。
  • 这其实就是先在 A(可用性)方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,但会保证最终一致性
  • 这种场景下,用户体验可能不好,但可以保证系统的可用性,避免高并发下系统的崩溃

BASE理论

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的单词首字母的缩写。

  • Basically Available(基本可用)
  • Soft state(软状态)
  • Eventually consistent(最终一致性)

BASE理论是对CAP中一致性和可用性权衡的结果,是大规模分布式系统实践的总结, 是基于CAP定理逐步演化而来的。

BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

Basically Available(基本可用)

基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性

部分可用性是指部分功能无法提供,响应时间变长

  • 响应时间变长。正常情况下,一个电商网站查询商品需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障,查询结果的响应时间增加了1~2秒甚至更长
  • 系统功能上的损失:正常情况下,一个电商网站上进行购物的时候,消费者几乎能够顺利完成每一笔订单,但由于系统用户购物高峰,为了保护电商系统的稳定性,部分用户可能会购物失败

Soft state(软状态)

软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时

Eventually consistent(最终一致性)

  • 最终一致性强调的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到数据一致的状态
  • 最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性
  • 大部分使用缓存的系统都需要保存最终一致性

BASE总结

BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事物ACID特性是相反的,它完全不同于ACID的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。

但在实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性和BASE理论往往又会结合在一起。

继续阅读