浅析分布式系统中的 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 的差别

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

目录
相关文章
|
3月前
|
安全 Linux API
Codex CLI接入DeepSeek终极指南:CC Switch本地路由配置与协议转换详解
在AI开发与代码生成场景中,Codex CLI凭借强大的命令行交互与代码执行能力,成为开发者高效编码的核心工具。但原生Codex CLI仅支持OpenAI Responses API协议,而DeepSeek等主流第三方模型普遍采用OpenAI Chat Completions API,二者协议不兼容导致无法直接接入。CC Switch作为跨平台本地路由与协议转换工具,可在本机搭建代理层,自动完成两种协议的双向转换,让Codex CLI无需修改核心代码,即可无缝对接DeepSeek、Kimi、MiniMax等第三方模型。
2185 1
|
机器学习/深度学习
YOLOv8改进 | 损失函数篇 | 更加聚焦的边界框损失Focaler-IoU、InnerFocalerIoU(二次创新)
YOLOv8改进 | 损失函数篇 | 更加聚焦的边界框损失Focaler-IoU、InnerFocalerIoU(二次创新)
1910 0
|
安全 关系型数据库 MySQL
一文教你如何防御数据库渗透入侵
一文教你如何防御数据库渗透入侵
962 0
一文教你如何防御数据库渗透入侵
|
缓存 JSON API
淘宝API调用秘籍:手把手教你上手
本文详解淘宝API调用方法,从基础概念到实战应用,助开发者快速上手。涵盖API概述、调用前准备(注册账号、创建应用、申请权限)、调用流程(生成签名、构建请求、解析响应)及实战示例(获取商品详情、商品搜索)。同时提供优化建议,如控制请求频率、错误处理与数据缓存策略,确保应用稳定高效。适合电商开发者参考学习。
|
人工智能 NoSQL Docker
1分钟极速生成简历表单,AI与Flash Table实战让你领先一步
Flash Table是一款高效低代码平台,专为简化复杂表单开发而设计。它通过可视化拖拽、AI智能生成、数据整合及多系统对接等功能,显著提升开发效率与交互体验,助力企业快速实现数字化升级。
|
机器学习/深度学习 人工智能 编解码
【AI系统】Transformer 模型小型化
本文介绍了几种轻量级的 Transformer 模型,旨在解决传统 Transformer 参数庞大、计算资源消耗大的问题。主要包括 **MobileVit** 和 **MobileFormer** 系列,以及 **EfficientFormer**。MobileVit 通过结合 CNN 和 Transformer 的优势,实现了轻量级视觉模型,特别适合移动设备。MobileFormer 则通过并行结构融合了 MobileNet 和 Transformer,增强了模型的局部和全局表达能力。
1488 8
【AI系统】Transformer 模型小型化
|
存储 资源调度 云计算
什么是云计算平台?如何打造云平台核心要件?
云计算平台基于虚拟化和分布式计算技术,提供灵活、可扩展的计算资源与服务框架,支持跨地域的数据处理和应用运行。它通过集中管理资源、优化分配,提高系统可用性和响应速度,降低运营成本,增强用户体验。平台分为IaaS、PaaS和SaaS三层架构,具备动态资源调度、多租户隔离和服务可靠性等优势。构建要素包括基础框架设计、关键技术组件及运维支撑体系,确保高效、安全的云服务交付。
2780 3
|
消息中间件 监控 数据可视化
【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例
influxDB的官网下载地址 https://portal.influxdata.com/downloads/打开以后,如下图所示,可以选择版本号,以及平台。此处咱们选择windows平台。不过此处没有实际的可以下载的地方,着实比较过分,不过咱们可以另辟蹊径。
3288 0
【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例
|
自然语言处理
如何使用ChatGPT写好简历?如何使用ChatGPT优化简历?21个写简历的ChatGPT的Prompts!
本文提供了一份详细的指南,教导求职者如何根据不同的工作描述和自身经验,创建和优化简历,包括专业摘要、技能强调、成就描述以及如何使简历内容更加突出和有针对性。
654 0
如何使用ChatGPT写好简历?如何使用ChatGPT优化简历?21个写简历的ChatGPT的Prompts!
|
Java API 开发工具
如何通过淘宝商品详情接口实现商品 SKU、优惠价、价格等参数的实时更新?
要合法获取淘宝商品详情数据,首先需通过淘宝开放平台注册开发者账号并获得App Key与App Secret。接着根据业务需求申请对应的商品详情数据接口权限,并通过官方文档了解接口详情。获取访问令牌后,按照文档构建请求URL并附加必要参数及令牌以调用接口。此外,考虑使用淘宝提供的SDK简化开发流程,如Python SDK等。体验API:b.mrw.so/2Pv6Qu。
1036 2

热门文章

最新文章