zookeeper系列--CAP理论&一致性原则

一、CAP理论概述
分布式领域中存在CAP理论,且该理论已被证明:任何分布式系统只可同时满足两点,无法三者兼顾。
① C:Consistency,一致性,数据一致更新,所有数据变动都是同步的。 ② A:Availability,可用性,系统具有好的响应性能。 ③ P:Partition tolerance,分区容错性。
一致性(C:Consistency)
在分布式环境中,一致性是指数据在多个副本之间是否能够保持数据一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。比如:分布式中2pc二阶段提交中的第二阶段就是需要第一阶段全部恢复ok了再猜执行commit。
① 强一致性(strong consistency)。任何时刻,任何用户都能读取到最近一次成功更新的数据。 ② 单调一致性(monotonic consistency)。任何时刻,任何用户一旦读到某个数据在某次更新后的值,那么就不会再读到比这个值更旧的值。 ③ 会话一致性(session consistency)。任何用户在某次会话中,一旦读到某个数据在某次更新后的值,那么在本次会话中就不会再读到比这值更旧的值。 ④ 最终一致性(eventual consistency)。用户只能读到某次更新后的值,但系统保证数据将最终达到完全一致的状态,只是所需时间不能保障。 ⑥ 弱一致性(weak consistency)。用户无法在确定时间内读到最新更新的值。
二、ZooKeeper提供的一致性服务
很多文章和博客里提到,zookeeper是一种提供强一致性的服务,在分区容错性和可用性上做了一定折中,这和CAP理论是吻合的。但实际上zookeeper提供的只是单调一致性。原因:
用分布式系统的CAP原则来分析Zookeeper: C: Zookeeper保证了最终一致性,在十几秒可以Sync到各个节点。 A: Zookeeper保证了可用性,数据总是可用的,没有锁.并且有一大半的节点所拥有的数据是最新的,实时的. 如果想保证取得是数据一定是最新的,需要手工调用Sync()。 P: 有2点需要分析的。 ① 节点多了会导致写数据延时非常大,因为需要多个节点同步。 ② 节点多了Leader选举非常耗时, 就会放大网络的问题. 可以通过引入 observer节点缓解这个问题。
参考: https://blog.csdn.net/yanpenglei/article/details/80362561 https://www.souyunku.com/2018/05/18/zookeeper/