Challenges
- update multi-item state in a way that's safe even if coord crashes
- new coord needs to be able to recover/repair state
- elect MR coord (one at a time!)
- what if old coord doesn't realize it's been replaced
- can it still read/write state in ZK?
- or in other storage?
- read performance
Features
- asynchronous
- read by any server
Linearizablity ⇒ behaves like a single machine
- Can construct a total order of ops (even for concurrent ones)
- Order matches ‘real-time’
- Read returns values of last write
ZooKeeper: change correctness definition
- Linearizable writes
- FIFO client order
- Read: observe last write from same client