- Why are only update requests A-linearizable?
- How does linearizability differ from serializability?
- What is pipelining?
- What about Zookeeper's use case makes wait-free better than locking?
- What does wait-free mean?
- What is the reason for implementing 'fuzzy snapshots'? How can state changes be idempotent?
- How does ZooKeeper choose leaders?
- How does Zookeeper's performance compare to other systems such as Paxos?
- How does the ordering guarantee solve the race conditions in Section 2.3?
- How big is the ZooKeeper database? It seems like the server must have a lot of memory.
- What's a universal object?
- How does a client know when to leave a barrier (top of page 7)?
- Is it possible to add more servers into an existing ZooKeeper without taking the service down for a period of time?
- How are watches implemented in the client library?
One use of Zookeeper is a fault-tolerant lock service (see the section "Simple locks" on page 6). Why isn't possible that two clients can acquire the same lock? In particular, how does Zookeeper decide if a client has failed and it can give the lock to some other client?
[LAB 3 说明](6.824 Lab 3_ Fault-tolerant Key_Value Service.html)