Linearizability versus Serializability

发布时间 2023-08-23 20:06:20作者: Angelia-Wang

原文

Linearizability 和 Serializability 是在数据库和分布式系统中重要的两个概念,而且比较容易混淆,这篇文章试着对两个概念的不同进行简单、简短的解释。

Linearizability: single-operation, single-object, real-time order

Linearizability:单操作,单对象,实时顺序。

Linearizability 是对单个对象进行单次操作的一种保证。它提供了对于同一个对象的一系列 read/write 操作都是按照 real time(例如 wall-clock)排序的。

通俗来说,Linearizability 下,写入操作应该是瞬时的,一个对象的写操作一旦完成,能立即被后续的读操作看到,即读一定是读到这个对象的最新的值。

Linearizability 是 “atomic consistency” 的同义词,同时也是 CAP 种的 C,“consistency”。

并且 Linearizability 是可组合的,如果系统中每个对象的操作都是 linearizable,则系统中所有操作是 linearizable。

Serializability: multi-operation, multi-object, arbitrary total order

Serializability:多个操作,多个对象,任意的顺序

Serializability 是对事务的一种保证。Serializability保证了多个事务(每个都包含了一组对于不同对象的读/写操作)的执行等同于一个顺序执行的效果。

Serializability 是 ACID 中的 I。如果每个事务都保证了 correctness(ACID 中的 C),则顺序执行的事务也保证了 correctness,因此serializability是保证事务正确的一个机制。

❗️Serializability ? Linearizability:Serializability 没有对事务的执行顺序强加任何 real-time order 的约束,即不需要操作是按照真实时间严格排序的,只需要存在一个满足条件的顺序执行顺序即可,不需要每个事务都是严格的先后时间顺序。

Strict Serializability: Why don’t we have both?

Strict Serializability = Serializability + Linearizability 事务行为等同于某种序列执行,而序列顺序与 real time 相对应。

? 我们假设开始并提交 T1,写item x;然后稍后开始提交 T2,读 x。数据库如果按照 Strict Serializability,则会先 T1 后 T2,T2 会读到 x 的最新值,如果数据库按照 Serializability,则可能会先 T2 后 T1。

Herlihy and Wing 所说:Linearizability 可被视为 Strict Serializability 的一种特殊情况,在这种情况下,事务被限制为由应用于单一对象的单一操作组成。

Coordination costs and real-world deployments

Linearizability 或者 Serializability 在没有 coordination 的情况下都不可能达到。也就是说,我们在异步网络下,我们无法提供 Linearizability 或者 Serializability 的可用性(即 CAP "AP")。

正如上述理论所暗示的,实现这些特性需要大量昂贵的协调工作。因此,现实系统通常使用更便宜的实现模型,但往往更难理解。效率与可编程性之间的这种权衡,代表了一个迷人而又充满挑战的设计空间。

A note on terminology, and more reading

Linearizability 来源于分布式系统和并发编程,而 Serializability 则来源于数据库。如今这两者都在分布式系统和数据库中使用,也导致了术语上的冲突。

关于这些概念,有很多更精确的论述。我喜欢这本,但互联网上也有很多免费、简洁、(通常)准确的资料,比如这些注释