Too Long; Didn't Read
This miniseries is an attempt to strike that balance of detail for beginner to intermediate readers who know the What and are trying to understand the Why and How. To design an algorithm that is fault tolerant, we must first understand what exactly a node failure is and how it manifests in terms of the node’s behavior. Byzantine failures are hardest to deal with because the behavior is non-deterministic and the node might appear as healthy to the rest of the network. In a synchronous model, there is a known upper bound on the delay for transmitting and processing a message, while an asynchronous model is not guaranteed to finish within a known time.