I've been working through a basic implementation over the weekend [0] in Go. I am skipping dynamic cluster management and log compaction/snapshots. I mostly got leader election working and the basics of log replication. But it's not yet correct because nodes that are down when new messages come in are not correctly brought up to date. :D Still working through issues. When it's less buggy I'll write a post.

If you haven't read the paper, just try it out [1]! It's pretty approachable as far as these things go. It even includes its own cheatsheet inside the paper at Figure 2 (page 4).

[0] https://twitter.com/phil_eaton/status/1576281031367221249

[1] https://raft.github.io/raft.pdf

I believe Hashicorp has an OSS GO implementation of raft if I remember correctly.

Yup! etcd [0] and hashicorp [1] have Raft libraries for Go. I've written about using the hashicorp one before [2, 3].

[0] https://pkg.go.dev/go.etcd.io/etcd/raft/v3

[1] https://github.com/hashicorp/raft

[2] https://notes.eatonphil.com/distributed-postgres.html

[3] https://notes.eatonphil.com/minimal-key-value-store-with-has...