分布式学习十:ZAB协议

举报
仙士可 发表于 2023/06/26 17:16:11 2023/06/26
【摘要】 ZAB协议ZAB 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。ZAB协议的开发设计人员在协议设计之初并没有要求其具有很好的扩展性,最初只 是为雅虎公司内部那些高吞吐量、低延迟、健壮、简单的分布式系统场景设计的。在 ZooKeeper的官方文档中也指出, ZAB协议并不像Paxos算法那样,是一种通用的分布式一致性算法,它是一种特别为ZooKeeper设计...

ZAB协议

ZAB 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。

ZAB协议的开发设计人员在协议设计之初并没有要求其具有很好的扩展性,最初只 是为雅虎公司内部那些高吞吐量、低延迟、健壮、简单的分布式系统场景设计的。

在 ZooKeeper的官方文档中也指出, ZAB协议并不像Paxos算法那样,是一种通用的分布式一致性算法,它是一种特别为ZooKeeper设计的崩溃可恢复的原子消息广播算法。

总结来说,ZAB 协议就是:"主备一致性","消息广播","崩溃恢复"

流程

所有节点都会在3个状态中转换:

1:选举leader/崩溃恢复(leader宕机重新选举)

2:消息广播 (leader接收消息广播给Follower)

3:崩溃恢复(leader宕机重新选举)

在节点启动后,会寻找leader节点,没有的话将选举一个leader

选举leader成功后,所有数据写入都将经过leader,由leader发送给其他follower

当follower与leader失去联系之后,将进入崩溃恢复模式,在follower中选举一个拥有相对最新数据的节点成为leader

重新消息广播

消息广播

leader选举成功后,所有数据将写入进leader,由leader发送给其他follower

事务二阶段提交

在消息广播中,leader服务器会给每个事务提案分配一个全局单调递增的唯一事务ID,每次广播时需要保证每个事务ID的先后顺序

follower接收到广播之后,需要把事务写入到磁盘,写入成功之后给leader反馈ACK

leader接收到超过半数ACK后,广播commit信息,要求follower提交事务   

注意,每个事务ID需要严格遵守顺序

崩溃恢复

当leader服务器崩溃后,可能会出现以下情况

1:leader出现了提案5,通知时中途崩溃了

2:leader在发送提交提案5时,中途崩溃

2种情况都可能出现,这个时候所有follower数据都是不一致的

这个时候,follower选举时,需要选举一个commitID最大值的follower作为leader,每个follower选举时需要比对自己的commit ID,只有大于时才投票,这个时候可以确保新选举的leader拥有最完整的数据

前 leader恢复

事务ID是一个64位的数字,低32位记录了单调递增的事务ID,高32位记录了leader周期的编号,每次选举都会使得此值+1

在前leader恢复后,由于新leader正常工作,可能提出了新的提案5,这个时候前leader需要比对高32位编号,如果不一致,则丢弃此提案,同步新leader的数据

崩溃恢复方式类似于raft 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。