一致性算法 - Paxos

转自:https://cs.xieyonghui.com/architecture/35.html

Paxos是唯一的一致性算法,其他都是paxos不完整版,Google Chubby作者Mike Burrows曾这样评价Paxos。

解决的问题

Paxos算法解决的问题:分布式系统如何就某个值(决议)达成一致。

历史

1990年Leslie Lamport提交Paxos算法论文The Part-Time Parliament,未受太多关注。

2001年发布通俗简化版Paxos Made Simple,剔除公式部分。

场景

爱琴海paxos岛住着一群居民,通过议会形式取代神权政治,事情由议会选举决定。

议员总数确定,岛上每个提议都有一个编号,编号不断增长且不能回退。

提议超半数议员同意就会生效。

每个议员有一个记事本,记录曾经同意过或通过的提议编号,编号随提议不断更新。

每个议员只会同意大于当前编号的提议。

若收到小于或等于当前编号的提议会拒绝提议并通知提出方。

岛上议员以义工方式出现,所以,不保证每个提议的投票在同一时间完成。因此,一定时间内议员们手中的编号并不统一。

议会目标:

议员们对提议达成一致看法。

投票

议会开始时,议员们手中记事本编号统一为0。

当议员发出提议时,先查看自己的记事本,在当前记录基础上加1,作为新提议编号,然后,通知其他议员。

其他议员们收到通知,得知有一个编号为1的提议需要通过。

议员们查看记事本,得知记事本中的编号为0,认为提议可接受。

记下该提议编号并回复接受1号提议。

发起提议的议员收到超半数以上回复时,会发出新通知宣布1号提议通过并生效。

收到通知的议员修改自己记事本的记录,将1号提议记下。

当有人发出请求问1号提议时,会立刻得到答复。

冲突解决

假如,议会有5个议员,a和b各自发出一个提议,都将提议编号定为2(基于自己的记事本)。

如果,其他3个议员先收到a的提议,比对手中记录后一致同意。

b的提议到达时议员查看记事本,发现提议编号未大于手中记录,否决提议。

a的提议通过后,通知了所有人。

b得知新提议编号,更新手中记录,在更新后的基础发出新提议。

通知机制

议会中有一个议员被定为“总统”,“总统”通过算法选举出来,提议由“总统”统一发给所有议员。

算法应用

MySQL高可用方案中,paxos为分布式数据的强一致性提供支持。

Zookeeper使用paxos实现一致性。

Paxos岛:Zookeeper Server Cluster

总统:ZK Server Leader

议员:Zookeeper Server

提议:ZNode Change(Create/Delete/SetData等)

提议编号:Zxid(ZooKeeper Transaction Id)

通过的提议:所有ZNode及其数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值