vlambda博客
学习文章列表

分布式之CAP定理和BASE理论

距离第一篇文章的更新,已经过去一个多月了 ,不是我偷懒不更新,实在是这段时间太忙了。
今天准备整理下分布式系统中的理论知识——CAP和BASE。
  • 什么是CAP
CAP是指Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)。
一致性:一致性是指在分布式系统中的所有数据备份,在同一时刻是否同样的值。大致分为强一致性、弱一致性和最终一致性。 关于一致性的详细描述可以参考这篇文章https://www.jianshu.com/p/36cbe3c3cf83
可用性:可用性描述的是服务一直可用且在正常的响应时间内,在分布式系统或者是单体应用的集群部署情况下,要保证一个节点或多个节点失效后系统仍旧可用。
分区容错性:分区容错性是指分布式系统在遇到任何网络分区故障的情况下,仍能提供对外的一致性或可用性的服务。
  • CAP定理证明
一个分布式系统只能同时满足CAP中的两项,三者不可兼得。下面是我自己对CAP定理的证明

假设有两个服务A和B提供相同的功能,A在北京,B在上海,各自的数据库是DB1和DB2,两个数据库中都有某表中的字段X,值为1。
当网络稳定时,用户发送请求1到A,X加1,DB1中的X值变为2,此时DB1和DB2数据同步,DB2中的X更新为2,用户请求查询X的值发送到B时,拿到的值为2,这时系统的可用性和一致性是可以满足的。
但是网络传输我们不能保证稳定时,用户发送请求1到A,DB1中的X变为2,DB1和DB2在同步数据的过程中,网络故障,DB2中的X还是1,此时用户发送请求到B查询X的值,X为1,无法满足一致性;当DB1和DB2同步遇到网络故障时,阻塞等待,直到网络恢复,再响应请求2,这时无法满足可用性,用户可能等待了很久
以上我们可以看出要满足分区容错性,可用性和一致性就不能同时满足。
  • CAP的取舍
根据排列组合,取舍的组合无非就是CA放弃P、AP放弃C、CP放弃A三种
CA放弃P:当不需要进行分区时,我们可以选择放弃P,满足一致性和可用性,但是放弃P为啥还要讲分布式?
AP放弃C:一开始我以为放弃C就是放弃数据的一致性,但是后来看并不是这样,这里指的是放弃数据的强一致性,通过引入时间窗口满足数据的最终一致性,也就是数据最终会达到一致的状态,但是这个时间窗口的大小取决于网络、数据同步策略等因素。
CP放弃A:一旦网络遇到故障,放弃可用性,让用户等待请求响应,这段时间内服务不可用。
  • 什么是BASE理论

BASE理论其实是由CAP定理演化而来的,它权衡了CAP中的一致性和可用性,结果是做到最终一致性。

BA是指Basically Available(基本可用):在系统出现故障时,保证核心功能可用,可以牺牲部分功能,例如淘宝双十一为保障交易功能,使注册功能不可用。

S是指Soft state(软状态):允许系统中的数据存在中间状态。

E是指最终一致性(Eventually Consistent):这个就是软状态的最终结果,数据最终一致,趋于一致的时间取决于时间窗口的。

  • 总结

BASE理论是CAP理论的延伸,一致性和可用性都可以单独拿出来细说,网上有很多优秀的文章值得去学习,下面这篇就很不错。
https://blog.csdn.net/zhangyufeijiangxi/article/details/78286364