Dawn's Blogs

分享技术 记录成长

0%

ZooKeeper学习 (4) CAP定理

CAP理论

CAP定理

CAP理论为:⼀个分布式系统最多只能同时满足⼀致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

  • 一致性(Consistency):即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致。
  • 可用性(Availability):服务⼀直可用,而且是正常响应时间。
  • 分区容错性(Partition tolerance):分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或者可用性的服务。

BASE理论

BASE理论是对CAP理论的延申,核心思想就是即使无法做到强一致性(CAP的一致性就是强一致性),但可以采取适当的方式达到最终一致性。

  • 基本可用(Basically Available):指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
  • 软状态(Soft State):允许系统存在中间状态,而该中间状态不会影响系统整体可⽤性。分布式存储中⼀般⼀份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。
  • 最终一致性(Eventual Consistency):指系统中的所有数据副本经过⼀定时间后,最终能够达到⼀致的状态。

ZooKeeper追求的一致性

ZooKeeper保证的最终一致性又叫做顺序一致性,即每个结点的数据都是严格按事务的发起顺序生效的。

ZooKeeper如何保证事务的顺序

zookeeper中的事务ID为ZXID,ZXID由Leader节点生成,有新写入事件时,Leader生成新ZXID并随提案一起广播,每个结点本地都保存了当前最近一次事务的ZXID,ZXID是递增的,所以谁的ZXID越大,就表示谁的数据是最新的。

ZXID的生成规则如下:

ZXID

ZXID由两部分组成:

  • 任期:完成本次选举后,直到下次选举前,由同一Leader负责协调写入
  • 事务计数器:单调递增,每生效一次写入,计数器加一

ZXID的低32位是计数器,所以同一任期内,ZXID是连续的,每个结点又都保存着自身最新生效的ZXID,通过对比新提案的ZXID与自身最新ZXID是否相差1,来保证事务严格按照顺序生效的。