In this paper, the authors present ZooKeeper, a distributed coordination service for distributed applications. It acts as a simple and high-performance kernel to provide building blocks for complex coordination primitives at the client. ZooKeeper does not include specific primitives on the server side, but exposes necessary APIs and gives enough feasibility to client-side developers so that they can implement their own primitives. For performance concerns, ZooKeeper moves away from blocking primitives and implements an API to manipulate simple wait-free data objects organized hierarchically as in file systems. In addition to this wait-free property, ZooKeeper also provides order guarantees for operations: (1) FIFO client ordering of all operations and (2) linearizable writes based on a leader-based atomic broadcast protocol, Zab. After finishing the design part of ZooKeeper, this paper shows how to use the ZooKeeper API to implement more powerful primitives, such as configuration management, rendezvous, group membership, simple locks (w/ or w/o herd effect), read/write locks, and double barrier. Moreover, the authors also demonstrate how to leverage these primitives to implement required applications like the fetching service of a search engine. At last, they evaluate ZooKeeper on the throughput and latency of requests and demonstrate its effectiveness.
- The authors propose a coordination kernel with relaxed consistency guarantees, which can be used in many distributed systems to implement various coordination techniques.
- The authors not only describe the design and implementation details of ZooKeeper but also show how to use ZooKeeper API to build powerful coordination primitives and further to implement higher-level distributed applications.
- The authors conduct extensive experiments to evaluate the performance of ZooKeeper.
- ZooKeeper simplifies the exposed APIs, providing the wait-free property of shared registers with an event-driven mechanism.
- The FIFO client ordering of ZooKeeper enables clients to submit operations asynchronously so that the client can have multiple outstanding operations at the same time.
- ZooKeeper introduces a watch mechanism to enable client-side data caching without managing the client cache directly, which further increase the performance of reads.
- ZooKeeper only guarantees data consistency, but if the user wants to get the latest data, she has to call "sync" API manually.
- The notification of watch operation is one-time trigger associated with a session. If the data of a node is frequently updated, the user has to register watch repeatedly.