前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >zookeeper学习系列:四、Paxos算法和zookeeper的关系

zookeeper学习系列:四、Paxos算法和zookeeper的关系

作者头像
架构师刀哥
发布于 2018-03-20 09:37:00
发布于 2018-03-20 09:37:00
1.5K00
代码可运行
举报
文章被收录于专栏:坚毅的PHP坚毅的PHP
运行总次数:0
代码可运行

一、问题起源

淘宝搜索的博客 http://www.searchtb.com/2011/01/zookeeper-research.html  提到Paxos是zookeeper的灵魂

有一篇文章标题更是以“Zookeeper全解析——Paxos作为灵魂” 作为标题,认为是zookeeper的基础:

Google的Chubby,Apache的Zookeeper都是基于它的理论来实现的,Paxos还被认为是到目前为止唯一的分布式一致性算法,其它的算法都是Paxos的改进或简化。有个问题要提一下,Paxos有一个前提:没有拜占庭将军问题。就是说Paxos只有在一个可信的计算环境中才能成立,这个环境是不会被入侵所破坏的。

Paxos 这个算法是Leslie Lamport在1990年提出的一种基于消息传递的一致性算法.Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。

part-time parliament Paxos Made Simple里这样描述Paxos算法执行过程:

  1. prepare 阶段:
    1. proposer 选择一个提案编号 n 并将 prepare 请求发送给 acceptors 中的一个多数派;
    2. acceptor 收到 prepare 消息后,如果提案的编号大于它已经回复的所有 prepare 消息,则 acceptor 将自己上次接受的提案回复给 proposer,并承诺不再回复小于 n 的提案;
  2. 批准阶段:
    1. 当一个 proposer 收到了多数 acceptors 对 prepare 的回复后,就进入批准阶段。它要向回复 prepare 请求的 acceptors 发送 accept 请求,包括编号 n 和根据 P2c 决定的 value(如果根据 P2c 没有已经接受的 value,那么它可以自由决定 value)。
    2. 在不违背自己向其他 proposer 的承诺的前提下,acceptor 收到 accept 请求后即接受这个请求。

wiki上是两个阶段,论文里却是说三阶段,而且默认就有了个proposer相当于leader。查资料有大侠列出了第三个阶段(http://www.wuzesheng.com/?p=2724):

3. Learn阶段:

  • 当各个Acceptor达到一致之后,需要将达到一致的结果通知给所有的Learner.

zookeeper采用org.apache.zookeeper.server.quorum.FastLeaderElection作为其缺省选举算法

这篇文章http://csrd.aliapp.com/?p=162&replytocom=782 直接用paxos实现作为标题,提到  zookeeper在选举leader的时候采用了paxos算法(主要是fast paxos)

偶然看到下边有人反驳:

魏讲文:“

FastLeaderElection根本不是Paxos,也不是Fast Paxos的实现。 FastLeaderElection源码与Paxos的论文相去甚远。

Paxos与 FastPaxos算法中也有一个leader选举的问题。

FastLeaderElection对于zookeeper来讲,只是相当于Paxos中的leader选举。

 二、资料证实

好的,查查资料,分析源码开始调研

首先是魏讲文的反驳

There is a very common misunderstanding that the leader election algorithm in zookeeper is paxos or fast paxos. The leader election algorithm is not paxos or fast paxos, please consider the following facts:

  1. There is no the concept of proposal number in the leader election in zookeeper. the proposal number is a key concept to paxos. Some one think the epoch is the proposal number, but different followers may produce proposal with the same epoch which is not allowed in paxos.
  2. Fast paxos requires at least 3t + 1 acceptors, where t is the number of servers which are allowed to fail [3]. This is conflict with the fact that a zookeeper cluster with 3 servers works well even if one server failed.
  3. The leader election algorithm must make sure P1. However paxos does provide such guarantee.
  4. In paxos, a leader is also required to achieve progress. There are some similarities between the leader in paxos and the leader in zookeeper. Even if more than one servers believe they are the leader, the consistency is preserved both in zookeeper and in paxos. this is very clearly discussed in [1] and [2]. 

然后是作者三次对比

1)邮件列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Our protocol instead, has only two phases, just like a two-phase 
commit protocol. Of course, for Paxos, we can ignore the first phase in runs in 
which we have a single proposer as we can run phase 1 for multiple instances at 
a time, which is what Ben called previously Multi-Paxos, I believe. The trick 
with skipping phase 1 is to deal with leader switching. 

2)出书的访谈

We made a few interesting observations about Paxos when contrasting it to Zab, like problems you could run into if you just implemented Paxos alone. Not that Paxos is broken or anything, just that in our setting, there were some properties it was not giving us. Some people still like to map Zab to Paxos, and they are not completely off, but the way we see it, Zab matches a service like ZooKeeper well.

zk的分布式一致性算法有了个名称叫Zab

3)论文

We use an algorithm that shares some of the character- istics of Paxos, but that combines transaction logging needed for consensus with write-ahead logging needed for data tree recovery to enable an efficient implementa- tion. 

 三、leader选举分析

在我理解首先在选举时,并不能用到paxos算法,paxos里选总统也好,zk选leader也好,跟搞个提案让大部分人同意是有区别的。选主才能保证不会出现多proposer的并发提案冲突

谁去作为proposer发提案?是paxos算法进行下去的前提。而提出提案让大部分follower同意则可用到类似paxos的算法实现一致性。zookeeper使用的是Zab算法实现一致性。

zk的选主策略:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
there can be at most one leader (proposer) at any time, and we guarantee this by making sure 
that a quorum of replicas recognize the leader as a leader by committing to an 
epoch change. This change in epoch also allows us to get unique zxids since the 
epoch forms part of the zxid. 

每个server有一个id,收到提交的事务时则有一个zxid,随更新数据的变动,事务编号递增,server id各不同。首先选zxid最大的作为leader,如果zxid比较不出来,则选server id最大的为leader

zxid包含一个epoch数字,epoch指示一个server作为leader的时期,随新的leader诞生而递增。

再看代码:

四、zookeeper数据更新原理分析

了解完选主的做法后,来了解下同步数据的做法,同步数据则采用Zab协议:Zookeeper Atomic broadcast protocol,是个类似两阶段提交的协议:

  1. The leader sends a PROPOSAL message, p, to all followers.
  2. Upon receiving p, a follower responds to the leader with an ACK, informing the leader that it has accepted the proposal.
  3. Uponreceivingacknowledgmentsfromaquorum(thequorumincludestheleader itself), the leader sends a message informing the followers to COMMIT it. 

跟paxos的区别是leaer发送给所有follower,而不是大多数,所有follower都要确认并通知leader,而不是大多数。

保证机制:按顺序广播的两个事务, T 和 Tʹ ,T在前则Tʹ 生效前必须提交T。如果有一个server 提交了T 和 Tʹ ,则所有其他server必须也在Tʹ前提交T。

五、leader的探活

为解决leader crash的问题,避免出现多个leader导致事务混乱,Zab算法保证:

1、新事务开启时,leader必须提交上个epoch期间提交的所有事务

2、任何时候都不会有两个leader同时获得足够多的支持者。

一个新leader的起始状态需要大多数server同意

六、observer

zk里的第三种角色,观察者和follower的区别就是没有选举权。它主要是1、为系统的读请求扩展性存在 2、满足多机房部署需求,中心机房部署leader、follower,其他机房部署observer,读取配置优先读本地。

七、总结

我认为zookeeper只能说是受paxos算法影响,角色划分类似,提案通过方式类似,实现更为简单直观。选主基于voteid(server-id)和zxid做大小优先级排序,信息同步则使用两阶段提交,leader获取follower的全部同意后才提交事务,更新状态。observer角色则是为了增加系统吞吐和满足跨机房部署。

参考文献

[1] Reed, B., & Junqueira, F. P. (2008). A simple totally ordered broadcast protocol. Second Workshop on Large-Scale Distributed Systems and Middleware (LADIS 2008). Yorktown Heights, NY: ACM. ISBN: 978-1-60558-296-2. [2] Lamport, L. Paxos made simple. ACM SIGACT News 32, 4 (Dec. 2001), 1825. [3] F. Junqueira, Y. Mao, and K. Marzullo. Classic paxos vs. fast paxos: caveat emptor. In Proceedings of the 3rd USENIX/IEEE/IFIP Workshop on Hot Topics in System Dependability (HotDep.07). Citeseer, 2007.

[4]O'Reilly.ZooKeeper.Distributed process coordination.2013

[5] http://agapple.iteye.com/blog/1184023  zookeeper项目使用几点小结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-10-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
服务注册组件学习--zookeeper、eureka、ETCD
导语:什么是服务注册中心?为什么需要服务注册中心?本文从服务发现的必要性入手,并对几款应用比较广泛的服务发现组件进行学习总结,分析每个组件使用的协议算法即原理,最后总结如果我们自己搭建一个服务发现组件需要实现什么基本功能?并且在实战项目中如何选择合适的服务发现组件?
吃完橙子了哈
2021/05/29
1.4K1
ZooKeeper学习第七期--ZooKeeper一致性原理
我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示。
用户5640963
2019/07/26
3080
ZooKeeper学习第七期--ZooKeeper一致性原理
【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解
  » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票
江中散人_Jun
2023/10/16
2620
【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解
一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR超详细解析
在常见的分布式系统中,总会发生诸如机器宕机或网络异常(包括消息的延迟、丢失、重复、乱序,还有网络分区)等情况。
王知无-import_bigdata
2020/12/18
3.5K0
一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR超详细解析
ZooKeeper原理-paxos算法,ZAB协议
我在 分布式高可用的ZooKeeper集群搭建与基本操作 提到,zk的关键字是分布式协调,其可扩展、可靠性、时序性以及快速保证了zk的高性能。
行百里er
2020/12/02
1.1K0
ZooKeeper原理-paxos算法,ZAB协议
面试官:Zookeeper 怎么保证分布式事务的最终一致性?
ZAB全称Zookeeper Atomic Broadcast(ZAB,Zookeeper原子消息广播协议)
业余草
2021/03/04
1.7K0
面试官:Zookeeper 怎么保证分布式事务的最终一致性?
multi-paxos、raft和zab协议的核心区别
Google Chubby的作者Mike Burrows曾说:“这个世界上只有一种一致性算法,那就是Paxos,其它算法都是残次品。”由此可见,raft、zab等一致性算法都是在paxos的基础上通过增加或者调整一些限制条件演进而来的。目前Paxos算法在Google的Chubby、MegaStore、Spanner等系统中得到了应用,而raft在redis集群的leader选举中有很好地应用,zab则是雅虎工程师针对zookeeper设计的分布式一致性算法。paxos实际上又分为Basic Paxos、Fast Paxos和Multi-Paxos,而前两者只能对一个值形成决议,因此它们几乎只是用来做理论研究,并不直接应用在实际工程中。因而本文后面提到的Paxos,实际上指的都是Multi-Paxos。
saintyyu
2021/11/22
1.7K2
multi-paxos、raft和zab协议的核心区别
Zookeeper - 介绍篇(1)
Paxos算法是Zookeeper实现的核心思路ZAB协议的基础,但是Paxos算法理解比较抽象。这里先简述下我的理解: 首先,Paxos算法解决的问题是:每一个处于正常工作的服务端都执行一个相同的命令序列。 意思就是:在如下的分布式系统中,有多个Client和多个Server。
干货满满张哈希
2021/04/12
5060
Zookeeper - 介绍篇(1)
分布式理论须知
作为一名后台开发人员,你可能不了解分布式相关理论,但是你做的很多事情都是符合分布式理论的。比如为了保证服务的高可用,我们可能经常采用降级兜底的策略。举个例子,比如我们做个性化推荐服务时,需要从用户中心获取用户的个性化数据,以便代入到模型里进行打分排序,但如果用户中心服务挂掉,我们获取不到数据了,那么就不推荐了?显然不行,我们可以在本地 cache 里放置一份热门商品以便兜底。
恋喵大鲤鱼
2022/06/27
4820
分布式理论须知
大数据入门:ZooKeeper工作原理
在大数据生态当中,分布式集群当中的一个重要组件,就是Zookeeper,作为集群运行的重要管理者,正如其名字“动物园管理员”所示,负责集群运行的诸多事宜。今天的大数据入门分享,我们就来具体讲讲,ZooKeeper工作原理。
成都加米谷大数据
2020/12/08
5820
大数据入门:ZooKeeper工作原理
10分钟了解ZooKeeper
ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。
Bug开发工程师
2018/08/17
3730
10分钟了解ZooKeeper
zookeeper分布式协调详解
ZooKeeper的数据模型,在结构上和标准文件系统的非常相似,都是采用这种树形层次结构,ZooKeeper树中的每个节点被称为:Znode。和文件系统的目录树一样,ZooKeeper树中的每个节点可以拥有子节点:
leobhao
2022/06/28
6350
zookeeper分布式协调详解
zookeeper 及 paxos 算法基本介绍
zookeeper 是一个高性能的分布式应用程序协调服务,应用程序可以基于他非常简单的实现同步服务、分组服务、配置维护、命名服务等,通过 zookeeper,你可以使用现成的组件实现一致性服务、分组管理、leader 选举。 由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper 的目的就在于此。 zookeeper 十分易用,它使用和文件系统中目录树相似的结构来实现他的功能,它使用 java 和 C 编写,运行在 java 环境下。
用户3147702
2022/06/27
5580
zookeeper 及 paxos 算法基本介绍
分布式一致性协议 - ZAB
学习ZAB,非常有必要聊聊它诞生的背景。因为在paxos的光芒下,还有必要折腾这样类似的算法吗?这个问题是我们初步了解ZAB关键。
并发笔记
2020/10/26
1.1K0
Paxos 协议简单介绍
Paxos 协议是少数在工程实践中证实的强一致性、高可用的去中心化分布式协议。Google 的很多大型分布式系统都采用了 Paxos 算法来解决分布式一致性问题,如 Chubby、Megastore 以及 Spanner 等。开源的 ZooKeeper 以及 MySQL 5.7 推出的用来取代传统的主从复制的 MySQL Group Replication 等纷纷采用 Paxos 算法解决分布式一致性问题。
JMCui
2021/04/13
2.8K0
Zookeeper的核心原理
类似于前面我们简单说了Zookeeper可能解决的问题,例如类似于实现分布式锁,控制任务执行
名字是乱打的
2022/01/12
4330
Zookeeper的核心原理
Zookeeper基础篇---面试Paxos算法
Paxos算法是一种基于消息传递的具有高容错性的一致性算法,Paxos算法是一种公认的晦涩难懂的算法,并且实现它有很大难度。比较有名的工程是实现有Google Chubby,ZAB,微信的PhxPaxos等。
小土豆Yuki
2020/06/15
8250
Zookeeper核心原理
  » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票
用户4283147
2022/10/27
3820
Zookeeper核心原理
Zookeeper——谈谈ZAB协议
ZAB(原子消息广播协议)。在Zookeeper中,主要依赖ZAB协议来实现分布式数据一致性。
用户5325874
2020/01/16
5690
Zookeeper——谈谈ZAB协议
ZooKeeper(一)
Propser,接受Client请求,向集群提出提议(propose),并在发送冲突的时候,起到冲突调节的作用,向议员,替民众提出议案
小土豆Yuki
2021/07/16
2960
ZooKeeper(一)
相关推荐
服务注册组件学习--zookeeper、eureka、ETCD
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档