分布式一致性算法Paxos!
分布式一致性算法Paxos!
月伴飞鱼在常见的 分布式系统 中,总会发生 节点宕机 或 网络异常 (包括消息的 重复、丢失、延迟、乱序、网络分区) 等情况。
Paxos
算法主要就是解决如何在一个 发生如上故障 的分布式系统中,快速正确的在集群内 对某个值达成一致,并且保证 整个系统的一致性。
- 这里某个数据的值并不只是狭义上的某个数,它可以是一条日志,也可以是一条命令。
- 根据应用场景不同,某个数据的值有不同的含义。
角色:
Proposer :
Proposer
可以 提出提案 (Proposal
)。Accecptor :
Acceptor
可以 接受提案,一旦接受提案,提案 里面的value
值就被选定了。Learner :
Acceptor
告诉Learner
哪个提案被选定了,那么Learner
就学习这个被选择的value
。
算法流程:
学习阶段:Prepare请求
Proposer
选择一个新的提案 向Acceptor
集合 (数目在半数以上)发送请求,要求 每一个Acceptor
做出如下响应:
如果
Acceptor
没有接受过提案,则向Proposer
保证 不再接受编号小于N的提案。如果
Acceptor
接受过请求,则向Proposer
返回 已经接受过的编号小于N的编号最大的提案。接受阶段:Acceptor请求
如果
Proposer
收到 半数以上 的Acceptor
响应,则 生成编号为N
,value
为V
的提案,V
为所有响应中 编号最大 的提案的value
。如果
Proposer
收到的响应中 没有提案,那么value
由Proposer
自己生成,生成后将此提案发送,并期望Acceptor
能接受此提案。