Paxos太难懂?五张图读懂Paxos协议

    鉴于大多数对Paxos协议的阐述都过于羞涩难懂,便画了下面五张图来阐述一下Paxos的主要流程,在学习下面的图例文章时,必须要对Paxos的基础概念有一些认知;包括但不限于以下概念。

1 、先入为主

一个参与者必须批准它收到的第一个提案

2、多数派

一个提案者一定要获得多数参与者的通过才会结束提案

3、参与者可重复接受提案

一个参与者只要尚未相应过任何编号大于Mn的提案者请求,那么它就可以接受这个编号为Mn的提案

还有一个最关键的点,会被很多初学者忽略,那就是一个提案并不是类似一组自增的数字,而是类似map的key,value组合,即提案 = 【版本号Mn: 提案内容value n】

下面我们就根据下面的五张图来阐述一个完整的Paxos提案过程(理想状态下)

  • 图一:初次prepare— 提案者向参与者下发提案,并获取提案反馈

我们假设现在有两个提案者(Proposer)和三个参与者(Acceptor),提案者1初始提案【1,10】(这里10的值,大家可以理解为货币,比如10元人民币,参与者需要拿着value里的钱来收买参与者),提案者2因为在提案者1后提案,生成了提案为【2,20】的提案,prepare预提交阶段,假如由于网络原因,提案者1的提案先抵达到了参与者1和2,而提案者2先抵达到了参与者3并在提案1到达参与者2后到达参与者2,参照图1,此时二者都已经得到了超过一半的反馈,反馈的内容为参与者所持有的最大提案版本的value值,初始的话为随机value这里等同先入为主的value;

特别注意的点在于两个多数派的交集,这里为参与者2,它先收到了提案者1的提案,以后将拒绝提案小于1的提案(reject<1)并反馈value1,之后收到提案者2的提案的时候将拒绝小于2的提案(reject<2)并反馈value2;

  • 图二、三: 初次提交—提案者请求参与者通过提案

对于提案者1 :提案者1在得到反馈后,得到了多数派的支持,于是就下发提案给参与者1和2请求通过提案1,参与者1没有问题,爽快的通过了提案并将自己的提案值记作value1即10,但是在申请向参与者2通过提案时,由于参与者2受到了提案者2之前的叛变,reject<2的提案,于是就拒绝了提案者1的提案,提案者一由于没有得到多数派的支持,则会丢弃提案1,生成新的提案3【3,20】(见下图);

对于提案者2: 参与者3没有问题就通过了提案2,参与者2也没有问题(请注意按照图中的时间轴先后发生),也接受了2的提案,注意此刻提案者1的提案发生了变更,但并未与参与者2进行通讯,那么此时参与者2和参与者3已经作为多数派达成了共识即同意了提案者2的提案并将自己的value值都更新为20,那么此时提案者2的任务就完成了,因为它已经得到了多数派的认同,不再参与以后的提案工作

 

  • 图四:prepare2 — 提案者1再次请求下发提案

此时已经产生了一个多数派提案2,按理说,整个提案过程应该结束,但是大家注意到,此时参与者1的提案还是提案1的旧值10,下面的工作就是告知参与者1提案已经达成了共识,需要修改成提案2的值;

提案者1拿着提案3【3,20】对参与者1和2进行prepare请求,参与者1将接受并修改reject<3,并返回旧值10,参与者2也是如此,但返回旧值为20,(20 > 10),提案者1成功得到了多数派的支持;

 

  • 图五:二次提交—提案者1再次向参与者1和2下发提案请求

参与者1拿到【3,20】的请求,由于版本号1 <3 ,所以通过了该提案,将value值改为了20,参与者2本身就是20,提案者1得到了多数派的支持,至此所有参与者的value值达成了共识

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值