请问分布式事务一致性与raft或paxos协议解决的一致性问题是同一回事吗?

虽然不是一回事儿,但是有千丝万缕的联系,哪里不一样,很多答主都说了。我来说说它们哪里有联系,相信这也是会造成很多同学迷惑的地方。


  1. 分布式数据库的commit是一个atomic commit问题,这个问题的解分为blocking和non-blocking两种。
  2. 其中non blocking Weak Atomic Commitment, consensus和uniform consensus这三个问题是等价的。只要你可以解决其中任何一个,你就可以解决其他两个。
  3. non blocking Atomic Commitment(NB-AC)(少了weak)的Non triviality要求没有failure发生则correct的node都commit,而non blocking Weak Atomic Commitment(NB-WAC)的Non triviality要求没有任何node被怀疑failure则correct的node都commit。就是由于这一点,NB-AC在异步环境无解,而NB-WAC可解。因为异步环境我们无法得到一个完美的failure detector,所以我们不可能完美不犯错的detect有没有failure。
  4. 由于NB-WAC和consensus等价,且NB-AC比NB-WAC难,所以NB-AC是比consensus要难的。


然后很有意思的一个问题:

  1. 就是大家其实都是用2PC的比较多(2PC是Blocking Atomic Commitment),用Nonblocking-WeakAtomicCommitment的比较少。。。。比如Precolator,MegaStore和Spanner都是2PC。
  2. 而2PC的问题是某一个shard挂了,和coordinator挂了,需要block等。
  3. 那么只要保证shard和coordinator的high availability就可以防止block等待了。
  4. 那么怎么保证high availability呢?=> 用replicated state machine。
  5. 怎么在异步环境(准确说应该是局部同步,partial synchronization,根据FLP,完全异步的环境consensus都无解)中实现replicated state machine呢? => 用paxos这种共识算法。(对, 我们又绕回来了~~)


然后很有意思的一个问题之二:

数据库的外部一致性这方面的问题其实和consensus也有一些联系:

  1. 数据库的外部一致性,从数据的角度来看(比如read your write consistency是从client角度来看,这里不讨论)分为几个层级,从强到弱:linearizability > sequential consistency > causal consistency > FIFO consistency; 参见Distributed Systems: An Algorithmic Approach 2nd Edition这本书的 Chapter16 Replicated Data Management的section 16.3 Data-centric consistency models
  2. 其中sequential consistency可以用total order broadcast(Atomic Broadcast)来实现, 参见Atomics Broadcast and Its use to Achieve Sequential Consistency
  3. 而Atomic Broadcast和consensus问题是等价的, (对, 我们又回到了consensus问题~~)

(高赞由于只讨论了linearizability,所以说跟Paxos没关系,但是从更广的角度来说,还是有联系的)


关于consensus与transaction的关系建议看两篇论文。

1. Revisiting the relationship between non-blocking atomic commitment and consensus

2. Consensus on Transaction Commit

看懂了这两篇,你绝对不会再对consensus问题和transaction问题有任何混淆。

猜你喜欢

转载自blog.csdn.net/yupi1057/article/details/80600899