Selecting a distributed agreement algorithm

When component parts of distributed systems need to reach agreement, arriving at consensus is difficult if some components don't behave properly. The Byzantine Generals Problem described by Lamport and others exemplifies the difficulty. In a real situation, components don't know which of their peers are faulty and hence they cannot apply the algorithms of Lamport et al, nor even decide if a suitable algorithm exists. This paper discusses options available in this situation and describes how a good expectation of arriving at a consensus can be achieved without knowing for certain which or how many participants are behaving badly.