浅析分布式系统中的 Linearizability

简介:

在分布式系统里,出于可靠性(reliability)或者性能的考虑,数据通常会被复制为多个副本。因此,系统需要定义一组协议,来规定用户读写多副本时的行为。这组协议称之为 consistency model
最终一致性(eventually consistency),linearizability(atomic consistency)是不同类型的一致性模型。下图是最终一致性模型的示例,用户 B/C 在读取不同的副本时看到了不同的 x 的值。请注意,用户A,B,C的操作是完全串行执行的,即操作在时间轴上没有重叠。C 读取操作发生在 B 之后,却读到了过期的值。可见,最终一致性是一个较弱的一致性模型,用户需要自己解决读取到过期数据的问题。

eventually_consistency

接下来,让我们看看一个中间状态的一致性模型,它比最终一致性强,但是比 linearizability 弱。从时间轴上可以看到,B0 发生在 A0 之前,读取到的 x 值为0。B2 发生在 A0 之后,读取到的 x 值为1。而读操作 B1,C0,C1 与写操作 A0 在时间轴上有重叠,因此他们可能读取到旧的值0,也可能读取到新的值1。注意,C1 发生在 B1 之后(二者在时间轴上没有重叠),但是 B1 看到 x 的新值,C1 反而看到的是旧值。即对用户来说,x 的值发生了回跳。

casual_consistency

Linearizability,则提供了更强的一致性保证。注意下图中的 C1 和 B1 操作,C1 发生在 B1 之后,但是与 A0 并行。在 Linearizable 系统中,如果 B1 看到的 x 值为1,则 C1 看到的值也一定为1。而在前两种一致性模型中,同样的场景,C1 看到的 x 值既可能是0,也可能是1。在 Linearizable 的系统中,任何操作在该系统生效的时刻都对应时间轴上的一个点。如果我们把这些时刻连接起来,如下图中紫线所示,则这条线会一直沿时间轴向前,不会反向回跳。所以,在 Linearizable 系统中,任何操作都可以互相比较决定谁发生在前,谁发生在后。例如 B1 发生在 A0 前,C1 发生在 A0 后。而在前面较弱的一致性模型中,我们无法比较诸如 B1 和 A0 的先后关系。对这个性质更正式的表述是:在 Linearizable 系统中,我们可以获得操作的全序(total order)。而在提供较弱一致性的系统中,我们只能获得操作的偏序(partial order)。

linearizability

注意:

由于网络延时以及系统本身执行请求的不确定性,请求发起得早不意味着在服务端被执行得早。例如 A0 比 B1 在客户端发起得早,但 A0 在存储系统生效晚于 B1。反之,在服务端被执行得早的请求也有可能很晚客户端才收到结果,例如 C0。

需要 Linearizability 语义的一个典型场景是实现分布式锁。例如当一个锁被 client A获取后,则希望后续看到该锁的状态都是被A locked,而不是其他状态。

附录

A. Linearizability 与 Serializability 的差别

关于二者的差别,可以参考这一篇文章

目录
相关文章
|
前端开发 JavaScript Java
计算机Java项目|基于web的铁路订票管理系统
计算机Java项目|基于web的铁路订票管理系统
330 1
|
JavaScript 前端开发 UED
JS:如何获取浏览器窗口尺寸?
JS:如何获取浏览器窗口尺寸?
572 1
|
Linux Go iOS开发
掌握Go语言:配置环境变量、深入理解GOPATH和GOROOT(1)
掌握Go语言:配置环境变量、深入理解GOPATH和GOROOT(1)
2231 0
|
存储 负载均衡 NoSQL
一文让你搞懂 zookeeper
一文让你搞懂 zookeeper
19727 16
|
人工智能 数据可视化 数据处理
《人工智能可视化:数据洞察的新窗口》
在数字化时代,数据爆炸式增长带来巨大挑战。人工智能可视化技术应运而生,通过动态图表和智能选择最佳展示方式,突破传统静态图表的局限,深入挖掘数据潜在关系,如电商商品关联分析。它支持实时交互与反馈,助力金融等领域即时决策,并增强企业决策支持,以直观形式呈现市场趋势和预测结果,提升数据处理效率,挖掘潜在价值,推动各行业发展。
333 18
|
关系型数据库 MySQL 数据库
MySQL GTID 主从复制错误修复方法
GTID 复制错误修复方法
9567 0
|
安全 关系型数据库 MySQL
一文教你如何防御数据库渗透入侵
一文教你如何防御数据库渗透入侵
747 0
一文教你如何防御数据库渗透入侵
|
自然语言处理
如何使用ChatGPT写好简历?如何使用ChatGPT优化简历?21个写简历的ChatGPT的Prompts!
本文提供了一份详细的指南,教导求职者如何根据不同的工作描述和自身经验,创建和优化简历,包括专业摘要、技能强调、成就描述以及如何使简历内容更加突出和有针对性。
421 0
如何使用ChatGPT写好简历?如何使用ChatGPT优化简历?21个写简历的ChatGPT的Prompts!
|
设计模式 存储 缓存
微服务架构下的数据库设计策略
本文探讨了在微服务架构中进行数据库设计时,如何平衡数据的一致性、独立性与系统整体性能之间的关系。文章首先介绍了微服务架构的基本概念及其对数据库设计的影响,随后深入分析了三种主流的数据库设计模式——集中式、去中心化和混合模式,并结合实际案例讨论了它们的适用场景与优缺点。此外,还提出了一系列最佳实践建议,旨在帮助开发者更好地应对微服务环境下的数据管理挑战。