paxos协议

paxos协议

分布式一致性协议,paxos保证安全性和最终一致性

  • 坏事不会发生:两个节点不会做出不同的决定
  • 好事终会发生:最终达到一致性

找到的最好的一幅图: image

每一次提议可以分为3个阶段:

  • 阶段1: 选取一一个leader (Election Phase).
  • 阶段2: Leader多播一一个提案数值,其他节点收到消息后确认。 (Bill Phase).
  • 阶段3: Leader多播最终决定。 (Law Phase).

协议过程:

  1. proposer发起提案,提案编号为K,广播给所有节点
  2. acceptor节点收到信息后,如果已经存在大于K的接受过的编号N,则忽略,否则,返回已经接受过的提案编号k和值v。
  3. proposer如果收到超过半数的节点的accept,那么返回accept中k最大的v,如果accept中都为null,则返回特定v和提案编号K。如果没有收到超过半数节点的accept,那么重新发起提案。
  4. accept收到值后,如果已经存在大于K的接受过的编号N,则忽略,否则,回复ack,并设置接受值为K,v
  5. 如果收到超过半数的ack,那么广播通知提议成功。

归纳法证明:

Paxos原命题

如果一个提议{n0,v0}被大多数Acceptor接受,那么不存在提议{n1,v1}被大多数Acceptor接受,其中n0 < n1,v0 != v1。

Paxos原命题加强

如果一个提议{n0,v0}被大多数Acceptor接受,那么不存在Acceptor接受提议{n1,v1},其中n0 < n1,v0 != v1。

Paxos原命题进一步加强

如果一个提议{n0,v0}被大多数Acceptor接受,那么不存在Proposer发出提议{n1,v1},其中n0 < n1,v0 != v1。

如果“Paxos原命题进一步加强”成立,那么“Paxos原命题”显然成立。下面我们通过证明“Paxos原命题进一步加强”,从而证明“Paxos原命题”。论文中是使用数学归纳法进行证明的,这里用比较紧凑的语言重新表述证明过程。

归纳法证明

假设,提议{m,v}(简称提议m)被多数派接受,那么提议m到n(如果存在)对应的值都为v,其中n不小于m。

这里对n进行归纳假设,当n = m时,结论显然成立。

设n = k时结论成立,即如果提议{m,v}被多数派接受,

那么提议m到k对应的值都为v,其中k不小于m。

当n = k+1时,若提议k+1不存在,那么结论成立。

若提议k+1存在,对应的值为v1,

因为提议m已经被多数派接受,又k+1的Prepare被多数派承诺并返回结果。

基于两个多数派必有交集,易知提议k+1的第一阶段B有带提议回来。

那么v1是从返回的提议中选出来的,不妨设这个值是选自提议{t,v1}。

根据第二阶段B,因为t是返回的提议中编号最大,所以t >= m。

又由第一阶段A,知道t < k + 1,t <= k,而根据假设,{k,v}已经是被接受的了,这个v是从k最大的值中接受的,也就是从{t,v1}接受的。所以根据假设t对应的值为v。

即有v1 = v。所以由n = k结论成立,可以推出n = k+1成立。

于是对于任意的提议编号不小于m的提议n,对应的值都为v。

所以命题成立。那么v1是从返回的提议中选出来的,不妨设这个值是选自提议{t,v1}。

根据第二阶段B,因为t是返回的提议中编号最大,所以t >= m。

又由第一阶段A,知道t < k + 1,t <= k,而根据假设,{k,v}已经是被接受的了,这个v是从k最大的值中接受的,也就是从{t,v1}接受的。所以根据假设t对应的值为v。

即有v1 = v。所以由n = k结论成立,可以推出n = k+1成立。

于是对于任意的提议编号不小于m的提议n,对应的值都为v。

所以命题成立。

一致性达成

什么时间点可以认为已经达成一致性,系统不可能再更改决定值了呢?

当超过一半的节点收到阶段2中的消息时,可认为已经达成一致决定值。此刻,节点自自己己可能并不不知道,但是最终决定值实际上已经确定了了:即使leader也可能在此刻还不不知道。 如果leader在此时发生生故障了了怎么办? 进入入下一轮,重复,一直到在某一轮中三阶段都顺利利结束。

节点故障:

  • 过半数的集合不不包含该节点。
  • 节点重启时,通过读取本地日日志了了解之前的信息,获取之前可能已经做出的决定值和轮 数id。

Leader故障时

  • 启动新一轮

消息丢失

  • 如果过于古怪,启动新一轮
  • 任何节点在任何时间都可以启动新的一轮Paxos。
  • Paxos协议可能永远运行下去不停止 —— 你的运气气很差
  • 不不保证活动,只能是最终活性:运气气好的话可以最终达成一致。

转载于:https://my.oschina.net/u/2248183/blog/1540792

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值