【分布式事务】分布式事务理论

news2024/12/23 3:13:11

CAP 理论

  • 一致性(Consistency)

    分布式系统中所有数据备份,在同一时刻是否是同样的值

  • 可用性(Availability)

    集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求

  • 分区容错性(Partition tolerance )

    大多数分布式系统都分布在多个子网络,每个子网络叫做一个区(partition)。分区容错是指区之间的通信可能失败

CAP 原则指的是这三个要素只能实现两点,不可能三者兼顾。在分布式系统中,一般来说分区容错性不可避免,所以 P 总是成立的,C 和 A 无法同时做到

如何实现一致性

raft 算法

Raft

paxos 算法

结论

对于多数大型互联网应用的场景,节点众多、部署分散,由于现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到 N 个 9(99.99..%),并要达到良好的响应性能来提高用户体验,因此一般都会做出如下选择:保证 P 和 A,舍弃 C 强一致,保证最终一致性

Base 理论

  • Basically Available(基本可用)

    基本可用是指分布式系统在出现故障的时候,允许损失部分可用性(例如响应时间、功能上的可用性),允许损失部分可用性。需要注意的是,基本可用绝不等价于系统不可用

    • 响应时间上的损失:正常情况下搜索引擎需要在 0.5 秒内返回给用户相应的查询结果,但由于出现故障(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了 1 ~ 2 秒

    • 功能上的损失:购物网站在购物高峰(如双十一)时,为了保护系统的稳定性,部分消费者可能会被引导到一个降级页面

  • Soft State(软状态)

    软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据会有多个副本,允许不同副本同步的延时就是软状态的体现。mysql replication 的异步复制也是一种体现

  • Eventual Consistency(最终一致性)

    最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况

    • 强一致性:更新过据后,所有节点立刻能看到更新后的数据

    • 弱一致性:更新过据后,能容忍部分节点看不到更新后的数据

    • 最终一致性:一段时间后,所有节点都能看到更新后的数据

分布式事务场景

  • 跨 JVM 进程:微服务之间通过远程调用完成事务操作。 比如电商系统中提交订单,订单微服务请求库存微服务扣减库存,请求会员微服务增加积分,在分布式系统中经常发生网络异常、机器宕机导致请求失败,如果库存服务扣减库存成功后宕机了,订单服务就会回滚,造成数据的不一致

  • 跨库:比如做了订单数据做了分库之后的更新操作,订单数据落在不同的库中,如果更新失败必须全部回滚

  • 跨数据库实例

分布式事务角色

  • TM(Transaction Manager):事务管理者。负责协调和管理事务,事务管理器控制着全局事务,管理事务生命周期,并协调各个 RM

  • RM(Resouce Manager):资源管理者。可以理解为事务的参与者,一般情况下是指一个数据库实例,控制着分支事务

  • TC(Tracnaction Coordinator):全局事务的协调者

分布式事务方案

2PC 模式

2PC 即两阶段提交协议,是将整个事务流程分为两个阶段:准备阶段(Prepare phase)和提交阶段(Commit phase)

2PC 是一种强一致性设计,它引入一个协调者来协调管理各参与者的提交和回滚

  • 准备阶段(Prepare phase)

    1. 协调者向所有参与者发送 prepare 消息,询问是否可以提交事务,并等待答复

    2. 每个事务参与者在本地执行事务,并写本地的 undo/redo 日志,此时事务没有提交

      undo 日志是记录修改前的数据,用于数据库回滚;redo 日志是记录修改后的数据,用于提交事务后写入数据文件

    3. 如参与者执行成功,给协调者反馈同意,否则反馈中止

    1596360577153

  • 提交阶段(Commit phase)

    1. 协调者节点向所有参与者节点发送 commit 消息,让各参与者正式提交

    2. 参与者节点完成提交,并释放在整个事务期间内占用的资源

    3. 参与者节点向协调者节点发送 ack 完成消息

    4. 协调者节点收到所有参与者节点反馈的 ack 完成消息后,完成事务

    1596376239082

XA 协议

XA 协议是 X/OPEN 提出的分布式事务处理规范,它规范了 TM 与 RM 之间的通信接口。部分关系数据库如 Oracle、MySQL 都支持 XA 协议

优缺点

优点:

  • 开发成本低:XA 协议比较简单,如果商业数据库实现了 XA 协议,使用分布式事务的成本比较低

缺点:

  • 性能问题:XA 协议性能差,类似交易下单链路并发量很高,无法支持高并发场景

  • 可靠性问题:在提交阶段协调者宕机,参与者会一直阻塞下去,需要额外的备机进行容错

  • 数据一致性问题:协调者向参与者发送 commit 消息之后,发生了局部网络异常或者协调者宕机了,导致只有一部分参与者接收到了 commit 消息,其他部分未接收到 commit 消息的参与者则无法执行事务提交,于是整个分布式系统便出现了数据不一致

3PC 模式

  • 相比 2PC 模式,准备阶段进一步拆分了准备阶段和预提交阶段

  • RM 引入了超时机制

柔性事务-TCC 事务补偿

TCC(Try Confirm Cancel) 方案是一种应用层面侵入业务的两阶段提交,可以理解为手动的 2PC。其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿操作

  • Try 阶段

    • 完成所有业务检查

    • 预留必须的业务资源

    • 尝试执行业务

  • Confirm/Cancel 阶段

    • Confirm 和 Cancel 操作满足幂等性,如果 Confirm 或 Cancel 操作执行失败,将会不断重试直到执行完成

    • Try 阶段全部服务执行成功,进入 Confirm 阶段,执行确认业务逻辑操作

    • Try 阶段存在服务执行失败, 进入 Cancel 阶段,执行业务补偿操作

tcc

优缺点

优点:

  • 性能提升:相比与 XA 协议,具体业务来实现控制资源,锁的粒度变小,性能更高

  • 数据最终一致性:基于重试机制和 Confirm/Cancel 操作的幂等性,保证事务最终完成确认或者取消,保证数据的最终一致性

  • 可靠性:解决了 XA 协议的协调者单点故障问题,

缺点:

  • 业务侵入性高,开发成本高

最大努力通知

可靠消息

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

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

相关文章

【机器学习 复习】第5章 朴素贝叶斯分类器

一、概念 1.贝叶斯定理: (1)就是“某个特征”属于“某种东西”的概率,公式就是最下面那个公式。 2.朴素贝叶斯算法概述 (1)是为数不多的基于概率论的分类算法,即通过考虑特征概率来预测分类。 …

数字化转型中的数据资产价值发现之旅:通过深度挖掘与分析,释放数据资产的巨大潜力,为企业开拓更多商业机会,引领业务创新与发展

一、引言 随着信息技术的飞速发展,数字化转型已成为企业不可逆转的趋势。在这一转型过程中,数据资产作为核心驱动力,正逐渐展现出其巨大的商业价值。然而,如何有效挖掘和利用这些数据资产,将其转化为实际的生产力和创…

高位图像的增强处理 DR图像等

输入16位图像 经过增强算法处理后的输出:

vscode使用内置插件断点调试vue2项目

1、首先项目中要开启source-map 在vue.config.js 文件中 module.exports {configureWebpack: {devtool: process.env.NODE_ENV ! "production" ? "source-map" : ,} }2、项目根目录新建.vscode/launch.js文件 {"configurations": [{"ty…

五、在Qt下加载QVTKWidget控件(VTK8.2.0),生成Visual Studio项目,显示点云(C++)

前言:因为项目需要通过Qt进行显示点云,参考了很多博文,但是并没有全部正确的,东拼西凑算是实现了,花费了两天时间,时间有点久,能力还有有待提升~~ 为此写篇博文记录一下。感谢各位大佬&#xff…

Windows C++ 应用软件开发从入门到精通详解

目录 1、引言 2、IDE 开发环境介绍 2.1、Visual Studio 2.2、Qt Creator 3、 C语言特性 3.1、熟悉泛型编程 3.2、了解C/C异常处理 3.3、熟练使用STL容器 3.4、熟悉C11新特性 4、Windows 平台的编程技术与调试技能 4.1、需要掌握的若干编程技术和基础知识 4.2、需…

java文件处理

重命名文件-旧file.renameTo(新file) import java.io.File; /*** 文件重命名-ffmpeg合并文件时不允许覆盖原文件,所以合并时,修改源文件名,合并后文件名为源文件名** param fileName* return*/public String RenameFi…

Power Apps

目录 一、引言1、Power Apps2、应用场景3、Power Apps的优势与前景4、补充 二、数据源介绍1、SharePoint2、Excel3、Dataverse4、SQL5、补充(1)OneDrive 三、Power Apps应用类型1、画布应用2、模型驱动应用3、网站 Power Pages 四、Power Automate五、Po…

【Nginx】Nginx安装及简单使用

https://www.bilibili.com/video/BV1F5411J7vK https://www.kuangstudy.com/bbs/1353634800149213186 https://stonecoding.net/system/nginx/nginx.html https://blog.csdn.net/qq_40492693/article/details/124453090 Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器。其特…

黄历工具网/万年历/财神方位/日历/佛历/道历/24节气/PHP网站源码

黄历工具网/万年历/财神方位/日历/佛历/道历/24节气/PHP网站源码 演示地址: https://hl.caohongji.com/ 手机端地址: https://mhl.caohongji.com/ 客服: kkmp326 源码说明: 1、系统内的黄历宜忌、农历、日历、佛历、道…

Linux命令重温

目录 Linux安装基础命令lsllcdpwdmkdirrmdirtouchcpmvrmvi/vim>和>>catheadlessmoretailechoclearwhich 进阶命令其他命令 Linux安装 通过vmware设置模拟硬件环境安装centos系统进行相应的网络配置安装xshell bin 存放二进制可执行文件(ls,cat,mkdir等) boot 存放用…

【计划】软件项目总体计划书(项目必备资料合集原件)

项目开发计划包括项目描述、项目组织、成本预算、人力资源估算、设备资源计划、沟通计划、采购计划、风险计划、项目过程定义及项目的进度安排和里程碑、质量计划、数据管理计划、度量和分析计划、监控计划和培训计划等。 软件全套精华资料包清单部分文件列表: 工作…

力扣爆刷第153天之TOP100五连刷26-30(接雨水、环形链表、最长上升子序列)

力扣爆刷第153天之TOP100五连刷26-30(接雨水、环形链表、最长上升子序列) 文章目录 力扣爆刷第153天之TOP100五连刷26-30(接雨水、环形链表、最长上升子序列)一、300. 最长递增子序列二、415. 字符串相加三、143. 重排链表四、42.…

【C++庖丁解牛】函数栈帧的创建与销毁

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. 寄存器2. ebp和esp是如…

【前端】[vue3] [uni-app] 组件样式击穿:deep

我是在开发uni-app时测试的思路,大家可以借鉴一下。 我这边测试的是uni组件,但是我觉得即便你用element-plus之类的,样式击穿的思路都相同。 我自定义了一个全局样式scss文件,并引入到了项目中。(如图) 利用vue3 中的 deep 方式…

2024届应届生突破1179万人,如何瞄准AI行业,获得高薪职业前景

应届生如何开启AI行业的职业生涯? ©作者|Zhongmei 来源|神州问学 引言 人工智能和数据科学几乎可以在任何产生数据的场合中发挥作用,因为它们开辟了一种全新的范式——让机器能够从数据中提炼出知识。自2011年人工智能走出实验室的门槛&#xff0c…

Sapphire开发日志 (十一) 登陆注册功能

任务介绍 本周实现登陆注册功能。 由于本项目主要关注在数据集的相关操作,所以对于用户的登录注册验证没有必要采取完整的一套手机号(邮箱)验证机制,简单的实现一个注册和登录功能即可。 背景效果 首先展示效果 整体背景页面和…

【事件总线】EventBus

文章目录 概述如何使用如何发布消息如何进行消息监听 来源 概述 事件总线是对发布-订阅模式(观察者)的一种实现,是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。 …

喜讯:ISO年度审核通过!

在数字化时代,质量是我们不变的追求。近日,矩阵起源迎来了一个值得庆祝的时刻——三项ISO体系年度考核顺利通过!分别为:ISO9001 质量管理体系标准认证、ISO20000信息技术服务管理体系认证及ISO27001 信息安全管理体系认证。 ISO标…

摘苹果-第13届蓝桥杯省赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第88讲。 摘苹果&#xff0…