多数仲裁

通过要求多数服务器同意才能做出任何决策,避免两组服务器独立做出决策。

问题

在分布式系统中,每当服务器采取任何操作时,它都需要确保在发生崩溃的情况下,操作的结果对客户端可用。这可以通过将结果复制到集群中的其他服务器来实现。但这会导致一个问题:在原始服务器可以确信更新已完全识别之前,需要多少其他服务器确认复制?如果原始服务器等待太多复制,那么它将响应缓慢,从而降低了活跃性。但如果它没有足够的复制,那么更新可能会丢失,这是安全性的失败。在整体系统性能和系统完整性之间取得平衡至关重要。

解决方案

当集群中大多数节点确认更新时,集群就会同意它已收到更新。我们将这个数字称为仲裁。因此,如果我们有一个包含五个节点的集群,我们需要三个节点的仲裁。对于一个包含n个节点的集群,仲裁为n / 2 + 1。

仲裁的必要性表明可以容忍多少故障,即集群大小减去仲裁。一个包含五个节点的集群可以容忍其中两个节点发生故障。一般来说,如果我们想容忍f个故障,我们需要一个大小为2f + 1的集群。

有关更多详细信息,请访问第 08 章,该章位于 oreilly.com 上的在线电子书中。

此模式是分布式系统模式的一部分。

2023 年 11 月 23 日