The distributed consensus problem arises when several processes need to reach a common decision despite failures. The importance of this problem is due to its omnipresence in distributed computation: we need consensus to implement reliable communications, atomic commitment, consistency checks, resources allocations etc. The solvability of this problem is strictly related to the nature of the system it is conceived in. When an asynchronous system is considered, a research result states the impossibility of deterministically reaching consensus when even one single fault occurs. In this paper we will focus our attention on the models proposed to overcome this result and the research originated from them.