A well known pattern for building systems is to break them down into data planes and control planes. Despite having known this and done this for years, I never considered this distinction within log replication protocols, another thing I’ve thought about for years. The data plane of a log replication protocol can just be concerned with failure-free data redundancy (e.g. replication or erasure coding). The control plane is then concerned with handling and recovering from failures. Raft is a ‘converged’ protocol mixing both data plane and control plane is one protocol and one log. But it doesn’t have to be that way.

I think this is a nice framework to think about the variety of log replication prtocols out there. Thanks to Jack Vanlightly for writing about this. Check out his survey on the topic.