知识卡片
Multi-Paxos选主的本质:关心谁赢得了多数派应答,而非达成决议内容
内容
一个初学Paxos时容易产生的误解是,把”选主”简单理解成”跑一轮Paxos,形成一条’谁是Leader’的决议”——这个理解是错的,因为Paxos协议的基本保证是决议一旦形成就不能更改,如果选主本身是在对决议内容达成一致,那就意味着一旦选出了某个Leader,之后永远无法再选出新的Leader,这显然不符合系统需要不断进行主备切换的现实需求。Multi-Paxos对选主的真正思路是一次视角上的变通:选主时依然执行标准的Paxos协议,但真正关心的并不是这一轮Paxos最终”决议”出的具体内容是什么,而是”谁成功地拿到了多数派的AcceptResponse”这件事本身——拿到多数派AcceptResponse的这台Server,就是本轮选主产生的Leader,多轮选主(比如旧Leader失效后重新选主)本质上就是针对同一个Paxos Instance反复发起竞争,每一轮最终能赢得多数派Accept的Server”当选”为新一轮的Leader。这里还有一个微妙但重要的区分:执行Paxos胜出的”当选Leader”其实还不算真正意义上完全掌权的Leader(书中用美国”当选总统”和”正式总统”的类比来说明这一点),因为Multi-Paxos里完全可能出现多个Server先后各自赢得过一轮选主,”当选”只是赢得了这一轮竞争,还需要后续动作(立即写出一条日志确认自己的Leader身份)才能真正确立和巩固这个身份。这个案例给出了一条理解协议设计的通用方法:不要机械地套用一个协议原本的用途(Paxos本来是为了对提案值达成一致),而要理解协议真正提供的能力(在多数派竞争下产生唯一胜出者),再看这个能力能不能被复用到看似不同的问题(选主)上,往往能找到比直接套用更巧妙的解法。
参考来源
- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.10 架构师需要了解的Paxos原理、历程及实战"节,"2.10.4 Multi Paxos的实际应用"(源文件:_epub-src/OEBPS/Text/Chapter2_10_5.xhtml)
- 结论依据:原文说明"因为Paxos协议的基本保证是一旦形成决议,就不能更改,那就没办法再次选新主了……我们并不关心决议内容,而是关心'谁成功得到了多数派的AcceptResponse',这个Server就是选主产生的Leader",以及"'当选Leader'还不能算是真正的Leader,只能算是'当选Leader',就像美国总统一样",共同支撑本卡片结论。
- 原始内容:我曾经认为选主就是跑一轮Paxos来形成"谁是Leader"的决议,其实并没有这么简单……我们并不关心决议内容,而是关心"谁成功得到了多数派的AcceptResponse",这个Server就是选主产生的Leader……执行Paxos胜出的"当选Leader"还不能算是真正的Leader,只能算是"当选Leader"。