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。