paxos算法_共识算法(7) —— Paxos 算法详解

本文翻译自:伊利诺伊大学厄巴纳-香槟分校助理教授 Ling Ren 开设的讨论课:CS598 Consensus Algorithm

参考论文:

1998原论文,贼难懂​lamport.azurewebsites.net 2001简单版本,Lamport觉得我们太蠢了​www.microsoft.com

前言

前两篇文章我们证明了FLP不可能原理———在一个异步混沌的环境下,只要有一方可能发生错误,就不存在一个算法能够达成共识(同时达到安全性和存活性)。

那岂不是这个领域没有继续研究下去的必要了?Lamport想出了一个取巧的方法——放宽这个异步网络的定义,从而让存活性达到可能。这就是部分同步网络(partial synchronized network)的由来

部分同步网络的一种定义

我们知道在异步网络中,消息的传递时间是没有上限的。在部分异步网络中,我们定义这个消息在一个未知的时间上限
内会到达。

这个定义和异步有什么区别呢?区别在于:我们可以在算法中等待一条消息的到达。在算法的存活性证明中我们可以声明”因为消息一定会到达,所以算法一定会进行下去“;

那这个定义和同步网络有什么区别呢?区别在于,我们不能在算法中使用这个值

,因为他是未知的。因此,我们不能给算法划分轮次,在每一轮一开始发消息,在每一轮结束时收到消息。

Paxos问题描述

Paxos需要解决的问题是状态机复制问题(state machine replication):

在一个系统中有一群客户端和一群服务端,要求服务端提供一种服务,让所有客户端发出请求(输入)后认为服务端运行的是同一个状态机(同一个服务器)

d4dd996fcbff2823afb1c693116fb6bb.png
状态机复制问题的抽象:每个小方格代表一个值(一种状态机),当收到来自client的请求的时候,Server将会形成一个值的序列作为输入,这个序列必须在每个服务端都相同。

在Paxos的算法描述中,我们简化问题为:只确定一个最终值。这个算法可以轻松的扩展为多个值的序列(引入时间戳变量,并行运行多个paxos算法),从而解决状态机复制问题

网络环境:部分同步网络

节点错误类型:故障错误

错误节点数量:n=2f+1

身份认证:不需要

算法描述

3a2d13218b5906c1ae5b35cbeb2cb4b8.png
paxos算法描述,所有的节点被分类为提议者和接受者,该算法分为准备阶段和提交阶段,通常的实现过程中,准备阶段一般用于选举出一个leader, 之后所有的值均由该leader提议;如果leader出现问题,那么会产生新的提议者提议。

安全性证明

下面我们将证明这个算法的安全性:

如果某个节点在第k个视图(view)提交了 v, 那么只要一个提议的视图值晚于该视图 (k的值比较大),那么这个提议一定带有值 v

证明:如果某个节点在第k个视图(view)提交了 v, 那么至少有 f+1 个节点锁定了 v 和 k。

在新的视图中,新的leader 一定会拿到 f+1 个状态信息 status,那么至少有一个节点会带有信息 v 和 k (n=2f+1)。 显然这个k的值是最大的,这个 v 一定会存在与新 leader 的提议中

总结

该算法利用了两个多数群体一定存在重叠的原理,在存在故障错误的情况下也可以保证之后新的提议也会带有原来多数人采纳的提议,使接纳这个提议的人数越来越多,最终一定能够达到共识 (因为success消息最终一定会传播给所有节点)。这个算法看上去简单,实际上却是十分巧妙的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值