Distributed systems have more nuanced consistency guarantees that tradeoff between performance and usability. Some examples include,

  • Linearizability
  • Eventual consistency
  • Causal consistency
  • Serializability

A history is a timeline of operations that are possibly concurrent
Each operation is an RPC invocation with arguments and a response

A history is linearizable if we can find a point in time for each operation (between invocation and reply) which fits our serial specification, meaning it’s a valid ordering

Generally, there is a tradeoff between strong consistency and max availability