ZAB Zookeeper如何保证分布式数据一致性?(蚂蚁1)
Zookeeper 设计为只有一台客户端(Leader)负责处理外部的写事务请求,然后Leader 客户端将数据同步到其他 Follower 节点。
ZooKeeper 保证分布式系统数据一致性的核心算法就是** ZAB 协议**(ZooKeeper Atomic Broadcast,原子消息广播协议)。ZAB 借鉴了 Paxos 算法,ZooKeeper能够保证数据一致性主要依赖于 ZAB 协议的 消息广播、崩溃恢复和数据同步 三个过程。
消息广播
ZAB 协议针对事务请求的处理过程类似于一个两阶段提交过程,第一阶段是广播事务操作,第二阶段是广播提交操作。
- 一个事务请求(Write)进来之后,Leader 节点会将写请求包装成 Proposal 事务,并添加一个全局唯一的 64 位递增事务 ID,也就是 Zxid(消息的先后顺序就是通过比较 Zxid);
- Leader 节点向集群中其他节点广播 Proposal 事务,Leader 节点和 Follower 节点是解耦的,通信都会经过一个 FIFO 的消息队列,Leader 会为每一个 Follower 节点分配一个单独的 FIFO 队列,然