paxos算法是为了解决分布式系统的一致性问题而生的。
分布式系统的一致性问题表现为在一个分布式系统中,所有的节点如何对某一个问题达成一致。
节点与节点之间以消息通信,所有的节点都具有同等地位。
节点通过发送消息通知其他节点将产量值修改。
一致的另外一个要求为,当大多数节点确定了值,则不能再确定新的值,这个是为了安全性考虑。
现在我们简化一下模型
假设有三个节点,分别为P1, P2, P3,这三个节点试图就自身的v值达成一致。
P1节点尝试修改v值为a
P2节点尝试修改v值为b
P3节点接收P1和P2节点发来的消息修改自己的v值
那么有以下两种情况
1.1 P3先接收到P1的消息
1.2 P3先接收到P2的消息
先做第一步简化,P3接收到消息,马上更新自己的v值,其后再接收到任何消息都不予理会。那么此时1.1和1.2都能达到一致性。
但是这里有一个问题,如果P1, P2, P3分别另v值为a,b,c,那么则无法达成一致性,因为每个节点设置值之后不允许再修改。
因此,节点应该可以的多次设置值,这样才能保证算法的活性。
现在继续讨论
1.1 当P3接收到P1时,此时按规则将v值修改为a,注意,由于只有三个节点,这个时候已经达成了一致,因为大多数节点将v值确定为了a。此时又收到P2的请求,那么此时正确的做法应该是拒绝P2的请求。
网友评论