知识卡片
线性一致性的精确定义与仿佛只有一份副本的错觉
内容
线性一致性要求一个有多副本的数据系统,从外部客户端视角看起来就像只有一份数据、且所有操作都原子性生效——一旦某次写入完成,之后开始的任何读取(无论请求到达哪个副本)都必须看到这个新值或更新的值,绝不能看到旧值。精确定义建立在寄存器(单个值)的读/写/CAS操作上:给每个操作标注调用与返回的真实时间区间,如果能把所有操作按某个全序排列、且这个全序与每个客户端观察到的顺序一致,同时任何返回后才开始的操作必须看到之前的返回结果,这个系统就是线性一致的。这比”最终一致性”强得多——最终一致性只承诺副本终将收敛,不承诺任何时刻读到的是最新值;线性一致性则是在任意时刻都提供”仿佛单副本”的新鲜性保证,代价通常是牺牲部分可用性或延迟。
参考来源
- 位置:《数据密集型应用系统设计》第九章《一致性与共识》"线性一致性"(源文件:_epub-src/ch9_split_000.html)
- 结论依据:原文用寄存器读/写/CAS操作的调用返回时间区间定义线性一致性,要求存在与实时顺序一致的全序,并强调目标是让多副本数据"看起来好像只有一个副本",直接支撑本卡片结论。
- 原始内容:线性一致性背后的基本思想很简单:使一个系统看起来好像只有一个数据副本……让所有的操作都是原子性的,就好像只有一个副本的一个数据一样。