是什么决定了 Paxos 中的角色?

what decides the roles in Paxos?

当人们描述Paxos时,他们总是假设集群中已经有一些提议者。但是提议者来自哪里,或者什么决定了哪些进程是提议者?

集群最初如何配置以及如何更改取决于试图优化系统的管理员。

您可以运行不同主机上的不同角色,并且有不同数量的角色。我们可以 运行 三个提议者、五个接受者和七个学习者,无论您选择什么。需要写入值的客户端只需要连接到提议者。使用 multi-Paxos for state replication 客户端只需要连接到提议者就足够了,客户端不需要与任何其他角色类型交换消息。然而,没有什么可以阻止客户通过查看来自接受者的消息来成为学习者。

只要您遵循 Paxos 算法,一切都归结为最小化网络跳数(延迟和带宽)、硬件成本以及特定工作负载的软件复杂性。

从实际的角度来看,您的客户需要能够在失败的情况下找到提议者。集群管理员将配置要提议的节点并确保它们被客户端发现。

很难从抽象算法的描述中想象出事情是如何工作的,因为有很多消息拓扑是可能的。当将该算法应用于实际应用时,更明显的是什么设置可以最大限度地减少延迟、带宽、硬件和复杂性。一个例子可能是三节点 MySQL cluster running Paxos. You want all three servers to have all the data so they are all learners. All must be acceptors as you need three at a minimum to have one node fail and still maintain progress. They may as well all be proposers to give the best availability and simplicity of software and configuration. Note that one will become the distinguished leader。数据库管理员没有考虑Paxos角色,因为他们只是建立了一个三节点数据库集群。

集群中的角色可能需要更改。例如,您可能想要扩展数据库集群的容量。或者一台服务器可能会挂掉,因此您需要更改集群成员身份以将死掉的服务器换成新的。为了让 Paxos 算法发挥作用,每个进程都必须对哪些进程担任哪些角色具有高度一致的看法。你如何获得共识?您使用 Paxos 来修复集群成员的新值。