分布式系统一致性模式揭秘

news2024/11/15 13:35:03

分布式系统将数据复制到多个服务器上,以获得更好的容错性、可扩展性和可靠性。一致性模式(一致性模型)是一组用于在分布式系统中进行数据存储和数据管理的技术。一致性模式决定了数据在分布式系统中的传播。因此,一致性模式将影响分布式系统的可扩展性和可靠性。

在分布式系统中有许多一致性模式。选择哪种一致性模式取决于系统的需求和使用案例,因为每种一致性模式都有其优点和缺点。一致性模式必须是多数据中心系统架构的核心,因为在多个数据中心之间维护一致性并不是一个简单的任务。一致性模式可以大致分为以下几类:

  • 强一致性

  • 最终一致性

  • 弱一致性

对于重视高可用性和性能而不是一致性的分布式系统,最终一致性模型是最佳选择。当需要在分布式系统中无延迟地查看相同的数据视图时,强一致性是最佳的一致性模型。总的来说,每种一致性模型都适用于不同的使用案例和系统要求。

更多技术干货请关注公号【云原生数据库】

强一致性 

在强一致性模式中,对任何服务器执行的读操作必须始终检索包含在最新写操作中的数据。强一致性模式通常在多个服务器之间同步复制数据。换句话说,当在服务器上执行写操作时,其他每个服务器上的后续读操作必须返回最新写入的数据。

强一致性的好处如下:

  • 简化应用程序逻辑。 

  • 增加数据持久性。 

  • 保证系统各处的一致数据视图。 

强一致性的局限性如下:

  • 服务的可用性降低。 

  • 延迟增加。 

  • 资源密集型。 

图片

强一致性

为了在数据复制中达到强一致性,工作流程如下:

  1. 服务器(客户端)对主数据库实例执行写操作。 

  2. 主实例将写入的数据传播到副本实例。 

  3. 副本实例向主实例发送确认信号。 

  4. 主实例向客户端发送确认信号。 

强一致性模型的典型用例如下:

  • 文件系统。 

  • 关系数据库。 

  • 如银行等金融服务。 

  • 半分布式共识协议,如两阶段提交(2PC)。 

  • 完全分布式共识协议,如Paxos。 

例如,用户的银行账户余额的任何变化都必须立即复制以提高持久性和可靠性。Google的Bigtable和Google的Spanner数据库是强一致性的实际应用。

最终一致性 

在最终一致性模式中,当对服务器执行写操作时,对其他服务器执行的立即后续读操作不一定返回最新写入的数据。系统最终会收敛到相同的状态,其他服务器在后续的读操作中会返回最新的数据。最终一致性模式通常在多个服务器之间异步复制数据。用通俗的话说,任何数据更改只会最终在系统中传播,预期在数据收敛发生之前都会出现旧的数据视图。

最终一致性可以通过多主或无主复制拓扑实现。

系统通常在几秒钟内收敛到相同的状态,但时间框架取决于实现和系统要求。最终一致性模式的好处如下:

  • 简单。 

  • 高可用性。 

  • 可扩展。 

  • 低延迟。 

最终一致性的缺点如下:

  • 较弱的一致性模型。 

  • 潜在的数据丢失。 

  • 潜在的数据冲突。 

  • 数据不一致。

图片

最终一致性 

为了在数据复制中实现最终一致性,工作流程如下:

  1. 客户端对主数据库实例执行写操作。

  2. 主实例向客户端发送确认信号。

  3. 主实例最终将写入的数据传播到副本实例。

最终一致性模式是数据过时性和可扩展性之间的权衡。最终一致性的典型用例如下:

  • 搜索引擎索引。

  • URL缩短器。

  • 域名服务器(DNS)。

  • 简单邮件传输协议(SMTP)。

  • 例如Amazon S3的对象存储。

  • 例如Facebook上的评论或帖子。

  • 分布式通信协议,如流言协议。

  • 领导者-跟随者和多领导者复制。

  • 分布式计数器和实时评论服务。

例如,域名记录的任何更改都会被DNS最终复制。如Amazon Dynamo和Apache Cassandra的分布式数据库是最终一致性模式的实际应用。最终一致性不是设计缺陷,而是为满足某些使用案例而提供的功能。业务所有者应确定应用数据是否适合最终一致性模式。

弱一致性 

在弱一致性模式中,当对服务器执行写操作时,对其他服务器执行的后续读操作可能返回或不返回最新写入的数据。换句话说,执行了最大努力的数据传播 - 数据可能不会立即传播。在可以返回最新写入的数据之前,分布式系统必须满足各种条件,如时间的流逝。

弱一致性的优点如下:

  • 高可用性。

  • 低延迟。

弱一致性的缺点如下:

  • 可能的数据丢失。

  • 数据不一致。

  • 数据冲突。

弱一致性

写后缓存(写回)模式是弱一致性的一个例子。如果缓存在将数据传播到数据库之前崩溃,则数据将丢失。写后缓存模式的工作流程如下:

  1. 客户端对缓存服务器执行写操作。

  2. 缓存将接收到的数据写入消息队列。

  3. 缓存向客户端发送确认信号。

  4. 事件处理器异步将数据写入数据库。

弱一致性的常见用例如下:

  • 实时多人视频游戏。

  • 互联网电话协议 (VoIP)。

  • 实时流。

  • 缓存服务器。

  • 数据备份。

例如,由于网络连接差导致的直播流中的丢失的视频帧不会重新传输。

一致性模式的权衡 

与每种一致性模式相关的权衡可以概述如下:

布式系统中的其他一致性模型 

分布式仲裁可以用来实现各种一致性模式。仲裁参数的配置决定了将实现的一致性模式。

线性化 

在线性化模式中,写入服务器的数据必须立即可见(在写操作的开始和结束之间)给其他服务器的后续读操作。线性化是强一致性的一个变体,也被称为原子一致性。以下技术可用于实现线性化:

  • 单一领导者同时处理读和写操作。

  • 分布式共识算法如Paxos。

  • 分布式仲裁。

线性化的优点如下:

  • 使分布式系统表现得像非分布式系统。

  • 应用程序使用简单。

线性化的缺点如下:

  • 性能下降。

  • 有限的可扩展性。

  • 可用性降低。

线性化模式的一个流行用例是在分布式系统中实现用户ID字段的唯一性约束。

因果一致性 

在因果一致性模式中,其他服务器准确地观察到相关的事件(因果关系),而与其他服务器无关的事件可能没有特定的顺序被观察到。因果一致性是最终一致性的一个变体,并在最终一致性和强一致性之间出现为中间地带。在实时并行发生的因果无关的写操作被称为并发事件。因果一致性模式不保证并发事件的顺序。

因果一致性模式中的因果关系可以通过向量时钟来实现。因果一致性的好处如下:

  • 低延迟。

  • 降低同步成本。

  • 高可用性。

  • 相对更强的一致性。

因果一致性模式的广泛用例如下:

  • Apache Cassandra提供带有因果一致性的轻量级事务。

  • Bayou分布式数据库中的数据传播。

  • Reddit上的评论线程。

例如,在Reddit上对同一评论线程的回复必须因果有序。但是,无关的评论线程可以按任何顺序显示。因果一致性模式也用于例如Slack的实时聊天服务。

总结 

在同一个分布式系统的不同部分可以使用多种一致性模式。在选择合适的一致性模式时,没有银弹,只有权衡。一致性模式的最佳选择取决于特定的用例和要求。

Squids DBMotion,专业的数据库迁移、同步、校验工具~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/973367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMvc框架入门使用(详细教程)

目录 ​编辑 1.SpringMVC框架是什么? 2.SpringMVC工作流程 3.SpringMVC的入门 3.1 pom.xml 3.2spring-mvc.xml 3.3web.xml 3.4 建立一个web的方法 4.5 建立一个首页 4.6效果展示 4.图片处理 1.SpringMVC框架是什么? Spring MVC是一个基…

POI基于Excel模板导出数据

1、基于模板导出列表数据 1.1、需求 注意:使用附件的形式下载,前端访问必须通过window.open(),否则附件可能无法下载。 按照以下样式导出excel 1.2、思路 首先准备一个excel模板,这个模板把复杂的样式和固定的内容先准备好并且放入到项…

2023年了,java后端还有未来吗?

前言 Java当下确实是比较的内卷,但关键在于个人,可以看看不同地方(这里主要举例北上广深一线城市)对于Java开发工程师这个职位的具体要求: 在以下北上广深这些一线大城市的面试招聘当中不难看出,凡是工资…

搭建HTTPS服务器

HTTPS代理服务器的作用与价值 HTTPS代理服务器可以帮助我们实现网络流量的转发和加密,提高网络安全性和隐私保护。本文将指导您从零开始搭建自己的HTTPS代理服务器,让您更自由、安全地访问互联网。 1. 准备工作:选择服务器与操作系统 a. 选…

SpringMVC框架@RequestMapping用法,处理器方法参数接收,处理器方法返回值详解

1. RequestMapping 定义请求规则 1.1 指定模块名称 通过RequestMapping 注解可以定义处理器对于请求的映射规则。该注解可以注解在方 法上,也可以注解在类上,但意义是不同的。value 属性值常以“/”开始。RequestMapping 的 value 属性用于定义所匹配请…

麒麟信安参展第二十五届中国国际软件博览会,荣膺2022-2023年度优秀创新软件产品奖

8月31日至9月2日,第二十五届中国国际软件博览会(以下简称:软博会)在天津梅江会展中心举办。软博会是我国软件和信息技术服务领域规模最大、持续时间最长、最具影响力的专业盛会,由中国电子信息行业联合会、天津市工业和…

Medium: Where to Define Qualified users in A/B testing?

1. Common AB Testing Setup Issue (Framework) 局限性: unqualified users will also be considered and mess up experimentation results.

国产光刻机或已量产,ASML立即抛弃美国,中国芯片迈上新台阶

国产5G手机的推出,预示着国产的先进光刻机已投产,恰在此时ASML突然转变态度,表示已获得荷兰的许可,将对中国出售更先进的2000i光刻机,反过来印证着中国先进光刻机已成功量产。 这几年ASML的态度可谓多变,早…

数据库管理系统(DBMS)的事务四大特性(ACID)以及事务的四种隔离级别

一、什么是ACID? ACID是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability) 的缩写,是在可靠数据库管理系统(DBMS&…

苹果微信聊天记录删除了怎么恢复?果粉原来是这样恢复的

粗心大意删除了微信聊天记录?有时候,一些小伙伴可能只是想要删除一部分聊天记录,但是在进行批量删除时,不小心勾选到了很重要的对话,从而导致记录丢失。 如果这时想找回聊天记录该怎么办?微信聊天记录删除…

185页智慧校园顶层架构及建设方案 WORD

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除,更多浏览公众号:智慧方案文库。目录 一、 项目概述 1.1 建设背景 1.2 建设现状 1.3 总体目标 二、 总体规划设计 2.1 智慧校园网系统 2.1.…

Python程序设计基础:异常

文章目录 一、异常的类型二、异常的处理过程 一、异常的类型 在使用Python进行程序编写时,很容易就遇到程序出错的情况,可能是引用了未定义的变量,也可能是访问了字典中不存在的键,还可能是读文件时,只读模式下读取了…

【Sentinel】降级源码:插槽DegradeSlot与断路器的实现

文章目录 1、实现原理2、DegradeSlot类3、CircuitBreaker4、触发断路器 1、实现原理 Sentinel的降级是基于状态机来实现的: 2、DegradeSlot类 熔断降级的逻辑在DegradeSlot类中实现,核心API: Override public void entry(Context context,…

数字化企业可能会用到哪些系统?

数字企业依靠各种软件系统来驱动其运营、增强客户体验并实现其业务目标。这些系统可能会根据企业、行业的性质和具体目标的不同而有很大差异。以下是数字化企业使用的一些常见的软件系统类型: 1.企业资源规划 (ERP) 系统: ERP 系统集成了财务、人力资源…

【Dots之009】WriteGroup

一、WriteGroup基础知识 WriteGroup是一个属性标签,在ECS的代码中可以用于修饰组件; 格式如下: [WriteGroup(typeof(T))]那么接下来看几段代码进行理解; 1、定义几个组件 struct ScaleComponentData : IComponentData {publi…

日流量200亿,携程网关的架构设计

说在前面 在40岁老架构师 尼恩的读者社区(50)中,很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 就在昨天,尼恩指导一个小伙伴简历,写了一个《高并发 Netty网关项目》,此项目帮这个小伙拿到 字…

电脑c盘变红满了怎么清理?4个方法轻松清理!

“我的电脑才用了不到一年,现在就已经满了!电脑c盘变红满了应该怎么清理呢?有什么方法能帮我清理的干净一点吗?希望大家给我出出主意。” 随着我们使用电脑时间的增多,电脑C盘可能会变得满满当当,这会不仅会…

失效的访问控制及漏洞复现

失效的访问控制(越权) 1. 失效的访问控制(越权) 1.1 OWASP TOP10 1.1.1 A5:2017-Broken Access Control 未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其…

高速信号应如何走线?这些规则千万别走错

提起高速信号的设计与布线,可能很多工程师都能头头是道,但放在实际设计中却大部分不可行,这篇文章将向电子工程师介绍一些关键规则,确保在电路板上传输高速信号时获得最佳性能,注意这些规则千万别走错! 1、…

Java后端开发面试题——JVM虚拟机篇

目录 什么是程序计数器? 你能给我详细的介绍Java堆吗? 什么是虚拟机栈 1. 垃圾回收是否涉及栈内存? 2. 栈内存分配越大越好吗? 3. 方法内的局部变量是否线程安全? 4.什么情况下会导致栈内存溢出? 5.堆栈的区别…