Why consensus algorithms are like military generals