Although distributed consensus plays a key role in fault-tolerance, the kinds of algorithms we can use to solve this problem depend a great deal on the type of distributed system on which the protocol will run and the assumptions we make about the kinds faults to expect.