3 ms·
This exists already with rqlite: https://github.com/rqlite/rqlite https://github.com/rqlite/rqlite As much as I love the idea, Raft is not a silver bullet and
by rocmcd 5y ago
This exists already with rqlite: https://github.com/rqlite/rqlite https://github.com/rqlite/rqlite
As much as I love the idea, Raft is not a silver bullet and can break in strange and inconspicuous ways that may be difficult to fix. It can also lead to subtle inconsistencies in the data depending on what data you are putting in it. Overall it may be good in some situations, but I doubt it will dislodge Postgres in any meaningful way.
- Conlectus 5y agoWouldn't this be true of any form of replication, including whatever Postgres uses? Or is the proof of correctness for Raft weaker than some other class of consensus? Edit: from rqlite's FAQ > Raft is a Consistency-Partition (CP) protocol. This means that if a rqlite cluster is partitioned, only the side of the cluster that contains a majority of the nodes will be available. Disconcertingly, this sounds like they assume that only one side of a partition can contain a majority of nodes. This isn't true if the partition is partial, eg A<-->B, B<-->C, A<-/->C.
- otoolep 5y agorqlite creator here. rqlite (and Raft) doesn't assume this. All it states is that for the cluster to make progress i.e. apply a change in a consistent manner, at least a quorum of nodes must be online and in contact with the Leader (which is one of the online nodes). Every node in a rqlite cluster knows what size the cluster is and therefore requires that (N/2)+1 nodes acknowledge the change before that change is committed. The Leader node performs this coordination. The scenario you outlined above is obviously possible. But in that event the cluster is down -- the Leader (let's say it's node A) cannot contact a quorum of nodes. No changes can be made to it.
- Conlectus 5y agoGotcha, that makes sense. I look forward to digging into the code myself :).
- otoolep 5y agoWhat inconsistencies do you mean, precisely? I think you need to provide a clear example of what you mean, to understand what you're getting at. In my experience, any inconsistencies would be due to misuse of Raft, not something intrinsic to Raft itself.
- rocmcd 5y agoThanks for chiming in, Philip! I’m a big fan of your work. I was referring to the issues around determinism in queries. These are easy enough to catch if you’re aware of them, but it pushes more onus onto the application layer / devs (not that it’s necessarily a bad thing, just a trade-off).
- pstuart 5y agorqlite is nice but it's got limitations that made me look elsewhere. https://dqlite.io/ https://dqlite.io/ does it in C and allows for transactions and can be used for the Go sql.DB object.