Improves performance: more bandwidth + computing power
Improves availability: more copies = more nodes must fail before data loss
Causes consistency problems — independent copies must stay synchronized
"To replication! The cause of, and solution to, all of life's problems." — Mixu
System Models
A system model specifies: node capabilities, failure modes, network properties, timing assumptions.
Timing Models
Model
Description
Realistic?
Synchronous
Bounded delays, lock-step execution, accurate clocks
No
Partially synchronous
Usually bounded, occasional spikes
Yes
Asynchronous
No timing assumptions, unbounded delays
Too restrictive
Network Properties
Nodes communicate over FIFO-ordered links (typically)
Messages can be: lost, reordered, delayed arbitrarily
Network partition: nodes alive but can't communicate with each other
CAP Theorem
Cannot simultaneously guarantee all three:
Property
Meaning
Consistency
All nodes see identical data simultaneously
Availability
Node failures don't stop the system serving requests
Partition tolerance
System continues despite message loss between nodes
Choice
Sacrifice
Example
CP
Availability during partitions
HBase, ZooKeeper
AP
Strong consistency
Cassandra, DynamoDB
CA
Partition tolerance (not viable in practice)
Single-node RDBMS
Key nuances:
Partitions will happen — P is not optional in practice
Linearizability is always slow, even without network faults
"Consistency" in CAP ≠ ACID consistency ≠ other guarantees
FLP Impossibility
"In an asynchronous system with reliable networks and crash-only failures, there is no deterministic algorithm for consensus — even if at most one process may fail."
— Fischer, Lynch, Paterson (1985)
Forces trade-offs between safety (nothing bad happens) and liveness (something good eventually happens)
Practical systems work around this with timeouts + probabilistic assumptions
Safety vs. Liveness
Property
Definition
Example
Safety
"Nothing bad happens" — must always hold
Uniqueness constraint, no dirty reads
Liveness
"Something good eventually happens" — caveats allowed
Availability, eventual consistency
Real systems: guarantee safety always, liveness under partial failures only.