Basic Paxos
相关概念
Proposer
提议的发起者
Acceptor
提议的审批者
Leaner
提议的学习者
Quorum
Acceptor的多数派
Phase
Basic Paxos分为两阶段, Phase-1和Phase-2
Round
选举的轮次
rnd
轮次编号, 在不同资料中也被叫做提议的编号
Value
提议的内容(值)
vRnd(value round number)
vRnd是Acceptor的属性, 是Acceptor上次接受的提议的rnd
数据/对象属性
Propose
提议
1 | class Propose { |
Proposer
提议的发起者
1 | class Proposer { |
只携带一个propose.
Phase1ReqData
Phase-1中, Proposer向Acceptor发送的数据:
1 | class Phase1ReqData{ |
Phase-1中, Proposer仅向Acceptor提交提案rnd
Acceptor
1 | class Acceptor { |
Phase1ResData
Phase-1中, Acceptor向Proposer返回的数据:
1 | class Phase1ResData { |
Phase2ReqData
Phase-2中, Proposer向Acceptor发送的数据:
1 | class Phase2ReqData { |
注意, 这里的value并不一定是先前Proposer携带的Propose的value, 有可能会在Phase-1接受到返回数据之后发生改变.
Phase2ResData
Phase2中, Acceptor向Proposer返回的数据
1 | class Phase2ResData { |
Basic Paxos的过程
开始前的状态
初始数据用来模拟顺利提出, 接受一个Propose
1 | proposer = { |
Phase-1 proposer请求的阶段
1 |
|
之后, 将acceptor
自身的rnd
设为phase1ReqData
的rnd
, 然后将生成的生成一个phase1ResData返回. 即, 返回的phase1ResData
中携带的lastRnd
是acceptor
先前的lastRnd
, 然后acceptor
的lastRnd
设为收到的phase1ReqData
的rnd
.
Phase-1 proposer
两个问题
- 这个蓝色圈内如果timeout了怎么处理我是知道的, 红色圈内如果timeout了怎么办?
- acceptor返回数据的时候, 如果有一个acceptor实际返回的是reject, 但是timeout了怎么办?如果其他acceptor结果都是accept是不是有点不对劲…本来有一个reject就该失败的