Paxos 和 筏 有两种众所周知的共识协议,它们已经存在了很长时间,并且对于理解分布式计算机系统中的状态机复制仍然至关重要。 Paxos实际上是一系列协议,它们依赖于一组不同的假设,具体取决于系统,而Raft是Paxos的替代共识,旨在使人们更容易理解.
理解Paxos和Raft有助于进一步了解分布式共识协议如何在加密货币中工作,例如工作量证明和实用的拜占庭容错技术.
Paxos和木筏的背景
Paxos最初于1989年提出,并以其作为证明容错分布式共识的安全性的一种特别优雅的方法而著称。尽管Paxos具有最初的新颖性,但由于其广泛的假设和复杂的行为,通常被认为难以理解.
Raft是Paxos的更易于理解的替代产品,在性能和容错保证方面与Paxos等效。 Paxos和Raft上都有大量可用的资源,并且它们在当今的各种应用程序和系统中得到了广泛的研究和使用。.
Paxos的一些更知名的实际用法位于Google的NewSQL数据库中 扳手 和 IBM SAN卷控制器 用于存储可视化服务.
木筏有几个开源 参考实施 支持多种语言,包括Go,Java,C ++和Rust.
什么是Paxos?
分布式容错系统中的共识正在一组不可靠的参与者中达成一致。 Paxos是一系列共识算法,可以在有关给定系统中的处理器,参与者和消息的假设之间进行各种折衷。该协议保证安全性,经常用于需要大数据集持久性的地方.
异步共识协议不能同时保证安全性和活跃性,因此它们都有其固有的权衡。 Paxos是最早的分布式容错共识协议之一,它通过确保最终由参与者组在共识轮中选择了建议的值来保证安全并尝试产生活力.
Paxos共识中有三个角色,称为代理:
- 提案人
- 接受者
- 学习者
达成共识的目标是使一组参与者在每一轮中就单一价值达成协议。当提议者将提议的价值发送给一组接受者时,就会开始一轮共识。接受者可以接受给定提议者的提议价值,并且一旦达到某个阈值,该价值就会被网络批准.
但是,要使共识正常工作,Paxos的首要条件是:
“接受者必须接受他们收到的第一个提议的价值。”
这导致了一些提议者发送接受者接受的提议值的问题,但是由于他们正在接受第一个提议值,因此所有提议者都不接受多数值。 Paxos通过唯一地索引接受者收到的每个建议值来解决此问题,从而使他们可以接受多个建议.
唯一编号定义每个提案,一旦特定提议值被大多数接受者接受,网络便会选择一个值,称为 选择 值。可以选择多个建议,但是有必要通过确保所有建议都具有相同的值来验证安全性。根据Leslie Lamport对Paxos所需的第二种条件的定义,以确保安全:
“如果选择了价值为v的提案,则每个选择的编号较高的提案都将具有值v。”
网络中的通信是异步的,因此某些接收者有可能没有收到所选的值,只要不违反条件1和2,就可以了。.
提议者将某些限制作为消息连同值一起传递给接受者集。这些叫做 准备要求 并包含2个主要请求:
- 承诺绝不接受提案 ñ (n是新的投标编号)
- 回应数量少于的最高提案 ñ 接受者已经接受.
根据兰珀特:
“如果提议者从大多数接受者那里收到请求的答复,那么它可以发布编号为n且值为v的提议,其中v是答复中编号最高的提议的值,或者是提议者选择的任何值如果响应者没有提出建议。”
提议者随后发送接受请求,该请求被接受者确认。然后,提议者将提交消息发送给接受者,接受者可以忽略(不影响安全性)或指示值提交成功。一旦某个阈值的接受者提交了该值,则该共识回合的协议终止并外化该值.
Paxos的复杂设计是,尽管其他节点忽略或拒绝了建议的值,但当大多数节点都同意时它可以接受值。这与之前的共识迭代不同,共识迭代要求所有节点都同意,并且由于单个节点的故障而使协议受阻.
只要投标编号是唯一的,Paxos可以选择一个确保安全的值。重要的是要注意,接受者只需记住已接受的编号最高的提议。相反,提议者只要不重新发布具有相同唯一编号的提议,就可以始终放弃该提议.
在协议中分解提议者和接受者的角色如下:
提案人
- 提交提案 ñ 对接收者以及准备请求,等待多数答复.
- 如果大多数接受者都同意,则他们将以同意的值进行答复。如果多数人拒绝,则放弃并重新启动该过程.
- 提议者随后发送带有以下内容的提交消息: ñ 和价值,如果大多数人接受.
- 如果大多数接受者接受提交消息,则协议回合完成.
受体
- 接收提案并将其与已同意的编号最高的提案进行比较.
- 如果 ñ 较高则接受建议,如果n较低则拒绝建议.
- 如果其值与先前接受的投标相同,并且其序号是同意的最高编号,则接受后续提交消息.
提案可以提出多个提案,但需要分别遵循每个提案的算法.
最后,角色 学习者 是为了发现大多数接受者已经接受了提议者的提议。选择杰出的学习者,该学习者将所选的值传播到网络中的其他学习者。当所有接受者将其决定通知相应的学习者,或者接受者响应一组独特的学习者,然后将信息传播给其他学习者时,可以使用此过程的变体。.
正式地,Paxos算法为取得进展所需的每一轮区分一个领导者(提议者)。接受者可以确认提议者的领导,该提议者允许使用Paxos在节点集群中选择领导者。但是,如果两个提议者在争夺领导者职位时未达成共识,则Paxos可能会停滞不前。尽管这种非终止状态不太可能会持续下去.
什么是木筏?
Raft被创建为Paxos的更易理解的版本,具有相同的容错和性能保证。 Raft还改进了在其之上构建协议的实际实现的能力。由于Paxos的复杂性,因此无法为在此基础上进行开发提供坚实的基础。 Raft与Paxos相似,因此比较两者需要简要介绍Raft如何简化Paxos流程.
筏采用基于的假设是节点的集群只有一个当选的领导人的领导者和跟随者模型。领导者管理参与节点之间的日志复制,一旦失败或断开连接就被替换.
算法开始时也会选择一个领导者。为了给领导者选择一些背景,它在共识中起着至关重要的作用,并且在特定算法中是可区别的。例如,在Nakamoto的工作量证明中,领导者的选择是通过每轮大约10分钟的抽奖式采矿过程来实现的。在实用的拜占庭式容错(pBFT)中,领导者选择通过循环样式格式执行.
阅读:什么是中本共识?
筏通过候选节点发起的过程选择领导者。如果候选人在称为“ 选举超时, 然后他们增加自己的选票 期限计数器 并将其广播到其他节点。候选人成为其他候选人的追随者,而其他候选人的任期数字至少与其本人一样大,这种连锁效应在节点之间持续不断,直到一个候选人获得多数追随者.
领导者控制节点之间的日志复制,在该节点中,客户端将客户端请求命令发送到其跟随者。如果大多数关注者确认复制,则该请求已提交。关注者还将提交应用于其本地状态机.
Raft通过让新领导者强制其跟随者复制其自己的日志,从而保留了遭受故障或领导者失败的节点的容错能力。删除彼此不一致的所有条目,以保持日志复制的一致性.
领导者候选人必须拥有比跟随者日志更新的日志。如果候选人的日志不如潜在的追随者(在此情况下为投票人)更新,则该候选人将被拒绝.
总体而言,Raft将共识分解为3个子问题:
- 领导人选举
- 日志复制
- 安全
共识协议使用 强大的领导者, 这意味着Raft中的领导节点会对过程产生实质性影响,同时仍受协议限制。因此,与Paxos相比,筏板在设计上更为直接.
结论
Paxos和Raft是重要的共识协议,它们是较大的分布式容错生态系统的核心组件。虽然未直接用于加密货币,但用于加密货币网络的共识协议是从Paxos和Raft的设计中得出的许多特征假设.