知识卡片

因果顺序是偏序,线性一致性蕴含但强于因果一致性

普通读书笔记卡

内容

线性一致性把所有操作放进单一的全序时间线——任意两个操作之间总能比出先后。因果顺序则不同,它只是偏序:如果操作A”此前发生”于操作B(B在因果上依赖A,例如A是问题、B是对A的回答),两者才可比较先后;如果两个操作彼此独立、互不依赖,它们就是并发的,无法也不需要比出谁先谁后。这意味着因果一致的版本历史不是一条单一时间线,而是一棵不断分叉又合并的树。因果一致性比线性一致性弱,但恰恰因为它不要求把并发操作也塞进一个总顺序,它的协调开销远小于线性一致性、对网络延迟和网络分区的敏感度也低得多——书中把它称为”在不被网络延迟拖慢的前提下能达到的最强一致性模型”,且在网络分区期间仍能保持可用。线性一致性必然蕴含因果一致性(全序自然满足偏序的所有约束),但反过来不成立:因果一致的系统不必是线性一致的。发散:需要跨节点的因果关联(比如”回复必须晚于原帖出现”)但又不想为无关的并发操作付出全序代价时,因果一致性是更划算的中间选项。

参考来源

- 位置:《数据密集型应用系统设计》第九章《一致性与共识》"顺序保证""因果顺序不是全序"(源文件:_epub-src/ch9_split_000.html) - 结论依据:原文明确说明线性一致性把操作放入总顺序、因果一致性只是偏序(并发操作不可比较),并指出因果一致性是"不被网络延迟拖慢的前提下可达到的最强一致性模型",网络分区期间仍可用,直接支撑本卡片结论。 - 原始内容:因果关系……只是一个偏序,而不是一个全序……因果一致性是不会由于网络延迟被拖慢、且不受网络故障影响的最强的一致性模型。