Here's my blog post on the issue: http://hack.systems/2017/03/13/pocdb/
The entire implementation is 1100 lines of code including comments.
Here's my blog post on the issue: http://hack.systems/2017/03/13/pocdb/
The entire implementation is 1100 lines of code including comments.
This blog post we're discussing agrees: "I planned to finish it in a couple of days, but the whole endeavor lasted a couple of months, the first version has consistency issues, so I had to mock the network and to introduce fault injections to catch the bugs. [...] Single Decree Paxos seems simpler than Raft and Multi-Paxos but remains complex enough to spend months of weekends in chasing consistency."
Your approach of using many small Paxos instances is very interesting, though! I'd love to see some real world performance comparisons.
My main projects using Paxos are Replicant[1] and Consus[2], both of which have consumed significantly more time to get Paxos correct.
[1] https://github.com/rescrv/replicant [2] http://consus.io/
It's worth reading his description of the paper to understand why: http://lamport.azurewebsites.net/pubs/pubs.html#lamport-paxo...
In short, not everyone has the same sense of humor.
Paxos made simple is much easier in comparison.
One thing I think is worth touching on is the pipelining ability of multi-paxos that is missing when you have a single register with the Synod protocol. For key-value operations, it's not a problem. For a true replicated state machine, this can hinder performance.
In Replicant[1] I added pipelining to ensure Paxos was unlikely to be a bottleneck to replicated state machines. For complex state machines, the state machine becomes CPU bound.
What do you mean by pipelining?