WPaxos: a wide area network Paxos protocol
muratbuffalo.blogspot.com
muratbuffalo.blogspot.com
Sometimes it can be hard to tease out the true trade-offs in the systems as they don't get as detailed acknowledgement, but from a quick read it looks like tail latency will will be worse.
Improvements in consensus algos often have issues, correct implementation is hard, but it can make previously impossible things tenable which I find exciting.
My understanding is, it does Two-Phase-Commit (across WAN) over fault-tolerant objects (located in a Paxos Group). Paxos Group could span across Data-Centers, but there it just uses normal Multi-Paxos -- perhaps with some extra leader election tricks.
In this algorithm you have multiple leaders, where a leader can be in charge of a particular object temporarily by "stealing" it. This brings control to the datacenter that needs it, reducing latency.
It's an interesting idea, and I haven't fully absorbed the paper. But I'll comment on it anyway. It's always easier to criticize when you're ignorant of the details :)
In general, I don't like these algorithms that only guarantee a partial ordering. In other words, instead of having a single global total ordering of all transactions, you have an ordering of operations that apply to a single object or key or a related group of keys. This means you can't know if object A got updated before object B. You can't know the total state of the system as of a snapshot in time, or as of the moment a node membership change happens. (Maybe. There might be workarounds for these issues, at the cost of some complexity.)
This paper is a good contribution, but we ain't there yet.
> WPaxos maintains separate logs for every object and provides per-object linearizability.
Linearizability is a composable correctness condition, so per-object linearizability implies that the composition of all the objects is linearizable. Thus, WPaxos does in fact provide a single total ordering of all operations. Nearly all of the replicated state machines via consensus protocols (Paxos, EPaxos, Mencius, Generalized Paxos, etc.) provide this same consistency level.
> Linearizability is a composeable correctness condition
So if all I know is that A1 precedes A2 and that B1 precedes B2, how do I make assertions about the ordering of A2 and B2? Is “linear” in the context that you are talking about more specific than “orderable”?
GP isn’t complaining that the algorithm is incorrect, just that it doesn’t have the property of being replayed or reversed in a deterministic way. Most applications don’t need this property, I am just trying to see if I’m missing a part of your argument.
In this context, you could probably use "linear" and "orderable" to mean the same thing. The idea is that, for any linearizable execution, there exists an equivalent total order of the operations. Because there exists a total order, if a client C1 sees A2 before B2 then a client C2 cannot see B2 before A2.
The definition of linearizability is not in question.
The question is does this specific system we are discussing have global-linearizability or is there separate per-object (or some other bucketing method) linearizability.
As I said in my initial comment, the authors state that WPaxos provides per-object linearizability, which implies that it provides (to use your term, "global"-)linearizability.
The authors mention that transactions can be implemented in a way to support this by including a first step to steal all objects needed by the transaction. I believe this would give you strict serializability at a global level, but does have trade-offs in needing to know all objects at the start of a transaction, and other implications on latency, etc from this step.
The authors also note they haven't implemented transactions yet.
Also worth noting that some of the extensions/optimizations, such as the mentioned 'locality adaptive object stealing optimization' won't work as described with multi-object transactions. I could see additional work to identify groups of objects, but this would be very workload specific and not suitable as a generic solution.
My previous comments were referring to the basic algorithm presented as the main contribution of this paper in section 3. In this algorithm, "Every command accesses only one object o." With each operation applying to a single object and each object satisfying linearizability, the system as a whole will be linearizable.
The distinction between linearizability and strict serializability is somewhat subtle. I highly recommend this blog post [1] by Irene Zhang and this blog post [2] by Peter Bailis for some really great discussion on the subtleties involved.
[1] https://irenezhang.net/blog/2015/02/01/consistency.html
[2] http://www.bailis.org/blog/linearizability-versus-serializab...
The ensuing conversation explored how/why the system provides a global total ordering.