分布式系统的各类Consistency对比小结

不写严格的定义, 也不全面, 只是用一个很简单的例子对比各种consistency不一样的地方; 简单易懂且实用;

Linearizability

两台机器, node1写A, node2写B, “写A”操作在“写B”开始前完成, B一定覆盖A; 对于多个观察者来说, 任意一个观察者看到B后, 其他观察者必须只能观察到B;  或者B操作完成后, 所有观察者都只能观察到B; (就好像只有一份数据一样, 但其实是多机器备份的;)

Sequential

  • 两台机器, node1写A, node2写B, “写A”操作在“写B”开始前完成, A可能覆盖B, B可能覆盖A, 但是机群所有节点必须看到一样的顺序;

  • 同一台机器node1先写A, 或者先看到A , 然后再写B, 所有节点必须用B覆盖A; 对于观察者来说, 看到B之后就无法再观察到A;

Causality

  • 两台机器, node1 写A, node2写B, A在B开始前完成, 某些节点里A可能覆盖B, 某些节点里B可能覆盖A;

  • (与Sequential的第二点相同) 同一台机器node1先写A(或者先看到A), 然后再写B, 所有节点必须用B覆盖A; 对于观察者来说, 看到B之后就无法再观察到A;

FIFO

同一台机器node1先写A(注意这里“或者先看到A”的要求消失了), 然后再写B, 所有节点必须用B覆盖A; 对于观察者来说, 看到B之后就无法再观察到A;

Strong Eventually

同一台机器node1先写A, 然后再写B, 所有节点在最终某时间点后用B覆盖A; 在这之前, 观察者的多次观察可以先看到各种乱序(比如先看到B再看到A然后再看到B然后又看到A, 甚至可以看到[A,B]), 任何顺序都可以; 直到某时间点后, 持续观察到B再也观察不到A

Eventually

同一台机器node1先写A, 然后再写B, 所有节点在最终某时间点后有同一个值, 这个值可能是A, 也可能是B, 这个过程中, 观察者的多次观察看到A或者B顺序是任意的.

有没有比Linearizability更难的问题?

Consensus == Total Order Broadcast == Atomic Test-Write Register; (为什么consensus比Linearizability难请看评论区)

有没有比Consensus更难的问题?

Atomic Commit (为什么Atomic Commit比Consensus难请看这里: 请问分布式事务一致性与raft或paxos协议解决的一致性问题是同一回事吗?)

最终排序

Atomic commit > Consensus > Linearizability > Sequential > Causality > FIFO > Strong Eventually > Eventually

严重注意!

  • 能实现consensus的算法一定可以用来实现Linearizability,

  • 但是!

    你也可以选择用consensus来实现Sequential consistency, 并不是说实现了consensus的系统就至少提供Linearizability, 这是不对的。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章