The library has modular design: its core part implements only the core
Raft algorithm logic, in a fully platform independent way. On top of that,
a pluggable interface defines the I/O implementation for networking
(send/receive RPC messages) and disk persistence (store log entries and
snapshots).