raft共识算法是拜占庭容错算法吗?
需要多少(百分比)节点才能达成一致/共识?
不,Raft 的最初描述(由 Diego Ongaro 和 John Ousterhout (1)提出)不是拜占庭容错的。
想象一个节点在给定期限内投票两次,或者投票给另一个节点,该节点的日志不像它自己的那样是最新的,并且该节点成为领导者。这种行为可能导致脑裂(两个节点认为自己是领导者的情况)或日志中的不一致。
许多其他场景,比如发送虚假但有效的心跳消息也是表明 Raft 不是拜占庭容错的例子。
然而,有几篇论文介绍了 Raft 的拜占庭容错版本(2)。
为了达成共识,Raft 需要大多数节点都处于活动状态 - > 50%
.
这意味着为了容忍t
故障,仍然必须有t+1
节点正常工作。
因此,2t+1
节点需要具有t-resilient ,这是在存在部分同步 (3)的情况下达成共识所需的最少节点数量,并且只能容忍遗漏失败。