1

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

4

1 回答 1

0

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

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

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

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

很难从抽象算法的描述中想象出尽可能多的消息拓扑可能如何工作。当将该算法应用于实际应用时,更明显的是什么设置可以最大限度地减少延迟、带宽、硬件和复杂性。一个示例可能是运行 Paxos 的三节点 MySQL 集群。您希望所有三个服务器都拥有所有数据,因此它们都是学习者。所有人都必须是接受者,因为您至少需要三个才能让一个节点发生故障并仍然保持进度。他们也可能都是提议者,以提供软件和配置的最佳可用性和简单性。请注意,一位将成为杰出的领导者。数据库管理员不会考虑 Paxos 角色,因为他们只是设置了一个三节点数据库集群。

集群中的角色可能需要更改。例如,您可能想要扩展数据库集群的容量。或者服务器可能会死掉,因此您需要更改集群成员以将死去的服务器换成新的。为了让 Paxos 算法正常工作,每个进程都必须对哪些进程处于哪些角色有一个高度一致的视图。你如何达成共识?您使用 Paxos 来修复集群成员的新值。

于 2019-03-15T23:40:44.503 回答