浅析分布式系统中的 Linearizability

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介:

在分布式系统里,出于可靠性(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 的差别

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

目录
相关文章
|
UED
在钉钉宜搭中,要实现单选关联选项设置与图文展示的关联
【10月更文挑战第5天】本文通过具体案例介绍如何在钉钉宜搭中实现单选字段与其他字段的联动功能。以旅行社旅游线路报名表单为例,详细说明了创建单选字段、图文展示字段及设置联动逻辑的具体步骤。通过简单的配置,实现了用户选择目的地后自动展示相关信息的效果,提升了用户体验和数据录入准确性。适用于希望通过低代码平台优化工作流程的企业。
731 6
|
JavaScript 前端开发 UED
JS:如何获取浏览器窗口尺寸?
JS:如何获取浏览器窗口尺寸?
501 1
|
存储 负载均衡 NoSQL
一文让你搞懂 zookeeper
一文让你搞懂 zookeeper
18520 16
|
10月前
|
人工智能 数据可视化 数据处理
《人工智能可视化:数据洞察的新窗口》
在数字化时代,数据爆炸式增长带来巨大挑战。人工智能可视化技术应运而生,通过动态图表和智能选择最佳展示方式,突破传统静态图表的局限,深入挖掘数据潜在关系,如电商商品关联分析。它支持实时交互与反馈,助力金融等领域即时决策,并增强企业决策支持,以直观形式呈现市场趋势和预测结果,提升数据处理效率,挖掘潜在价值,推动各行业发展。
280 18
|
自然语言处理
如何使用ChatGPT写好简历?如何使用ChatGPT优化简历?21个写简历的ChatGPT的Prompts!
本文提供了一份详细的指南,教导求职者如何根据不同的工作描述和自身经验,创建和优化简历,包括专业摘要、技能强调、成就描述以及如何使简历内容更加突出和有针对性。
333 0
如何使用ChatGPT写好简历?如何使用ChatGPT优化简历?21个写简历的ChatGPT的Prompts!
|
关系型数据库 MySQL 数据库
MySQL GTID 主从复制错误修复方法
GTID 复制错误修复方法
9455 0
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
71119 5
详解HTTP四种请求:POST、GET、DELETE、PUT
Electron——node_modules\ffi-napi\build\Release\ffi_bindings.node is not a valid Win32 application.
Electron——node_modules\ffi-napi\build\Release\ffi_bindings.node is not a valid Win32 application.
215 0
|
消息中间件 测试技术 领域建模
DDD - 一文读懂DDD领域驱动设计
DDD - 一文读懂DDD领域驱动设计
43941 6

热门文章

最新文章

下一篇
oss云网关配置