分布式进阶__zookeeper的zab协议工作原理之原子广播

说zab协议之前必须提一下 paxos 协议 

paxos协议主要就是如何保证在分布式环网络环境下,各个服务器如何达成一致最终保证数据的一致性问题

ZAB协议,基于paxos协议的一个改进。

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

zookeeper并没有完全采用paxos算法, 而是采用zab Zookeeper atomic broadcast

zab协议的原理

1. 在zookeeper 的主备模式下,通过zab协议来保证集群中各个副本数据的一致性

2. zookeeper使用的是单一的主进程来接收并处理所有的事务请求,并采用zab协议,

把数据的状态变更以事务请求的形式广播到其他的节点

3. zab协议在主备模型架构中,保证了同一时刻只能有一个主进程来广播服务器的状态变更

4. 所有的事务请求必须由全局唯一的服务器来协调处理,这个的服务器叫leader,其他的叫follower

leader节点主要负责把客户端的事务请求转化成一个事务提议(proposal),并分发给集群中的所有follower节点

再等待所有follower节点的反馈。一旦超过半数服务器进行了正确的反馈,那么leader就会commit这条消息。

5.然后再进行leader 和 follower 直接的数据同步。

这里有几个地方要注意一下:

1、follower服务器的投票并不是真正意义上的投票,而是follower 服务器 表示收到了 leader节点发过来的消息,给予一个收到的提示。 跟分布式事务中的 两阶段提交 中的第一阶段类似。

2、zab协议 与 分布式事务不同的是, 分布式事务 的两阶段提交要求所有事务处理节点(器)都要投票同意。

    而zab协议中 只要求半数 服务器节点投票同意即可。

    为什么只要半数就可以了呢?是因为zab协议就是为了保证在网络不可靠的情况下,整个集群还能正常的工作。

    有超过半数的服务器投票同意,那么leader节点就执行写的操作,commit之后,再进行原子广播给其它的follower节点, 让 follower节点来同步数据

    如果跟两阶段提交一样,还需要所有节点都同意的话,那明显与zab协议的使用场景不同了。

图的流程大致是:

1、客户端发来一个request给第一个follower节点,如果是读请求,follower节点直接将数据返回。

2、如果是写请求,也就是事务请求,那么follower节点就将请求转发给leader,leader再像集群中的 follower节点发起一个事务请求提议(proposal)。

3、follower节点正常情况下 都会返回一个ack 给 leader ,表示 follower 节点收到 leader的消息了,这里就是所谓的投票。

    正常情况下都会投票的,没有投票的情况就是 有的follower 节点 挂掉了 投不了票就没投。

3、当机器中超过半数的服务器 都投票了(leader 自己本身也参与投票),那么 leader就commit 这个事务请求,然后再通过原子广播 通知 集群中其它的 follower 跟 Ob 节点来同步数据。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

如何构建爬虫代理服务?

如何构建爬虫代理服务 专栏作者:Kaito 起因 做过爬虫的人应该都知道,抓的网站和数据多了,如果爬虫抓取速度过快,免不了触发网站的防爬机制,几乎用的同一招就是...

466100
来自专栏杨建荣的学习笔记

MySQL备份恢复的自动化设计

MySQL的备份恢复是一直想要改进的地方,其中恢复是重中之重,这部分的工作要做成平台化的工作,算是有了前期的很多铺垫和延迟,最近在和同事的共同协作下,总算有了一...

23240
来自专栏猛牛哥的博客

hetzner独服安装proxmox过程

1.1K40
来自专栏程序源代码

springcloud学习手册-API Gateway (API网关)

导读 | API Gateway (API网关) ? 一、为什么服务之间需要使用API Gateway (API网关)呢? 引用「Chris Richardso...

42360
来自专栏数据之美

根据ip查找ISP运营商和归属地的几种方法

一般来说都是根据网上流传的各种IP库来解析获取对应的ISP和归属地的, 除非有实力的公司自己从运营商获取数据,然后做数据分析得到。 下面介绍前者,如何...

3K100
来自专栏ytkah

织梦DEDECMS后台精简删除不需要的文件

如果是一开始就不想要的话,安装版plus目录下进行如下操作。 删除:guestbook文件夹【留言板,后面我们安装更合适的留言本插件】; 删除:task文件夹和...

74540
来自专栏Java进阶

zookeeper的zab协议工作原理之原子广播

53860
来自专栏smartguys

(四):C++分布式实时应用框架——状态中心模块

  版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律追究的权利!

23850
来自专栏阿杜的世界

OAuth认证 学习与实践

OAuth是用户、服务提供商(用户信息的提供者)、第三方网站(用户资源的使用者)三者之间通过协作来完成信息的请求、授权、使用的协议。

9420
来自专栏熊训德的专栏

Hbase Replicaition 在腾讯云中应用概述

Hbase 的 Repliation 是通过 Zookeeper 的协助,从 Master 集群异步往 Slave 集群写 WAL 实现的。可以实现典型的 Ma...

91250

扫码关注云+社区

领取腾讯云代金券