3 ms·
Some of the stuff in here is just wrong. "they have to block --- wait until the coordinator recovers --- in order to find out the final decision" This assumes
by jamesblonde 8y ago
Some of the stuff in here is just wrong.
"they have to block --- wait until the coordinator recovers --- in order to find out the final decision"
This assumes there is only one coordinator in the system and that there cannot be another coordinator that 'takes over'.
Here's a good example of a real-world 2PC system that is non-blocking if the coordinator fails - NDB:
http://mikaelronstrom.blogspot.com/2018/09/non-blocking-two-phase-commit-in-ndb.html http://mikaelronstrom.blogspot.com/2018/09/non-blocking-two-...
In NDB, if a participant fails, yes you have to wait until a failure detector indicates it has failed. But in production systems, that is typically 1.5 to 5 seconds. In effect, it is the same effect as the leader in Fast-Paxos failing - you need a failure detector and then run a leader election protocol. That's why we call practical Paxos 'abortable consensus' - it can abort and be retried. Similarly, TPC can be made 'non-blocking' with abortable retries if transactions fail. In effect, they can be made somewhat interchangeable ( "consensus on transaction commit").
- abadid 8y agoIt is one coordinator per transaction. As far as coordinator robustness, I discussed this in the following paragraph from my post: "There are two categories of work-arounds to the blocking problem. The first category of work-around modifies the core protocol in order to eliminate the blocking problem. Unfortunately, these modifications reduce the performance --- typically by adding an extra round of communication --- and thus are rarely used in practice. The second category keeps the protocol in tact but reduces the probability of the types of coordinator failure than can lead to the blocking program --- for example, by running 2PC over replica consensus protocols and ensuring that important state for the protocol is replicated at all times."