我和我的团队发明了一种方法来解决工程中的双节点系统的裂脑问题,并发表了一篇论文。我们不是一个知名的团队,但是我们觉得这个方法很新很实用,所以想和大家讨论一下,看看大家是否认为这是一个重大的创新。
我们试图解决的问题
让我先描述一下我们要解决的问题。在双节点分布式系统中,如果节点之间的链路发生故障,并且没有第三个节点,那么由这两个节点组成的系统就无法同时进行可用性(活跃性)和一致性(安全性)的领导者选举。这使得设计一个两节点的分布式存储或数据库系统变得不可能。
为了解决这个问题,工程师想了很多办法。有些在两个节点之间使用更可靠的硬件来避免链路故障,有些则使用第三个节点或共享介质进行仲裁。但这对硬件提出了额外的要求。
我们提出的解决方案
在本文中,我们提出了一种新方法,该方法既不依赖于额外的第三节点或共享介质,也不依赖于可靠的链接。这种方法称为“基于级别的领导者选举算法”。但是这个名字在论文中没有使用。
假设这是一个部分同步(或最终同步,或半同步)的分布式存储和数据库系统,由S个服务器节点组成。有 C 个客户端节点访问它们。
- 当 S>=3 时,S 个服务器节点可以使用 Paxos、Raft 等任何一种统一的共识算法来选举领导者。在这种情况下,可以保证可用性(活跃性,leader 最终会被选举出来)和一致性(安全性,任何时候都没有不同的leader)。
- 当 S<=2 且 C>=1 时,客户端节点也将参与领导者选举过程。只要客户端节点数C>=1,总节点数不少于3个,在部分同步系统中可以采用统一共识算法选举Leader。但是,只有服务器节点有投票权和被选举权,而客户端节点只有投票权,没有被选举权。
- 当 S<=2 且 C=0 时,虽然参与 Leader 选举过程的节点总数少于 3 个,因此没有一种算法可以保证可用性和一致性,但也完全没有来自客户端节点的请求!我们可以选择两个服务器节点中的任何一个作为领导者,因为不需要可用性或一致性!
要求
希望您能帮助我们看看这种方法是否可以算是一项重大创新。此外,我们计划将基于级别的领导者选举原语添加到当前的存储和数据库请求/响应协议中。如果有人有兴趣,请告诉我。