...
- Create a log that is replicated across a cluster of servers. Each log entry will be is identical on each of the servers.
- The log is sequentially ordered: each entry has a unique integer id, and ids are assigned in ascending order.
- Clients will make requests to append entries to the lawlog, and to read log entries in order.
- If a server has accepted a given log entry, then it also has accepted all log entries with smaller ids than the given one.
- If a majority of the servers have accepted a particular log entry, then that log entry is called guaranteed: it will eventually be accepted by all servers, and it will not be lost unless a majority of the servers suffer simultaneous catastrophic failures that lose all of their persistent data.
- One of the servers in the cluster is designated the leader; all client requests that modify the log must be processed by the leader.
- Clients can read log entries from any server, though there will be a time delay between when data can be read from the leader and when it can be read from other servers.
- Leadership can move among the servers in the cluster in response to failures.
- There is at most one leader in the cluster at a time. Once a new leader has been elected, it will not be possible for the previous leader to make updates to the log.
...