For a long time, most applications used traditional centralized databases to manage their data. Applications could read and write to a set database that was managed by a single entity, a master. But these systems had a major flaw: reliance on a single entity leaves the database more vulnerable to failures and attacks.
Systems that aspire to be truly decentralized such as blockchains can’t use such a model to maintain a network of value. Instead, blockchains required the creation of Nakamoto consensus, the Byzantine fault-tolerant consensus algorithm that Bitcoin uses.
In distributed computing systems, there must be a way for the system to continue functioning even if various individual components of the system fail. In the case of Byzantine fault-tolerance, the distributed system needs to be able to come to an agreement even when certain components fail and are unable to participate in the processes to reach consensus.
The name is derived from the “Byzantine Generals Problem”, a problem that explores the following idea: there is an army split with the two groups on opposing sides of an enemy city. If one of the two groups were to attack the enemy city alone, then the enemy city would be able to outlast them. The only way for an attack operation to succeed is for both groups to attack at the same time.
To do this, the two generals in charge of the two split groups need to come to an agreement on a time to attack the enemy city but, the only way for them to communicate is to send a messenger through the enemy city. Because the messenger has to travel through the enemy city, neither general can be confident in their message being delivered to the other;