Zookeeper-集群、Paxos算法、ZAB 协议

1.集群角色

Zookeeper中分为Leader,Follower,Observer三种角色。
Zookeeper集群中所有的机器通过一个Leader选举过程来选定一台Leader机器,
Leader既可以为客户端提供写服务又能提供读服务。
Follower和Observer都只提供读服务。
Follower和Observer唯一的区别是Observer不参与Leader的选举过程,也不参与写操作的“过半写成功”策略,因此Observer机器可以在不影响写性能的情况下提升集群的读性能。

2.paxos算法

算法目标:让分布式系统的每个参与者达成一致,从而实现具有容错能力的分布式系统。

百度文档

paxos算法
1.通俗概述:Lamport为了讲述这个算法,假想了一个叫做Paxos的希腊城邦进行选举的情景,这个选举是异步且非拜占庭模型的(消息传送速度不可预测,允许消息的丢失或者重复,但是不会出现内容损坏)。整个算法的大致过程为:

第一阶段:要先明确哪个“提议者”是意见领袖有权提出提议,“接受者”们就主要处理这个“提议者”的提议了(这样,也可以在提出提议时就尽量让意见统一,谋求尽早形成多数派)。

第二阶段:由上阶段选出的意见领袖提出提议,“接受者”反馈意见。如果多数“接受者”接受了一个提议,那么提议就通过了。
2.忽略严密性的通俗解释
明确意见领袖:每个“提议者”在第一阶段先报个号,谁的号大,谁就是意见领袖。可以想象为贿选:每个提议者先拿着钞票贿赂一圈“接受者”,谁给的钱多,第二阶段“接受者”就听谁的。即:“意见领袖”是在第一轮贿赂成功的“提议者” 。

尽早形成多数派:“提议者”不会执着于让自己的提议通过,而是执着于让提议尽快达成一致。为了实现这个目标,“提议者”在贿选的时候,若发现“接受者”已经接受过前面意见领袖的提议了,即便贿选成功,也会默默的把自己的提议改为前面意见领袖的提议。

提议者改变提案的依据:

  • “接受者”在被“提议者”贿赂的时候,会记下贿赂的金额。所以当你贿赂“接受者”时,一旦你给的贿赂多而胜出,“接受者”会告诉你两件事情:a、前任意见领袖的提议内容(如果有的话);b、前任意见领袖当时贿赂了多少钱。
  • 如果你是“提议者”,在贿赂的时候,“接受者1”跟你说“他见过的意见领袖的提议是方案1”,而“接受者2”跟你说“他见过的意见领袖提议是方案2”,只需要判断一下“接受者1”和“接受者2”告诉你的信息中,哪个意见领袖当时给的钱多,就把自己的提议改成那个意见领袖的提议。

先来后到很重要:在第一阶段中,一旦“接受者”已经接受了之前意见领袖的提议,那后面再来找这个“接受者”的“提议者”,即便在贿赂中胜出,也要将自己的提议改为前任意见领袖的提议,然后他会在第二阶段提出该提议。如果“接受者”之前没有接受过任何提议,那贿选胜出的“提议者”就可以提出自己的提议了。

3.ZAB协议

ZAB 协议是 Zookeeper 基于paxos专门设计的一种支持崩溃恢复的原子广播协议。通过该协议,Zookeeper 基于主从模式的系统架构来保持集群中各个副本之间数据的一致性。
Zookeeper 使用一个单一的主进程来接收并处理客户端的所有事务请求,并采用原子广播协议将数据状态的变更以事务 Proposal 的形式广播到所有的副本进程上去。

二阶段提交

所有的事务请求必须由唯一的 Leader 服务来处理,Leader 服务将事务请求转换为事务 Proposal,并将该 Proposal 分发给集群中所有的 Follower 服务。如果有半数的 Follower 服务进行了正确的反馈,那么 Leader 就会再次向所有的 Follower 发出 Commit 消息,要求将前一个 Proposal 进行提交。

ZAB 协议包括两种基本的模式,分别是崩溃恢复和消息广播

  • 崩溃恢复 当整个服务框架在启动过程中,或者当 Leader 服务器出现异常时,ZAB 协议就会进入恢复模式,通过过半选举机制产生新的 Leader,之后其他机器将从新的 Leader上同步状态,当有过半机器完成状态同步后,就退出恢复模式,进入消息广播模式。
  • 消息广播
    ZAB 协议的消息广播过程使用的是原子广播协议。在整个消息的广播过程中,Leader 服务器会每个事物请求生成对应的 Proposal,并为其分配一个全局唯一的递增的事务 ID(ZXID),之后再对其进行广播。具体过程如下:
    Leader 服务会为每一个 Follower 服务器分配一个单独的队列,然后将事务 Proposal 依次放入队列中,并根据 FIFO(先进先出) 的策略进行消息发送。Follower 服务在接收到 Proposal 后,会将其以事务日志的形式写入本地磁盘中,并在写入成功后反馈给 Leader 一个 Ack 响应。当 Leader 接收到超过半数 Follower 的 Ack 响应后,就会广播一个 Commit 消息给所有的 Follower 以通知其进行事务提交,之后 Leader 自身也会完成对事务的提交。而每一个 Follower 则在接收到 Commit 消息后,完成事务的提交。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值