第三章 深入 ZAB 协议

  上一节介绍了ZAB协议的内容,本节将从系统模型、问题描述、算法描述和运行分析四方面来深入了解 ZAB 协议。

  系统模型

  在一个由一组进程 n ={P1,P2,...Pn}组成的分布式系统中,每一个进程都具有各自的存储设备,各进程之间通过相互通信来实现消息的传递。每一个进程都随时有可能会出现一次或多次的崩溃退出,这些进程会在恢复之后再次加人到进程组 n 中去。如果一个进程正常工作,那么我们称该进程处于 UP 状态,如果一个进程崩溃了,那么我们称其处于 DOWN 状态。事实上,当集群中存在过半的处于 UP 状态的进程组成一个进程 f 集之后,就可以进行正常的消息广播了。我们将这样的一个进程子集称为 Quorum (下文中使用“ Q ”来表示),并假设这样的 Q 已经存在,其满足:

    

  上述集合关系式表示,存在这样的一个进程子集 Q ,其必定是进程组n的子集,同时,存在任意两个进程子集 Q ,和 Q 2 ,其交集必定非空,用 Pi 和 Pj 来分别表示进程组 n 中的两个不同进程,使用Cij来表示进程Pi和Pj之间的网络通信通道。

  

  问题描述

  ZAB 协议是整个 ZooKeeper 框架的核心所在,其规定了任何时候都需要保证只有一个主进程负责进行消息广播,而如果主进程崩溃了,就需要选举出一个新的主进程。主进程的选举机制和消息广播机制是紧密相关的。随着时间的推移,会出现无限多个主进程并构成一个主进程序列: P1,P2, …,Pe,e表示主进程序列号,也被称作主进程周期。由于各个进程都会发生崩溃然后再次恢复,因此会出现这样的情况:存在这样的Pi和Pj,它们本质上是同一个进程,只是处于不同的周期中。

  主进程周期:

  为了保证主进程每次广播出来的事务消息都是一致的,我们必须确保 ZAB 协议只有在充分完成崩溃恢复阶段之后,新的主进程才可以开始生成新的事务消息广播。为了实现这个目的,各个进程都实现了类似于 ready ( e )的一个函数调用,在运行过程中, ZAB 协议能够非常明确地告知上层系统(指主进程和其他副本进程)是否可以开始进行事务消息的广播,同时,在调用 ready ( e )函数之后, ZAB 还需要为当前主进程设置一个实例值。实例值用于唯一标识当前主进程的周期,在进行消息广播的时候,主进程使用该实例值来设置事务标识中的 epoch 字段,即事务Proposal的ZXID的高32位值。如果一个主进程周期 e 早于另一个主进程周期 e ’,将其表示为e<e ’。

  事务:

  假设各个进程都存在一个类似于transactions(v,z)的函数调用,来实现主进程对状态变更的广播。主进程每次对transaction(v,z)函数的调用都包含了两个字段:事务内容v和事务标识 z(即zxid) ,而每一个事务标识 z = < e , c >也包含两个组成部分,前者是主进程周期e,后者是当前主进程周期内的事务计数c。我们使用epoch( Z )来表示一个事务标识中的主进程周期epoch,使用counter(z)来表示事务标识中的事务计数。

  针对毎一个新的事务,主进程都会首先将事务计数c递增。在实际运行过程中,如果一个事务标识z优先于另一个事务标识z’,有两种情况:一种情况是主进程周期不同,即epoch(z) < epoch(z’); 另一种情况是主进程周期一致,但是事务计数不同,

 即 epoch(z) = epoch(z‘)且 counter(z) < counter(z’),两种情况均用 z<z‘来表示。

  算法描述:

  整个ZAB协议主要包括消息广播和崩溃恢复两个过程,进一步可以细分为三个阶段,分别是发现(Discovery)、同步(Synchronization)和广播(Broadcast)阶段。组成ZAB协议的每一个分布式进程,会循环地执行这三个阶段,我们将这样一个循环称为一个主进程周期。

  ZAB协议算法表述语介绍:

  

  

  阶段一:发现(Discovery)

  步骤F.1.1 Follower F将自己最后接受的事务 Proposal的epoch值 CEPOCH(F. p) 发送给准 Leader L 。

  步骤L.1.1当接收到来自过半Follower的CEPOCH(F.p)消息后,准Leader L会生成NEWEPOCH(e)消息给这些过半的Follower。

    关于这个epoch值e‘,准Leader L会从所有接收到的CEPOCH(F. p )消息中选取出最大的epoch值,然后对其进行加1操作,即为e’。

  步骤F.1.2当 Follower接收到来自准Leader L的NEWEPOCH(e‘)消息后,如果其检测到当前的CEPOCH(F.p )值小于e’,那么就会将CEPOCH(F.p)赋值为e‘,同时向这个准LeaderL反馈Ack消息。在这个反馈消息(ACK-E(F. p ,hf ))中,包含了当前该Follower的  epoch CEPOCH(F.p),以及该Follower的历史事务Proposal集合:hf。

  当Leader L接收到来自过半Follower的确认消息Ack之后,Leader L就会从这过半服务器中选取出一个Follower F,并使用其作为初始化事务集合Ie。

  关于这个 Follower F 的选取,对于Quorum中其他任意一个Follower F‘,F需要满足以下两个条件中的一个:

    CEPOCH (F‘. p) < CEPOCH (F. p)
    (CEPOCH (F‘.p) = CEPOCH (F.p)) & ( F‘. zxid<F. zxid  或 F‘. zxid=F. zxid)

  

  阶段二:同步

  步骤 L.2.1 Leader L 会将 e‘ 和 Ie’ 以 NEWLEADER(e’,Ie’) 消息的形式发送给所有 Quorum中的 Follower 。
  步骤 F.2.1 当 Follower 接收到来自 Leader L 的 NEWLEADER(e’,Ie’)  消息后,如果Follower 发现 CEPOCH (F.p) 不等于e‘, 那么直接进入下一轮循环,因为此时Follower 发现自己还在上一轮,或者更上轮,无法参与本轮的同步。

    如果CEPOCH (F.p) = e’ ,那么Follower就会执行事务应用操作。

    最后,Follower会反馈给Leader,表明自己已经接受并处理了所有Ie中的事务 Proposal。

  步骤L.2.2 当Leader接收到来自过半Follower针对NEWLEADER(e’,Ie’)的反馈消息后,就会向所有的Follower发送Commit消息。至此Leader完成阶段二。

  步骤F.2.2 当Follower收到来自Leader的Commit消息后,就会依次处理并提交所有在Ie’中未处理的事务。至此Follower完成阶段二。

  阶段三:广播

  步骤L.3.1 Leader L接收到客户端新的事务请求后,会生成对应的事务Proposal,并根据ZXID的顺序向所有Follower发送提案<e’,<v,z>> ,其中epoch(z)=e’。

  步骤F.3.1 Follower根据消息接收的先后次序来处理这些来自Leader的事务Proposal,并将他们追加到hf中去,之后再反馈给Leader。

  步骤L.3.1当Leader接收到来自过半Follower针对事务Proposal<e’,<v,z>>的Ack消息后,就会发送Commit<e,<v,z>>消息给所有的Follower,要求它们进行事务的提交。

  步骤F.3.2 当Follower F接收到来自Leader的Commit <e’,<v, z>>消息后,就会开始提交事务Proposal <e,<v,z>>。

时间: 2024-08-25 12:26:56

第三章 深入 ZAB 协议的相关文章

X32位 天堂2 二章/三章 服务端协议号修改方法

[本方法适合于2004-2006年之间天堂2由初章服务端修改至二章.三章端时协议号匹配问题]服务端版本位32位初章服务端 目前大部分SF用的协议号情况: 服务端是419 客户端是 417 419 420(外挂) 转换成 十六进制的是 01A3 按从低到高的存放方式就是 A301 首先修改 服务端 L2server.exe 在UE里的 0010105ch 位置处的 B8 A3 01 00 00 修改成你的即可(十进制的三位数,原因,后面说)注意首先用计算器把你的十进制转换成十六进制的,在填写进去如

tcp/ip协议第三章 ip:网际协议

tcp/ip协议第三章读后总结 ip是tcp/ip协议族中最为核心的协议.ip提供不可靠传输,不可靠的意思是它不保证ip数据包能成功的到达目的地.ip仅提供最好的传输服务.任何要求的可靠性必须由上层来提供(如tcp) 子网的划分缩小了internet路由表的规模,因为许多网络经常可以通过单个表目就可以访问了. 接口网络的有关信息通过ifcongif和netstat命令可以获得,包括接口的ip地址.子网掩码.广播地址.以及mtu等

三:ZooKeeper的ZAB协议

一:ZAB协议概述--->ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeeper Atomic Broadcast(ZAB,zookeeper原子消息广播协议)的协议作为其数据一致性的核心算法.--->ZAB协议是为分布式协调服务ZooKeeper专门设计的一种支持漰溃恢复的原子广播协议.--->ZooKeeper实现了一种主备模式的系统架构来保持集群中各副本之间数据的一致性.具体,ZooKeeper使用一个单一的主进程来接收并处理客户端的所有事务请求,并采

tcp-ip协议第二、三章

第一章讲解的是tcp-ip的概述,涵盖了网络的各个方面 第二章讲解物理链路层 以太网和ieee802 封装 拆分 slip串行线网络 链路层主要功能就是 1:发送接收ip数据包 2:发送arp和接收arp模块应答 3 发送rarp和接收rarp模块应答   环回接口本机通信仍然完成的是整个网络分层的步骤程序,没有省略中间网络层和传输层 mtu是最大传输单元 第三章网际协议   首先强调的是所有的数据都是以ip数据包为核心,提供不可靠的运输(出现问题终止),tcp提供可靠的运输(出现问题重传) i

&lt;从PAXOS到ZOOKEEPER分布式一致性原理与实践&gt;读书笔记-ZAB协议

本文属于分布式系统学习笔记系列,上一篇笔记整理了paxos算法,本文属于原书第四章,梳理zookeeper的目标特性及ZAB协议. 1.介绍zookeeper 1.1ZooKeeper保证一致性特性 ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式程序可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调通知.集群管理.master选举.分布式锁.分布式队列等功能.ZooKeeper可以保证如下分布式一致性特性. 1.顺序一致性: 从同一个客户端发起的事务请求,最终将严

web—第三章XHTML

web—第三章XHTML 又是一周 我们学的了做表单:一开始我以为表单是表格.但结果:表单是以采集和提交用户输入数据的,这样讲很迷,说简单点就是登陆端.比如:Facebook.twitter.Instagram .非常强大的是表单不仅仅可以做登录端,注册.做一些像我们在网上购买东西选择数量或者是点菜的时候选票等等都可以. 首先最开始,就是理解表单是什么东西:表单的作用是什么? 其实很简单:先从表单的作用说起,表单的主要作用在于网页上提供一个图形用户界面,当用户输入正确的用户名和密码后,输入的数据

操作系统思考 第三章 虚拟内存

第三章 虚拟内存 作者:Allen B. Downey 原文:Chapter 3 Virtual memory 译者:飞龙 协议:CC BY-NC-SA 4.0 3.1 简明信息理论 比特是二进制的数字,也是信息的单位.一个比特有两种可能的情况,写为0或者1.如果是两个比特,那就有四种可能的组合,00.01.10和11.通常,如果你有b个比特,你就可以表示2 ** b个值之一.一个字节是8个比特,所以它可以储存256个值之一. 从其它方面来讲,假设你想要储存字母表中的字母.字母共有26个,所以你

《构建之法》第一、二、三章读后感

第一章系统地告诉了我们什么是软件,也就是软件=程序+软件工程,软件工程是怎样的一个存在,包括软件的种类和性质,都系统地分析给我们,更是强调了一个工程团队对软件工程的重要性,同时也给我们指出了某些软件会出现的问题,比如说会有BUG,给我们介绍了当遇到这些问题的时候需要怎样去解决问题和修正BUG,完成客户给我们的要求.总的来说,第一章就是带我们走进了软件工程的线索. 第二章叫做个人技术和流程,在这一章中我看到了程序执行过程中耗时最多的三个函数,三个函数加起来占用了整个程序的84%的时间,并给我们分析

《从0到1》笔记 第三章 所有成功的企业都是不同的

第三章 所有成功的企业都是不同的----科技企业的创新就是为了垄断,成功的科技企业都是垄断式的. 在商界,钱就是一切,或至少是非常重要.垄断者除了想着赚钱外还有余力想其它事情,而非垄断者就不行.在完全竞争中,企业着眼于短期利益,不可能对未来进行长期规划.要想企业从每日的生成竞赛中解脱出来,唯一的方法就是:获取垄断利润. 企业成功的原因各有不同:每个垄断企业都是靠解决独一无二的问题而获得垄断地位:而企业失败的原因却相同:它们都无法逃脱竞争. 国内的垄断者,如百度,解决了中文搜索的问题,垄断了搜索的