paxos算法的通俗解释
一、算法概述
1.1 算法目标:
让分布式系统的每个参与者达成一致,从而实现具有容错能力的分布式系统。
1.2 通俗概述
Lamport为了讲述这个算法,假想了一个叫做Paxos的希腊城邦进行选举的情景,这个选举是异步且非拜占庭模型的(消息传送速度不可预测,允许消息的丢失或者重复,但是不会出现内容损坏)。整个算法的大致过程为:
第一阶段:要先明确哪个“提议者”是意见领袖有权提出提议,“接受者”们就主要处理这个“提议者”的提议了(这样,也可以在提出提议时就尽量让意见统一,谋求尽早形成多数派)。
第二阶段:由上阶段选出的意见领袖提出提议,“接受者”反馈意见。如果多数“接受者”接受了一个提议,那么提议就通过了。
二、忽略严密性的通俗解释
2.1 明确意见领袖
每个“提议者”在第一阶段先报个号,谁的号大,谁就是意见领袖。可以想象为贿选:每个提议者先拿着钞票贿赂一圈“接受者”,谁给的钱多,第二阶段“接受者”就听谁的。即:“意见领袖”是在第一轮贿赂成功的“提议者” 。
2.2 尽早形成多数派
“提议者”不会执着于让自己的提议通过,而是执着于让提议尽快达成一致。为了实现这个目标,“提议者”在贿选的时候,若发现“接受者”已经接受过前面意见领袖的提议了,即便贿选成功,也会默默的把自己的提议改为前面意见领袖的提议。
2.3 提议者改变提案的依据
“接受者”在被“提议者”贿赂的时候,会记下贿赂的金额。所以当你贿赂“接受者”时,一旦你给的贿赂多而胜出,“接受者”会告诉你两件事情:a、前任意见领袖的提议内容(如果有的话);b、前任意见领袖当时贿赂了多少钱。
如果你是“提议者”,在贿赂的时候,“接受者1”跟你说“他见过的意见领袖的提议是方案1”,而“接受者2”跟你说“他见过的意见领袖提议是方案2”,只需要判断一下“接受者1”和“接受者2”告诉你的信息中,哪个意见领袖当时给的钱多,就把自己的提议改成那个意见领袖的提议。
2.4 先来后到很重要
在第一阶段中,一旦“接受者”已经接受了之前意见领袖的提议,那后面再来找这个“接受者”的“提议者”,即便在贿赂中胜出,也要将自己的提议改为前任意见领袖的提议,然后他会在第二阶段提出该提议。如果“接受者”之前没有接受过任何提议,那贿选胜出的“提议者”就可以提出自己的提议了。