ZooKeeper Zab协议与Paxos对比
请解释ZooKeeper的Zab协议(ZooKeeper Atomic Broadcast)与Paxos算法的关系与区别。
回答
屠龙少年
Zab协议定义: ZooKeeper使用的原子广播协议,用于保证集群中数据的一致性和Leader选举。
与Paxos的关系:
- Zab是Paxos的一种简化变体,针对ZooKeeper的使用场景做了优化
- 两者核心思想相同:多数派(Quorum)+ 递增编号(Epoch/Proposal Number)
Zab协议的核心流程(两个阶段):
阶段1:Leader选举(Election Phase / Fast Leader Election)
- 每个Server投票给自己,广播投票(SID + ZXID)
- 当某个Server获得**多数派(过半)**的投票,它成为Leader
- 使用**ZXID(ZooKeeper Transaction ID)**作为比较依据:
- ZXID = Epoch(Leader任期,64位高位)+ Counter(计数,64位低位)
- ZXID越大表示数据越新
- 选出的Leader一定是拥有最新数据的节点
阶段2:原子广播(Broadcast Phase)
- Leader:
- 接收客户端写请求
- 分配ZXID(递增)
- 广播**PROPOSAL(提议)**到所有Follower
- Follower:
- 接收PROPOSAL,写入本地事务日志
- 回复Leader ACK
- 提交: 当Leader收到过半数ACK后,广播COMMIT
- Follower收到COMMIT后应用到内存
与Paxos的区别: | 维度 | Zab | Paxos | |------|-----|-------| | 全称 | ZooKeeper Atomic Broadcast | Paxos(共识算法)| | 选举+广播 | 一体化:选举阶段后自动进入广播 | 分离:需要独立共识实例 | | 编号机制 | ZXID(Epoch+Counter)| Proposal Number | | 保证 | FIFO顺序(按ZXID顺序提交)| 仅保证一致性(不保证顺序)| | 写入方式 | Leader总是写成功后才返回 | 支持多个Proposer | | 典型场景 | ZooKeeper | Chubby、Etcd(Raft) |
CAP特性: ZooKeeper是CP系统(一致性+分区容忍性),当Leader宕机时整个集群短暂不可用(约200ms选举时间)。