Paxos分析之一—Paxos是什么

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 分析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和状态机
场景:数据写入多个副本
目录
相关文章
|
Java 测试技术 Maven
maven 打jar包:mvn clean package
maven 打jar包:mvn clean package
282 7
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
自然语言处理 数据挖掘 数据安全/隐私保护
云上电商解决方案:重塑电商生态,驱动数字化转型
随着数据泄露和隐私保护问题的日益严重,云上电商解决方案将更加注重数据安全和隐私保护。通过加强数据加密、访问控制等措施,确保用户数据的安全性和隐私性。 结语 云上电商解决方案作为电商企业数字化转型的重要工具,正逐步改变着电商行业的生态格局。通过提供灵活、高效、智能的电商服务,
730 8
|
自然语言处理 监控 BI
ERP系统中的多语言与多币种支持
【7月更文挑战第25天】 ERP系统中的多语言与多币种支持
748 3
|
小程序
【微信小程序】英文字母不换行问题 flex布局字符超出宽度折行问题:设置了word-break: break-all;和flex: 1;冲突flex不生效问题
【微信小程序】英文字母不换行问题 flex布局字符超出宽度折行问题:设置了word-break: break-all;和flex: 1;冲突flex不生效问题
452 1
|
数据库
解决numpy.core._exceptions.UFuncTypeError: ufunc ‘add‘ did not contain a loop with signature matching
解决numpy.core._exceptions.UFuncTypeError: ufunc ‘add‘ did not contain a loop with signature matching
1584 0
解决numpy.core._exceptions.UFuncTypeError: ufunc ‘add‘ did not contain a loop with signature matching
|
人工智能 自然语言处理 搜索推荐
阿里推出 AtomoVideo 高保真图生视频框架,兼容多种文生图模型
【2月更文挑战第17天】阿里推出 AtomoVideo 高保真图生视频框架,兼容多种文生图模型
1277 5
阿里推出 AtomoVideo 高保真图生视频框架,兼容多种文生图模型
|
Shell 网络安全 开发工具
配置SSH时候,Permission denied问题解决方法
配置SSH时候,Permission denied问题解决方法
966 4
|
Linux Shell 开发者
深入了解 Linux 命令 `autoscan`:为自动配置脚本做准备
`autoscan` 是 Linux 和 Unix-like 系统中用于软件配置的工具,它扫描源代码并生成 `configure.scan` 文件,为 `autoconf` 创建初始模板。开发者通常将 `configure.scan` 重命名为 `configure.ac` 并进行编辑,然后用 `autoconf` 转换为可执行的 `configure` 脚本。在使用前,记得备份项目,确保权限,并安装 `autoconf`。`configure` 脚本能适应多种系统,检查环境并生成 `Makefile`。
|
机器学习/深度学习 算法 TensorFlow
使用Python实现基于深度学习的图像分类器
本文介绍了如何使用Python编写一个基于深度学习的图像分类器。我们将使用TensorFlow框架和Keras库来建立模型,并使用MNIST手写数字数据集进行训练和测试。通过本文,您将了解到如何设计和训练一个卷积神经网络(CNN),并将其应用于图像分类任务中。