《设计数据密集型应用/DDIA》精要翻译(七) :Linearizability
定义和理解
Linearizability是常用的一致性模型(对于一致性模型,笔者后续会有专门的文章来讨论)之一,Linearizability也可以被称为原子一致性(atomic consistency),强一致性(strong consistency),立即一致性(immediate consistency)或外部一致性(external consistency )。
很难给Linearizability一个非常明确的定义,它的基本思路是:让整个数据系统看上去只有一个副本,并且所有的操作都是原子的。
对于上面那句话, 可以用下面的例子来稍作理解:
- 图9-2想要阐明的一点是,一个写请求完成后,所有的读请求都应该读取到最新的值。
- 图9-3想要说的是,当一个读请求返回新值后,所有后续读请求(无论是否是同一个客户端)都要返回新值。
如下图,用竖线来表示操作生效的时间点,那么如果我们要把这些时间点用线连起来,它应该是从左往右的,并且符合逻辑的。 下图中B最后的读取就是不符合逻辑的,所以那个读不是Linearizable的。
依赖Linearizability的场景
比如分布式锁: 当一个锁被client 1占有之后,我们希望别的client获取该锁的状态时,返回结果都是正在被client 1占有,而不是其他状态。
Linearizability, Serializability and Strict Serializability
(属于番外内容)
对于Linearizability、 Serializability、 Strict Serializability,我们往往会容易弄混, 可以参考: Linearizability, Serializability and Strict Serializability 来对他们的区别有更深入的理解。