2022-05-01

1. 正常场景

图14-3:Paxos算法:正常执行

在提议阶段中,提议者发送一条Prepare(n)消息(其中n是提议编号).

如果接受者之前已经接受了(收到过Accept!(m,vaccepted)消息)任何其他提案,它将回复一条Promise(m,vaccepted)消息,通知提议者它先前已经接受了编号为m的提案。(m不等于n) awakening-fong: 用来处理 有人当选了,然后,发出复制的指令后,领导者挂掉了。 这里,借这个机会通知新的可能的领导者,过去本该写入的值。

关于Accept!(n,v) 其中的v, 1. 有接受方回复Promise(m,vaccepted), 则,v是收到的回复中, 编号最高的提案对应的值。 2. 如果所有回复均不包含旧的、已接受的提案,那么v可以是提议者自己提出的任何值。

2. 故障

2.1 提议者故障,决定旧值

图14-4:Paxos故障场景:提议者故障,决定旧值 提议者P1已完成提案编号为1的选举阶段,但是在它发送值V1给接受者A1之后宕机。

图示中倒数第3个promise(1,V1), 1表示提议编号为1, promise(1,V1)消息来自A1.

Accept!(2,V1) 这样效果上,P2继续P1的工作。

2.2 提议者故障,决定新值

P1在将V1发送给A1之后宕机。 下一个提议者P2发起一个提案编号为2的新回合,收集Quorum个接受者的回复,但是这次A2和A3首先做出了响应。

3. 参考资料

本文内容大篇幅来自 [数据库系统内幕]

本文地址: https://awakening-fong.github.io/posts/distributed_system/paxos

转载请注明出处: https://awakening-fong.github.io


若无法评论, 请打开JavaScript, 并通过proxy.


blog comments powered by Disqus