This chapter, as the title says, touches on both consistency and consensus from different angles. The first concept it dishes out is about linearizability, a consistency model that tries to make all the data behave as if it is written sequentially.
A weaker consistency model can be model using the concept of casualty, which differs from linearizability in the sense that it doesn’t require all data to behave sequentially, but only the data that depend on each other. Some popular implementations are distributed version controls as git, which works by mutating, branching, and merging data.
However, to achieve both of the previous models, some coordination is necessary, or in other words, consensus. The problem gets simpler when it is possible to use one single node to make all decisions. Still, if the coordinator node fails, a strategy is necessary to handle this outage.
Not every system requires consensus. On the ones that require, they might defer the consensus to algorithms and human analysis, materializing the data conflicts that need to be resolved.