Distributed database systems include a plurality of storage devices spread among a network of interconnected computers. The distributed database systems typically have greater reliability and availability than parallel database systems, among other benefits. Various internet services, for example social networking services, employ distributed database systems to manage the storage and retrieval of information. Generally, the need to efficiently and accurately read and write data across the database system increases with a greater amount of information, a greater number of users, and stricter latency requirements.
In distributed systems, there is a need for coordination and synchronization among the storage devices. In particular, the coordination and synchronization may be needed to ensure that only certain processes should perform certain tasks, ensure the proper execution of a set of functions, ensure the allocation of unique IDs, orchestrate multiple processes, and/or facilitate other coordination operations. Apache ZooKeeper™ is an example of an existing centralized service for maintaining configuration information, providing distributed synchronization, and providing group services.
However, the application programing interface (API) for ZooKeeper™ is complex such that faulty function calls or faulty services interfacing with ZooKeeper™ only fail in certain edge cases. As a result, these faulty function calls or faulty services may be difficult to detect or may otherwise go undetected, may be difficult for programmers to debug, and/or may cause difficulties in fencing. Accordingly, there is an opportunity for configurations and frameworks that decrease the complexity exposed to developers for many use-cases of a distributed database.