Coordination services provide the means for distributed applications to share resources. Many coordination services provide a hierarchical namespace with strongly consistent semantics that applications utilize to build basic primitives such as locks and queues.
In this paper, we explore a fresh approach which uses a shared log as a flexible, raw substrate for implementing coordination primitives. We show that we can reduce an existing coordination service, ZooKeeper, to use a shared log, and show that a shared log offers benefits such as high performance and dynamic reconfigurability. Our design comprises several desirable properties that were recently introduced as enhancements to ZooKeeper, such as reconfiguration and client scale-out.