前言
准备用一个系列写透分布式技术里面的一致性的难题,通过这个系列,各位能彻底掌握分布式系统中的一致性。本篇是第 3 篇。
正文
线性化是最强大的单对象一致性模型之一,它意味着每个操作似乎都以某种顺序原子地进行,与这些操作的实时顺序一致:例如,如果操作 A 在操作 B 开始之前完成,那么 B 应该在逻辑上在 A 之后生效。
该模型无法完全或粘性可用;一旦发生网络分区(集群中的多个节点分成几个部分,彼此之间不可达),部分或全部节点将无法进展。
线性化是一种单对象模型,但“对象”的范围各不相同。有些系统在键值存储中为单个键提供线性化;其他系统可能为一个表中的多个键或一个数据库中的多个表提供线性化操作——但不在不同的表或数据库之间提供线性化操作。
当你需要跨多个对象实现线性化时,需要保证严格序列化。如果实时性要求不是第一位的,如果你希望所有的进程都遵循相同的总顺序时,请尝试顺序一致性
参考
1990 年Herlihy & Wing在论文《线性化:并发对象的正确性条件》中引入了线性化。忽略填充不完整操作导致的可能结果所需的一些标记,线性化历史记录 H 是存在等效顺序(例如非并发)历史记录 S 的历史记录,并且 H 中操作的部分实时顺序与 S 的全序一致,并且保留了对象的单线程语义。
Viotti 和 Vukolić根据历史的三个集合论约束重新表述了这一定义:
SingleOrder(存在一些操作的全序)
RealTime(与真实时间绑定一致)
RVal(遵守关联对象数据类型的单线程定律)
备注
本篇可能有些拗口以及难于理解,如果有疑问,欢迎大家留言,我将不定期跟大家讨论答疑。
这个系列,尽量拆成比较简短的话题,方便大家理解单一知识点,希望大家价值,你们的点赞关注转发是我持续下去的动力。
感谢!