分布式一致性理论

分布式一致性理论

1.数据库事务ACID理论

为保证事务正确可靠而必须具备的四个核心特性。这四个特性分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。下面我将对这四个特性进行详细介绍:

  • 原子性(Atomicity)

    含义:事务被视为一个不可分割的工作单位,事务中的所有操作要么全部完成,要么全部不完成,即“all-or-nothing”原则。
    实现:如果在事务执行过程中发生错误或故障,则整个事务会被回滚(Rollback)到事务开始前的状态,就像这个事务从未执行过一样。
    示例:银行转账时,从A账户扣款和向B账户存款这两个操作要么同时成功,要么同时失败,以确保资金的正确流转。

  • 一致性(Consistency)
    含义:事务必须使数据库从一个一致性状态转变到另一个一致性状态。即事务的执行不会破坏数据库的完整性约束。
    实现:事务开始之前和事务结束之后,数据库的完整性没有被破坏。写入的资料必须完全符合所有的预设规则,包括数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
    示例:假设有一个完整性约束a+b=10,如果事务改变了a的值,那么b的值也必须相应改变,以确保事务结束后依然满足a+b=10。

  • 隔离性(Isolation)
    含义:多个事务并发执行时,一个事务的执行不应影响其他事务。即每个事务都在自己的“世界”中执行,无法看到其他并发事务的中间状态。
    实现:事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。这些级别提供了不同程度的事务隔离,以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
    示例:在A账户向B账户转账的过程中,B账户在事务完成前无法看到新增加的金额。

  • 持久性(Durability)
    含义:一旦事务提交,它对数据库的修改就是永久性的,即使系统发生故障也不会丢失。
    实现:事务处理结束后,对数据的修改会被永久地保存在数据库中,不会因系统故障或重启而丢失。
    示例:如果银行转账成功并提交,即使此时数据库宕机,重启后依然能够看到转账成功后的结果。

2.本地事务和分布式事务

事务简单来说:一个会话中所进行所有的操作,要么同时成功,要么同时失败。
事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。
事务

分布式事务指的是事务操作跨越多个节点,并且要求满足事务的 ACID 特性。

分布式事务相比于单机事务,实现复杂度要高很多,主要是因为其存在以下难点:

  • 事务的原子性:事务操作跨不同节点,当多个节点某一节点操作失败时,需要保证多节点操作的都做或都不做(All or Nothing)的原子性。
  • 事务的一致性:当发生网络传输故障或者节点故障,节点间数据复制通道中断,在进行事务操作时需要保证数据一致性,保证事务的任何操作都不会使得数据违反数据库定义的约束、触发器等规则。
  • 事务的隔离性:事务隔离性的本质就是如何正确多个并发事务的处理的读写冲突和写写冲突,因为在分布式事务控制中,可能会出现提交不同步的现象,这个时候就有可能出现“部分已经提交”的事务。此时并发应用访问数据如果没有加以控制,有可能出现“脏读”问题。

在分布式领域,要实现强一致性,代价非常高昂。因此,有人基于 CAP 理论以及 BASE 理论,有人就提出了柔性事务的概念。柔性事务是指:在不影响系统整体可用性的情况下(Basically Available 基本可用),允许系统存在数据不一致的中间状态(Soft State 软状态),在经过数据同步的延时之后,最终数据能够达到一致。并不是完全放弃了 ACID,而是通过放宽一致性要求,借助本地事务来实现最终分布式事务一致性的同时也保证系统的吞吐。

3.CAP 理论

CAP理论指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)和Partition Tolerance(分区容错性)这三个特性无法同时满足,只能满足其中的两个。

三个特性解释:

  • 一致性(Consistency):
    定义:一致性是指在一个分布式系统中,多个节点之间的数据是始终保持一致的。也就是说,当一个节点修改了数据后,其他节点能够立即看到这个修改。
    重要性:一致性保证了分布式系统中数据的正确性和完整性。
  • 可用性(Availability):
    定义:可用性是指系统能够在任意时刻提供正确的响应,即系统一直处于可用的状态。
    重要性:可用性保证了用户能够随时随地访问分布式系统,并获得有效的响应。
  • 分区容错性(Partition Tolerance):
    定义:分区容错性是指分布式系统中的网络可能会发生故障或分区的情况,但系统仍能够继续工作。
    重要性:分区容错性是为了应对网络故障或分区产生的情况,保证整个分布式系统的稳定性和可靠性。

重点说说一致性
在一致性的条件下,分布式系统在执行写操作成功后,如果所有用户都能够读取到最新的值,该系统就被认为具有强一致性。

数据一致性又可以分为以下几点:

  • 强一致性 - 数据更新操作结果和操作响应总是一致的,即操作响应通知更新失败,那么数据一定没有被更新,而不是处于不确定状态。
  • 最终一致性 - 即物理存储的数据可能是不一致的,终端用户访问到的数据可能也是不一致的,但系统经过一段时间的自我修复和修正,数据最终会达到一致。
    CAP

3.BASE 理论

BASE 定理是对 CAP 中一致性和可用性权衡的结果。

3.1 BASE思想

BASE 是 基本可用(Basically Available)、软状态(Soft State) 和 最终一致性(Eventually Consistent) 三个短语的缩写。
BASE 理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

  • 基本可用(Basically Available)分布式系统在出现故障的时候,保证核心可用,允许损失部分可用性。例如,电商在做促销时,为了保证购物系统的稳定性,部分消费者可能会被引导到一个降级的页面。
  • 软状态(Soft State)指允许系统中的数据存在中间状态,并认为该中间状态不会影响系统整体可用性,即允许系统不同节点的数据副本之间进行同步的过程存在延时。
  • 最终一致性(Eventually Consistent)强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能达到一致的状态。

3.2 BASE和ACID的比较

BASE 的理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

ACID 要求强一致性,通常运用在传统的数据库系统上。而 BASE 要求最终一致性,通过牺牲强一致性来达到可用性,通常运用在大型分布式系统中。
BASE和ACID比较

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python报错】已解决TypeError: can only concatenate str (not “int“) to str

解决Python报错:TypeError: can only concatenate str (not “int”) to str 在Python中,字符串连接是常见的操作,但如果你尝试将整数(int)与字符串(str)直接连接,会遇到TypeError: …

【机器学习基础】Python编程08:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

四十四、openlayers官网示例Geographic Coordinates解析——在地图上添加弹窗,点击显示图形信息

使用Overlay在地图上添加弹窗,点击控制显隐。 初始化图层的时候,添加一个矢量的点数据到地图上,在new Feature时添加一些自定义属性。 const place [-110, 45];const point new Point(place);const map new Map({target: "map"…

应用层——HTTP协议(自己实现一个http协议)——客户端(浏览器)的请求做反序列化和请求分析,然后创建http向响应结构

应用层:之前我们写的创建套接字,发送数据,序列化反序列化这些都是在写应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层 之前的网络计算机是我们自定义的协议:传输的数据最终是什么样的结…

概率论与数理统计,重要知识点——全部公式总结

二、一维随机变量及其分布 五个分布参考另外一篇文章 四、随机变量的数字特征 大数定理以及中心极限定理 六、数理统计

基于SpringBoot+Vue单位考勤系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

【SkyWalking】使用PostgreSQL做存储K8s部署

拉取镜像 docker pull apache/skywalking-ui:10.0.1 docker tag apache/skywalking-ui:10.0.1 xxx/xxx/skywalking-ui:10.0.1 docker push xxx/xxx/skywalking-ui:10.0.1docker pull apache/skywalking-oap-server:10.0.1 docker tag apache/skywalking-oap-server:10.0.1 xxx…

K-BAT01,K-CU01和利时卡件

K-BAT01,K-CU01和利时卡件。现场控制站下装与在线调试。9二、组态流程:操作站组态控制站组态新建工程控制站用户组态历史站组态下装现场控制站下装历史站下装操作员站10三、组态详解:1、K-BAT01,K-CU01和利时卡件。新建工程:打开工程总控&…

SAP HCM HR_PAD_HIRE_EMPLOYEE 自定义信息类型字段保存问题

导读 INTRODUCTION SAP HCM入职程序:SAP HCM入职程序有两个一个是HR_PAD_HIRE_EMPLOYEE一个是HR_MAINTAIN_MASTERDATA,前面的函数是SAP为新框架开发的,后面函数是旧的逻辑,这两个函数的在于底层的结构不一致,对于自定…

Three.js——粒子效果、粒子水波、粒子组成立方体

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

Linux卸载RocketMQ教程【带图文命令巨详细】

巨详细Linux卸载RocketMQ教程 #查询rocketmq进程 ps -ef | grep rocketmq #杀掉相关进程 kill -9 进程id #查找安装目录 find / -name runbroker.sh #删除rocketMQ目录 rm -rf 安装目录框起来的就是进程id,全部杀掉 这里就是我的安装目录,我的删除命令…

【进程调度的基本过程】初步认识进程和线程的区别与联系:计算机是如何工作的

​ 🔥个人主页: 中草药 🔥专栏:【Java】登神长阶 史诗般的Java成神之路 🐺一.冯诺依曼体系结构 认识计算机的祖师爷 -- 冯诺依曼 冯诺依曼(John von Neumann,1903年12⽉28⽇-1957年2⽉8⽇&…

北航第四次数据结构与程序设计编程题复习

到期末了,所以再来复习一下以前的作业。 北航第四次数据结构与程序设计编程题 一、栈操作(栈-基本题)二、C程序括号匹配检查三、计算器(表达式计算-后缀表达式实现,结果为浮点)四、文本编辑操作模拟&#…

Flutter 使用ffigen生成ffmpeg的dart接口

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频 第六章 桌面端使用texture_rgba_renderer渲染视频 第七章 使用ff…

数据挖掘--引论

数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析:基本概念和方法 1.2什么是数据挖掘 数据挖掘是从大量数据…

【Python】成功解决SyntaxError: invalid syntax

【Python】成功解决SyntaxError: invalid syntax 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕&am…

QT Udp广播实现设备发现

测试环境 本文选用pc1作为客户端,pc2,以及一台虚拟机作为服务端。 pc1,pc2(客户端): 虚拟机(服务端): 客户端 原理:客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网…

使用MATLAB的BP神经网络进行数据分类任务(简单版)

BP神经网络,即反向传播(Backpropagation)神经网络,是一种多层前馈神经网络,它通过反向传播算法来更新网络权重。这种网络结构特别适合于分类和回归任务。 MATLAB环境设置 在开始之前,请确保MATLAB环境已经…

smbmap一键查扫描SMB共享信息(KALI工具系列十八)

目录 1、KALI LINUX 简介 2、smbmap工具简介 3、在KALI中使用smbmap 3.1 目标主机IP(win) 3.2 KALI的IP 4、操作示例 4.1 寻找共享目录 4.2 指定目标主机 4.3 指定共享目录 4.4 带密码访问 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功…

LeetCode 7- 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [-231, 231 - 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入&…