Paxos分析之一—Paxos是什么

Paxos有2种含义,广义上来讲,是指一系列协议的统称,比如cheap Paxos <Cheap Paxos>(2004), fast paxos <Fast Paxos >(2005),Disk Paxos 和Byzantine Paxos<The ABCD’s of Paxos> (2001);狭义上来讲,是指Leslie Lamport在其论文<The Part-Time Parliament >(1989)中提出的协议。

那Paxos协议是什么那?可以看到很多文章在介绍Paxos时,都将其介绍为“是一种强一致性协议”,我觉得这么说不够准确。那么Paxos究竟是什么那?我们来看看几篇Paxos经典的论文是如何定义Paxos的。Leslie Lamport在自己另外一篇论文<Paxos Made Simple> (2001)里这么说的:The Paxos algorithm for implementing a fault-tolerant distributed system
has been regarded as difficult to understand, perhaps because the original
presentation was Greek to many readers. 我们的重点在前半句,至于要理解后半句,需要了解Paxos的产生历史,Paxos的历史是计算机历史中最有趣的历史之一,这里就不八卦了,有兴趣的同学可以自行google.

另外一篇论文<Paxos made code>这样描述Paxos:
The PAXOS algorithm for solving consensus is used to implement a fault-tolerant
Atomic Broadcast.

这篇论文中<Paxos Made Live - An Engineering Perspective>这样描述:
We used the Paxos algorithm (“Paxos”) as the base for a framework that implements a fault-tolerant
log.

从这3句描述Paxos的句子中可以发现,都共同提到了一个词:fault-tolerant。Fault-tolerant就是Paxos的核心。通常Paxos被用在数据写入多个副本的场景,Paxos可以保证在容忍少量节点(n/2)挂掉的情况下仍然可以保证数据最终被成功写入所有副本。假设我们不用Paxos,自己来实现副本写入的逻辑,我们同步写所有的副本,当所有副本都返回成功后,再通知用户这条数据写入成功,这种实现可以达到写入多个副本的目的,但是这种方式无法容忍节点挂掉。Paxos的核心就是在容忍节点挂掉的情况下,保证数据最终写入所有副本。所以说Paxos的核心是fault-tolerant,在任何一个Paxos的定义中都没有提到一致性,所以说一致性不是Paxos关注的点。(Paxos是否保证强一致性这里就不讨论了)

从上面的3句话中我们还能看出2个点,第一个点是Paxos解决什么问题:consensus。什么是consensus,有人把它翻译成一致性(也许这就是为什么Paxos被有些人误解为"是一种强一致性协议"的原因吧,错误的翻译了这个词),其实不准确,应该翻译成共识。共识也就是说多个进程在分布式的条件下,针对一个值达成共识。后面会再解释consensus。

第二个点就是Paxos可以用来实现Atomic Broadcast,或者log(也可以说状态机)。后面也会再解释Atomic Broadcast和状态机。

总结一下Paxos是什么:

核心:fault-tolerant
解决的问题:consensus
应用在:Atomic Broadcast和状态机
场景:数据写入多个副本

接下来,说一下Paxos具体是什么?Leslie Lamport的论文中的Paxos协议由2个部分组成,一个是basic Paxos,一个是multi Paxos。协议中定义了4中角色:client, proposer, acceptor, learner 。这里要特别指出的是learner。了解Zookeeper的人都知道,Zookeeper所使用的Zab协议和Paxos类似(有人说Zab是Paxos的变种,个人觉得2者差别很大)。Zookeeper中有3种角色,leader,follower,observer,在Zookeeper中observer角色其实是可用可无,但是在Paxos中learner角色是必须的。个人曾经受上面说法的影响,认为learner类似oberserver的所起的功能,导致很长时间无法正确理解Paxos协议的细节。

Basic Paxos是一种consensus算法。consensus像上面所说的是用来让多个进程针对一个值达成共识的,而且这个共识一旦达成就不可更改。这里我们先不展开说明达成共识是怎样的一个过程。我们这里假设你已经理解了这个过程。这个过程可以单独再写篇文章来分析。这个达成共识过程就是Atomic Broadcast要完成功能。Zab其实就是从这个角度出发,将自己叫作原子广播协议(Zookeeper Atomic Broadcast)。

那么我们针对一个值达成共识有什么用?这就要来说multi Paxos。我们把独立的一个这样达成共识的过程成之为一个实例(instance)。那么我们反复运行这个过程,就可以形成一系列的共识,也就是一系列的实例。那么这个反复运行的过程就是multi Paxos。一系列的实例,就是一系列确定下来的值,这一系列的值可以看做一个日志流,而且是复制到所有节点上的日志流。Raft就是从这个角度出发,这样定义自己"Raft is a consensus algorithm for managing a replicated log"<In Search of an Understandable Consensus Algorithm>。(个人觉得Raft和Paxos的细节差别也很大)。接下来我们就可以基于这个日志实现状态机(state machine)。这个状态机可以用来实现可靠的存储系统,在存储系统中的一个节点写入一个值或者修改一个值,我们将这个变更写入日志,做为日志的一条记录,也就是一个Paxos的一个实例,日志被复制到其他节点,其他节点按照相同的顺序重做日志,那么就会得到和主节点完全相同的状态。从而实现了一个fault-tolerant的存储系统。所以说存储系统引入类似Paxos这样的协议是提高了系统的可靠性。

最后再总结一下Paxos是什么:

核心:fault-tolerant
解决的问题:consensus
应用在:Atomic Broadcast和状态机
场景:数据写入多个副本
时间: 2024-09-06 00:10:47

Paxos分析之一—Paxos是什么的相关文章

七:zookeeper与paxos的分析

 zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等. 好抽象,我们改变一下方式,先看看它都提供了哪些功能,然后再看看使用它的这些功能能做点什么.   二.            zookeeper提供了什么 简单的说,zookeeper=文件系统+通知机制. 1. 文件系统 Zookeeper维护一个类似文件系

Zookeeper全解析——Paxos作为灵魂

Zookeeper全解析--Paxos作为灵魂 原计划在介绍完ZK Client之后就着手ZK Server的介绍,但是发现ZK Server所包含的内容实在太多,并不是简简单单一篇Blog就能搞定的.于是决定从基础搞起比较好. 那么ZK Server最基础的东西是什么呢?我想应该是Paxos了.所以本文会介绍Paxos以及它在ZK Server中对应的实现. 先说Paxos,它是一个基于消息传递的一致性算法,Leslie Lamport在1990年提出,近几年被广泛应用于分布式计算中,Goog

四:分布式事务一致性协议paxos通俗理解

转载地址:http://www.lxway.com/4618606.htm 维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法. Paxos算法目前在Google的Chubby.MegaStore. Spanner等系统中得到了应用,Hadoop中的ZooKeeper也使用了Paxos算法,在上面的各个系统中,使用的算法与Lamport提出的 原

Fast Paxos 和 Paxos的区别

自从Lamport在1998年发表Paxos算法后,对Paxos的各种改进工作就从未停止,其中动作最大的莫过于2005年发表的Fast Paxos.无论何种改进,其重点依然是在消息延迟与性能.吞吐量之间作出各种权衡.为了容易地从概念上区分二者,称前者Classic Paxos,改进后的后者为Fast Paxos. 1. Fast Paxos概览 Lamport在40多页的论文中不仅提出了Fast Paxos算法,并且还从工程实践的角度重新描述了Paxos,使其更贴近应用场景.从一般的Client

分布式系列文章——Paxos算法原理与推导

点击我的博客查看原文. Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资料后发现,学习Paxos最好的资料是论文<Paxos Made Simple>,其次是中.英文版维基百科对Paxos的介绍.本文试图带大家一步步揭开Paxos神秘的面纱. Paxos是什么 Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一

Fast Paxos

自从Lamport在1998年发表Paxos算法后,对Paxos的各种改进工作就从未停止,其中动作最大的莫过于2005年发表的Fast Paxos.无论何种改进,其重点依然是在消息延迟与性能.吞吐量之间作出各种权衡.为了容易地从概念上区分二者,称前者Classic Paxos,改进后的后者为Fast Paxos. 1. Fast Paxos概览 Lamport在40多页的论文中不仅提出了Fast Paxos算法,并且还从工程实践的角度重新描述了Paxos,使其更贴近应用场景.从一般的Client

六:分布式事务一致性协议paxos的分析

最近研究paxos算法,看了许多相关的文章,概念还是很模糊,觉得还是没有掌握paxos算法的精髓,所以花了3天时间分析了libpaxos3的所有代码,此代码可以从https://bitbucket.org/sciascid/libpaxos 下载.对paxos算法有初步了解之后,再看此文的效果会更好:如果你也想分析libpaxos3的话,此文应该会对你有不小帮助:关于paxos的历史这里不多做介绍,关于描述paxos算法写的最好的一篇文章应该就是维基百科了,地址戳这里:http://zh.wik

分布式一致性算法:Raft 算法(论文翻译)

点击我的博客查看原文. Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的思想.如果对 Paxos 算法感兴趣,可以看我的另一篇文章:分布式系列文章--Paxos算法原理与推导 摘要 Raft 是用来管理复制日志(replicated log)的一致性协议.它跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同.这

海量存储之十八--一致性和高可用专题

我们已经在上面的分析中,我们已经看到observer模型在多机场景下的问题,所以,paxos模型的目标就是解决这个问题,他解决这个问题的方法就是quorum模型. 我的目标是让大家能弄明白,掌握这些复杂的概念,所以我也会将以前我在淘宝java中间件团队内分享时候,大家经常犯的一些错误,也写到[]里面,尽可能让大家少走弯路,如果有什么感想,疑问,后面可以留言. PS 广告插播 : 淘宝java中间件团队,你值得拥有:) ----PAXOS------ 好,我们回顾一下上下文,我们在上篇文章中谈到,