一致性|分布式CAP理论-一致性、可用性、分区容错性

什么是CAP理论
2000 年 , Eric Brewer教授提出了CAP猜想 。2年后 , Seth Gilbert和Nancy Lynch从理论上证明了猜想的可能性 , 从此CAP 理论成为了分布式计算领域的公认理论 。
CAP 理论告诉我们:在一个分布式系统中 , 不可能同时满足一致性(Consistency) , 可用性(Availability)和分区容错性(Partition tolerance) , 最多只能同时满足其中的2个 。
一致性|分布式CAP理论-一致性、可用性、分区容错性
文章图片

文章图片

CAP定义
一致性(Consistency):数据在多个副本之间能够保持一致的特性(强一致性) 。就像Redis的主从结构 , Zookeeper的Master/Slave结构 , 主从之间的数据保持一致 , 这些都是最终一致性 。
可用性(Availability):系统一直处于可用状态 , 能正常响应数据 , 但是不保证响应数据为最新数据 。
分区容错性(Partition tolerance):分布式系统在遇到网络故障的时候 , 仍然能够对外提供满足一致性和可用性的服务 , 除非整个网络环境都发生了故障 。什么是分区
分区就是我们常说的Zookeeper脑裂的问题 , 比如A、B两个机房构成一个分布式集群 , 如果A和B机房之间的网络不通了 , 那么一个分布式集群就会拆分成A和B两个集群 。如果出现了分区 , 那肯定保证不了数据的强一致性 。为什么不能同时满足3个
拿我们常用的数据库读写分离来说下 , 数据库的主从架构是没办法做到强一致性的 , 都是最终一致性 。有时候我们操作数据库写主库 , 读从库 , 会发现读到的数据不是最新数据 。
(1)如果我们满足了CA即一致性和可用性 , 那数据库只能有一个主库 , 不能有从库 , 说白了就不是一个分布式系统 。
(2)如果我们满足了AP即可用性和分区容错性 , 这种就是目前数据库的主从实现方式 , 那只能牺牲数据一致性 , 保证数据的最终一致性 。
(3)如果我们满足了CP即一致性和分区容错性 , 不好意思 , 这种满足不了 , 系统必然不可用 。如何取舍
【一致性|分布式CAP理论-一致性、可用性、分区容错性】要做一个分布式系统 , 必须有所取舍 , 那取谁舍谁呢?从上面的分析中可以看出 , 只有第二条能实现分布式系统 , 第一条无法实现分布式系统 , 第三条系统都不可用了 , 分布式也就失去了存在的意义 。实际上 , 分区100%会出现吗?这种概率非常低 , 即使出现了分区 , 也可以根据策略进行调整 。比如数据库的主从结构不需要强一致性 , 实现最终一致性也可以解决问题 。Zookeeper的脑裂问题即使出现了分区也只能投出一个Leader , 只有一个集群提供服务 , 当网络连通后 , 再同步数据 。


    推荐阅读