Introduction to CURP Protocol
datenlord.github.io
datenlord.github.io
You don't need PAXOS, RAFT, or CURP to implement a key-value store. Those are distributed state machines, all you need is distributed state.
That means you don't need a leader election. You don't need a leader. You don't need any round trips. You don't need coordination.
PAXOS was the only game in town for many decades, but there are better ways to do this now.
What they don't do is give you a global linear ordering. But you don't need that in a key-value store, and you don't need that in most distributed computing.
People keep reaching for PAXOS and RAFT when they don't need it. It's pretty rare that you need a distributed linearization.
But, if CRTDs allow independent operation, don't they check the high availability box?
If node A sees deposit,withdraw and node B sees withdraw,deposit one of those is business-as-usual, the other is overdraft. You can't have a "high availability" system where some parts of the system are acting like it's okay, and other parts aren't.
Not everything is a bank, but a lot of things are often more-like-a-bank than they first appear...
However, it's distributed consensus that solves for strict serializability (I should say, not strict consistency) and high availability as a combination.
See also the Jepsen page on consistency levels.
The earliest knowledge I have of this is Generalized Paxos, but I believe there's more recent work with the likes of Egalatarian Paxos. I think there were even some CRDTs that mixed strong consistency and weak consistency.
https://github.com/xline-kv/Xline/blob/master/curp/tla%2B/cu...
https://github.com/xline-kv/Xline/tree/master/curp/tla%2B
¹warning, I skimmed and ctrl-fd for "leader election"
And KV stands for Key Value.