用于一致性算法的Java实现

时间:2011-11-11 09:30:23

标签: java

我正在开发分布式系统,我必须实现一致性算法(pref.Paxos)。我正在寻找可用于达成共识的任何API。但我只能偶然发现提供此功能的Apache Zookeeper。但是当大多数服务器都关闭时,我无法使用ZK。这不符合我的问题。是否有任何其他API或开源项目可以帮助我从头开始避免代码实现?

1 个答案:

答案 0 :(得分:2)

当大多数服务器出现故障时,你无法解决共识,除非你有办法绝对肯定地说它们确实已经关闭,这是不太可能的。 ZooKeeper是正确的,因为它不会向你承诺不可能。

请允许我解释一下。考虑一下你有3台服务器。其中一人怀疑剩下的两人失败了(例如错过了一些心跳)并继续单独决定协商一致的结果。如果剩下的2个没有失败,他们可能会有不同的决定,从而导致不一致。这是安全违规,也被非正式地称为“裂脑”问题。

请注意,即使您拥有允许服务器关闭其他设备的STONITH设备,之前的情况也可能导致每个人都关闭,从而使整个系统不可用。这是一种活生生的违规行为。

最后,如果你有一个非常好的STONITH设备永远不会杀死最后一个服务器,你不需要算法来解决共识。只需使用STONITH试图杀死所有人,让幸存的服务器成为领导者和决策者。 STONITH 共识实施。

所以,坚持使用ZooKeeper。