It it impossible in a distributed data store to guarantee more than two out of the following three guarantees:
- Consistency aka every reader receives the most recent write or an error.
- Availability aka every reader receives a response without the guarantee that it contains the most recent write.
- Partition tolerance aka a system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes.
When a network partition failure happens should we decide to:
- Cancel the operation and thus decrease the availability but ensure consistency.
- Proceed with the operation and thus provide availability but risk inconsistency.
Note to myself: No distributed system is safe from network failures.
Be prepared for them 🛡️.