Is the raft consensus algorithm a byzantine fault tolerant algorithm?
How many (percentage of) nodes are required to reach agreement/consensus?
BFT vs CFT Istanbul BFT is Byzantine Fault Tolerant (BFT) while Raft is Crash Fault Tolerant (CFT). BFT protects the blockchain against bad actors, while CFT only protects against nodes crashing.
Byzantine Fault Tolerance (BFT) is a consensus approach that resists a system to get into the Byzantine Generals' problem. It also means the system should stay intact even if one of the nodes (or general) fails. In addition, BFT aims to reduce the effect of malicious byzantine nodes (or general) on the network.
What is Byzantine Fault Tolerance? Byzantine Fault Tolerance(BFT) is the feature of a distributed network to reach consensus(agreement on the same value) even when some of the nodes in the network fail to respond or respond with incorrect information.
Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems.
No, Raft's initial description (by Diego Ongaro and John Ousterhout (1)) is not byzantine fault-tolerant.
Imagine a node that votes twice in a given term, or votes for another node that has a log which is not up-to-date like its own and that node becomes leader. Such behaviour could cause split-brains (case where to two nodes believing themselves to be leader) or inconsistencies in the log.
Many other scenarios like sending fake but valid heartbeat messages are also examples that show Raft is not byzantine fault-tolerant.
However there are several papers where a byzantine fault-tolerant version of Raft is presented (2).
To reach consensus Raft needs the majority of nodes to be alive - > 50%
.
This means in order to tolerate t
failures, there have still to be t+1
nodes working correctly.
So 2t+1
nodes are needed to be t-resilient, which is the smallest amount of nodes needed to reach consensus in presence of partial synchrony (3) with just tolerating omission failures.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With