掌握ZooKeeper的二阶段提交及其优缺点

打印 上一主题 下一主题

主题 517|帖子 517|积分 1551

1. ZooKeeper的协议

1.1 ZAB协议

要深入学习ZooKeeper前,胡广以为我们要先学习ZooKeeper的核心理念,全部的ZooKeeper举动都是围绕这个核心来进行的。说了那么多,它就是——ZAB协议。
ZAB协议英文全称叫ZooKeeper Atomic Broadcast,我们透过中文寄义可以大概了解他做了什么变乱:ZooKeeper原子消息广播协议。
来看看原子广播在维基百科的表明。
   在容错分布式计算中,原子广播或全序广播是指多进程系统中的全部正确进程都以相同顺序吸收同一组消息(即相同的消息序列)的广播。
  那ZooKeeper广播啥呢?我们知道ZooKeeper集群有Leader服务器、Follower服务器,这个Leader服务器吸收了客户端全部的事件哀求,事件哀求可以是新增某一个ZNode节点,也可以是删除某一个ZNode节点。
这些事件哀求的变更要不要提交、怎样通知其他Follower服务器进行同步变更,这就是广播涉及的主要内容了。
ZAB协议主要包罗了消息广播、瓦解模式,跟着胡广往下看看。
1.2 消息广播

ZAB协议的消息广播类似于二阶段提交过程。顾名思义事件最终的提交要分为两个阶段。
消息广播的流程如下:
(1)针对客户端的事件哀求,Leader服务器会为其生成对应的事件Proposal,同时广播给集群中别的Followr呆板。这个事件Proposal我们可以把他明白为事件提案。
(2)Follower服务器在吸收到事件Proposal后会以事件日志形式写入到本地磁盘中,如果写入成功,则反馈一个Ack反馈给到Leader服务器。
(3)Leader服务器会网络其他Follower服务器的选票,只有半数的Follow服务器同意本次事件哀求,那Leader服务器就会广播一个Commit消息,通知全部Follower服务器进行事件提交。
总结下来,也就是分为二个阶段,第一阶段是询问事件Proposal的写入实验能否成功,第二阶段就是在Leader服务器、Follower服务器进行事件提交。


1.3 消息广播的缺点

固然消息广播的二阶段提交有所缺点。
(1)在消息广播的第二阶段,如果有部门Follower服务器没有收到Leader服务器广播的事件提交消息,这就会出现数据不一致的环境了。
(2)单点题目。如果Leader服务器在第二阶段奔溃了,那其他Follower服务器仍然会处于锁定上一次事件资源的状态中。
(3)同步阻塞题目。参与一个客户端事件哀求时,Leader、Follower服务器的其他逻辑都需要进行阻塞,直到等到上一个二阶段提交完成之后才会开始实行。
1.4. 瓦解模式

ZAB协议涉及Leader服务器、Follower服务器,Leader服务器充当了最重要的作用。如果Leader服务器瓦解了大概失去和Follwer服务器之间的接洽,那上面胡广提到的二阶段提交各种题目很可能都会出现。
开头不是说ZAB协议包罗了消息广播、瓦解模式?别慌,瓦解模式就是为此而生的。
瓦解模式总的来说就做了两个变乱,我们记住这两点方便明白:一个是确保提交已经被Leader提交的事件Proposal,另一个是抛弃已经被跳过的事件Proposal。
(1)为了解决上文的第1点题目。Leader服务器会为每一个Follower服务器都准备一个Proposal消息队列,通过该队列发送那些没有被各Follower服务器同步的事件Proposal,同时在Proposal消息后面加上Commit消息让Follower服务器进行事件提交。这可以解决二阶段提交带来的数据不一致题目。
(2)为了解决上文的第2点题目。ZooKeeper计划了一个高32位的epoch,用来作为Leader服务器的标识;计划了一个低32位的事件偏移量ZXID,用来作为最新已提交事件的偏移量。
新的Leader服务器上线后,新的Leader服务器拥有集群里最大的事件偏移量,Leader服务器会和Follower服务器的ZXID进行比对,从而让Follower服务器回退被跳过的事件Proposal。

结束: 


    你好,我是胡广。 致力于为资助兄弟们的学习方式、面试困难、入职经验少走弯路而写博客

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表