
Multi-Paxos仅能保证值一旦被选定后不再更改,但无法保证:
ZAB协议通过以下设计解决这些问题:
主节点唯一性 所有写请求必须由主节点处理,备份节点收到写请求时会转发给主节点。这避免了多节点并发提案导致的顺序混乱。
事务标识符(zxid)设计 zxid由两部分组成:
示例:
顺序广播 主节点通过TCP协议按zxid顺序广播提案,确保:
顺序提交 主节点必须按zxid顺序提交提案:
写请求流程
create /geekbang/time 456)读请求优化
sync命令同步最新状态当主节点故障时:
虽然ZAB和Raft都保证顺序性,但ZAB:
在ZooKeeper中创建嵌套节点的正确顺序:
create /geekbang 123 # 先创建父节点
create /geekbang/time 456 # 再创建子节点ZAB确保这两个操作会严格按顺序执行,避免出现子节点先于父节点创建的错误。