两个节点的共识算法
Consensus algorithm for two nodes
据我所知,PAXOS、RAFT 和 ZAB 可以与两个节点一起工作,前提是它们都处于活动状态。这意味着如果两个节点之一崩溃,分布式应用程序也会崩溃。如果我错了,请纠正我。
是否有适合双节点集群且容忍一个节点故障的算法?
没有可以容忍大多数集群故障的共识算法。问题在于,根据其定义,共识需要来自大多数集群的输入。如果您甚至无法与大多数服务器通信,如何达成共识?如何知道宕机的服务器会就任何给定值达成一致?基于多数的共识算法在以下假设下工作:对某个值的多数同意强制要求不能为给定状态选择其他值。
当然,在一般意义上,有许多算法可以容忍双节点系统中一个节点的故障。问题是你是否愿意容忍这种权衡取舍。这在很大程度上取决于您的用例。共识算法以可用性为代价提供强一致性。或者,如果您需要可用性(即,即使只有不到大多数节点处于活动状态,集群仍能继续运行),您可以使用更简单的算法,例如一致性哈希和八卦。同样,这些仅取决于您的用例。
据我所知,PAXOS、RAFT 和 ZAB 可以与两个节点一起工作,前提是它们都处于活动状态。这意味着如果两个节点之一崩溃,分布式应用程序也会崩溃。如果我错了,请纠正我。
是否有适合双节点集群且容忍一个节点故障的算法?
没有可以容忍大多数集群故障的共识算法。问题在于,根据其定义,共识需要来自大多数集群的输入。如果您甚至无法与大多数服务器通信,如何达成共识?如何知道宕机的服务器会就任何给定值达成一致?基于多数的共识算法在以下假设下工作:对某个值的多数同意强制要求不能为给定状态选择其他值。
当然,在一般意义上,有许多算法可以容忍双节点系统中一个节点的故障。问题是你是否愿意容忍这种权衡取舍。这在很大程度上取决于您的用例。共识算法以可用性为代价提供强一致性。或者,如果您需要可用性(即,即使只有不到大多数节点处于活动状态,集群仍能继续运行),您可以使用更简单的算法,例如一致性哈希和八卦。同样,这些仅取决于您的用例。