Raft共识算法是拜占庭容错(bft)算法吗?

Is the Raft consensus algorithm a byzantine fault-tolerant (bft) algorithm?

raft共识算法是拜占庭容错算法吗?

需要多少(百分比)节点才能达到 agreement/consensus?

不,Raft 的初始描述(Diego Ongaro 和 John Ousterhout (1))是 不是 拜占庭 fault-tolerant。

想象一个节点在给定期限内投票两次,或者投票给另一个节点,该节点的日志与自己的日志不同 up-to-date 并且该节点成为领导者。这种行为可能会导致 split-brains(两个节点认为自己是领导者的情况)或日志中的不一致。

许多其他场景,如发送虚假但有效的 heartbeat 消息也是表明 Raft 不是拜占庭的例子 fault-tolerant.

然而,有几篇论文提出了 Raft 的拜占庭 fault-tolerant 版本 (2)


为了达成共识,Raft 需要 多数 节点存活 - > 50%.

这意味着为了容忍 t 个故障,仍然需要 t+1 个节点正常工作。

所以2t+1个节点需要t-resilient,这是在存在[=34=的情况下达成共识所需的最少节点数]部分同步 (3) 仅容忍遗漏失败。