ThinkInOpenSource / zookeeper

zookeeper实践
Apache License 2.0
1 stars 0 forks source link

ZAB协议 #6

Open luoxn28 opened 6 years ago

luoxn28 commented 6 years ago

ZAB 协议(zookeeper原子广播协议)是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。

Zookeeper 客户端会随机连接到 Zookeeper 集群的一个节点,如果是读请求,就直接从当前节点中读取数据;如果是写请求,那么节点就会向 leader 提交事务,leader 会广播事务,只要超过半数follower ACK成功,改写请求就会被提交。

在 ZAB 协议的事务编号 Zxid 设计中,Zxid 是一个 64 位的数字,其中低 32 位是一个简单的单调递增的计数器,针对客户端每一个事务请求,计数器加 1;而高 32 位则代表 Leader 周期 epoch 的编号,每个当选产生一个新的 Leader 服务器,就会从这个 Leader 服务器上取出其本地日志中最大事务的ZXID,并从中读取 epoch 值,然后加 1,以此作为新的 epoch,并将低 32 位从 0 开始计数。

ZAB协议分为3个阶段:

说到了zab协议(原子消息广播协议),那么它和paxos算法有什么差别呢?zab协议和paxos算法的本质区别是zab协议主要用于构建一个高可用的分布式数据主备系统;而paxos则用于构建分布式一致性状态机系统。zab并没有使用paxos是因为paxos无法保证全局顺序,Paxos算法的确是不关心请求之间的逻辑顺序,而只考虑数据之间的全序,但很少有人直接使用paxos算法,都会经过一定的简化、优化。 zab通过保证了(在Leader上)按照请求顺序进行广播和提交,而paxos算法只保证了数据更新时是有序的,而无法按照请求顺序进行数据的更新操作。

参考资料: 1、http://blog.xiaohansong.com/2016/08/25/zab/