核心理念
- ZooKeeper是分布式应用协调服务,其核心是ZAB协议。
ZooKeeper特点
- 保持秩序
- 可靠性
- 高效率
- 守时性
- 避免争执
- 没有野心
ZAB协议(ZooKeeper Atomic Broadcast)
- 原子广播或全序广播,确保所有正确进程以相同顺序接收同一组消息。
消息广播流程
- 生成事务Proposal:Leader为客户端请求生成事务Proposal并广播给Followers。
- 写入事务日志:Followers接收并写入本地磁盘,成功则反馈Ack给Leader。
- 收集选票:Leader收集Follower的Ack,半数以上同意后广播Commit消息。
消息广播的缺点
- 数据不一致:部分Follower可能未收到Commit消息。
- 单点问题:Leader崩溃导致事务资源锁定。
- 同步阻塞:事务处理阻塞其他逻辑直到二阶段提交完成。
崩溃模式
- 解决二阶段提交问题,确保提交已提交的事务Proposal,丢弃跳过的事务。
崩溃模式的两个关键点
- 确保事务同步:Leader通过Proposal消息队列确保Follower同步未提交事务。
- Leader标识与事务偏移量:使用epoch和ZXID标识Leader和事务,新Leader通过比对ZXID让Follower回退跳过事务。