Innodb Cluster 入门(4) Paxos算法

Paxos算法

The Part-Time Parliament
1. Paxos议会是个兼职议会。投票时*可能缺席。
2. 每个*有一个属于自己的法律记录,记录Paxos所有已经通过的法律。
3. 法律记录的格式为:
ID: 法律内容
4. 法律记录不可删除,不可改变。

法律一致性问题
Paxos算法所解决的核心问题:
每个*的法律记录是一致的。

基本规则
1. 当*中的多数在议会参加投票时,将会产生一个有效的投票结果。
2. 当所有参与投票的*一致同意时,法令将予以通过。

基本假设
发送给*的一切消息都是真实的。不存在拜占庭将军问题。

数学结论:概念
1. 一轮表决是对一个单条法令的投票。设:B = 一轮表决。
2. 表决的要素:
Innodb Cluster 入门(4) Paxos算法
3. 表决成功:
Innodb Cluster 入门(4) Paxos算法

数学结论:表决一致性的条件
一条法令的通过由多轮表决构成。每1轮表决的法令内容可以不同。 设多轮表决的集合为:β
B1(β): β中的每1轮表决,都有一个唯一的编号
B2(β): β中任意2轮表决的参与牧师集合中,至少有一个公共成员
B3(β): 对于β中每1轮表决B,如果参与投票的任何一个牧师在β中1个更小轮的表决中投过同意票,那么B的法令内容与所有这些更小轮表决中的最大的那次表决的法令内容相同。

Innodb Cluster 入门(4) Paxos算法

数学结论:符号定义
V: 表示1个投票
Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

数学结论:函数定义
Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

数学结论:条件的正式描述
Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

数学结论:引理
如果B1(β)-B3(β)成立,并且β中的表决B是成功的,那么β中更大编号的表决和B有相同的法令内容。
Innodb Cluster 入门(4) Paxos算法

数学结论:引理证明
Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

Innodb Cluster 入门(4) Paxos算法

数学结论:定理
定理1:如果B1-B3成立,那么任意2轮成功的表决,都是对相同法令内容的表决。
定理2:只要法定多数得到满足,那么成功的表决是可能的。

初级协议
1.牧师p选择1个新的表决编号b,发送1条NextBallet(b)给某些牧师。
2.牧师q响应消息NextBallet(b),发送LastVote(b,v)给p,v是p的编号小于b的表决中编号最大的表决的投票。可以为空。
3.在收到某个过半集合Q中所有牧师的LastVote(b,v)消息之后,牧师p发起1个编号为b,定额集合为Q,法令内容为d的新表决。d满足条件B3(β)。记录这一事件后,给Q中的每一个牧师发送BeginBallot(b,d)消息。
4.在收到BeginBallot(b,d)消息后,牧师q对是否投赞成票做出决定。如果q决定投赞成票,牧师q发送Voted(b,q)消息给牧师p,并记录这一事件。
5.如果牧师p收到了Q中的每1个牧师发来的Voted(b,q)消息,那么可以确认表决成功。牧师p记录这一事件,并发送Success(d)消息给每个牧师。
6.一个牧师在收到Success(d)消息后,将新通过的法令记录。