0

我和我的团队发明了一种方法来解决工程中的双节点系统的裂脑问题,并发表了一篇论文。我们不是一个知名的团队,但是我们觉得这个方法很新很实用,所以想和大家讨论一下,看看大家是否认为这是一个重大的创新。

我们试图解决的问题

让我先描述一下我们要解决的问题。在双节点分布式系统中,如果节点之间的链路发生故障,并且没有第三个节点,那么由这两个节点组成的系统就无法同时进行可用性(活跃性)和一致性(安全性)的领导者选举。这使得设计一个两节点的分布式存储或数据库系统变得不可能。

为了解决这个问题,工程师想了很多办法。有些在两个节点之间使用更可靠的硬件来避免链路故障,有些则使用第三个节点或共享介质进行仲裁。但这对硬件提出了额外的要求。

我们提出的解决方案

在本文中,我们提出了一种新方法,该方法既不依赖于额外的第三节点或共享介质,也不依赖于可靠的链接。这种方法称为“基于级别的领导者选举算法”。但是这个名字在论文中没有使用。

假设这是一个部分同步(或最终同步,或半同步)的分布式存储和数据库系统,由S个服务器节点组成。有 C 个客户端节点访问它们。

  • 当 S>=3 时,S 个服务器节点可以使用 Paxos、Raft 等任何一种统一的共识算法来选举领导者。在这种情况下,可以保证可用性(活跃性,leader 最终会被选举出来)和一致性(安全性,任何时候都没有不同的leader)。
  • 当 S<=2 且 C>=1 时,客户端节点也将参与领导者选举过程。只要客户端节点数C>=1,总节点数不少于3个,在部分同步系统中可以采用统一共识算法选举Leader。但是,只有服务器节点有投票权和被选举权,而客户端节点只有投票权,没有被选举权。
  • 当 S<=2 且 C=0 时,虽然参与 Leader 选举过程的节点总数少于 3 个,因此没有一种算法可以保证可用性和一致性,但也完全没有来自客户端节点的请求!我们可以选择两个服务器节点中的任何一个作为领导者,因为不需要可用性或一致性!

要求

希望您能帮助我们看看这种方法是否可以算是一项重大创新。此外,我们计划将基于级别的领导者选举原语添加到当前的存储和数据库请求/响应协议中。如果有人有兴趣,请告诉我。

4

1 回答 1

0

我宁愿对这个问题发表评论,但我没有声誉,所以我只能回答。

我认为这可能是一项很酷的创新,并且可能在某些应用程序中有用,尤其是那些服务器少于五台且客户端寿命长且不经常更改的应用程序。但是,我认为考虑状态机重新配置算法文献可能是有用的。特别是,如果您有一个由三个节点组成的系统,则可以使用两个可用节点安全地重新配置为两个节点。但是,如果您有一个包含五个以上节点的系统,并且其中除了两个之外的所有节点同时变得不可用,则不可能安全地重新配置为仅两个节点,因为您可能错过了其他大多数节点所同意的内容。

当太多的客户端也失败时,也会发生类似的情况。首先,想象一下除了两台服务器之外的所有服务器都发生故障,并且三个或更多客户端用于就某事达成一致。然后所有客户端都失败/断开连接,所有服务器都重新联机。这里无法就仅使用两台服务器的新事物达成一致,也无法重新配置共识组以包含已重新启动的服务器或删除失败的客户端。在这种情况下,将达到死锁(至少在这些客户回来之前)。

最好的祝愿,迈克尔 :)

于 2021-02-22T21:01:11.547 回答