vlambda博客
学习文章列表

paxos算法白话版解释

paxos的原理,网上的资料很多,大家自行搜索,不过最重要的是这篇论文:

Paxos Made Simple(https://lamport.azurewebsites.net/pubs/paxos-simple.pdf)

这里我只谈下我个人的白话版理解,有不对的地方欢迎大家指正。

假设提案节点为p1,p2,P1的提案id为1,p2的提案id为2

决策节点为a1,a2,a3,a4,a5

p1想赋值v=1,p2想赋值v=2

p1和p2谁也不服谁,那就让决策节点做决定吧,只有至少争取到3个决策节点的支持,才能获胜。

第一回合

p1和p2一起给a1发起了提案。

p1的提案先到了a1这里:

p1: a1你好啊,我要改变v的值,你看行不行?

a1: 没问题,你是第一个来改变v的值的人,你自己设个值就行。

p1: 好的,那就把v的值设成1吧。

这时p2的提案才到:

p2: a1你好啊,我要改变v的值,你看行不行?

a1: 不行啊,我已经接受了p1的提案,把v的值设成1了,你不能改了。

第一回合p1获得了a1的支持,把v设成了1

第二回合

p1和p2一起给a2发起了提案。

p1的提案先到了a2这里:

p1: a2你好啊,我要改变v的值,你看行不行?

a2: 没问题,你是第一个来改变v的值的人,你自己设个值就行。

这时p2的提案赶到:

p2: a2你好啊,我要改变v的值,你看行不行?

a2: 刚才p1已经来过了,不过你的提案id比p1的大,你优先级比他高,我就先设你的值吧。

这时p1的回复到达:

p1: 我来啦,我要把v的值设成1。

a2: 不好意思,刚才p2来了,他的提案id比你的高,我答应设他提供的值了。

最后,p2的回复到达:p2: 我要把v的值设成2。

第二回合p2获得了a2的支持,把v设成了2

第三回合

p1和p2一起给a3发起了提案。

这次终于轮到p2的提案,先到了a3这里:

p2: a3你好啊,我要改变v的值,你看行不行?

a3: 没问题,你是第一个来改变v的值的人,你自己设个值就行。

这时p1的提案赶到:

p2: a2你好啊,我要改变v的值,你看行不行?

a2: 刚才p2已经来过了,你的提案id比p2的小,我不能答应你。

这时p2的回复到达:p2: 我来啦,我要把v的值设成2。

第三回合p2获得了a3的支持,把v设成了2

达成共识

第四回合a4把v设成了1,第五回合a5把v设成了2。

a1,a4支持把v设成1

a2,a3,a5支持把v设成2

根据少数服从多数原则,最后决定v的值为2,广播给所有节点知道,大家都统一把v的值设成了2。