分布式:保证分布式事务的一致性

文章目录

      • 保证分布式事务的一致性
        • XA协议
        • 两阶段提交
        • TCC模式
        • SAGA模式

本篇开始进行分布式的学习,由于时间原因,我也没有过多时间深入学习,因此打算在有时间就进行这块内容的学习,学习的切入点也是从一些问题开始进行切入学习吧

保证分布式事务的一致性

XA协议

XA协议(eXtended Architecture)是一种用于分布式事务处理的标准协议,旨在确保多个资源管理器(如数据库、消息队列等)之间的事务一致性。它提供了一种机制,使得在分布式环境中可以同时提交或回滚多个资源上的事务操作,从而保证了分布式事务的原子性、一致性、隔离性和持久性(ACID特性)。

XA协议由X/Open组织(现已并入The Open Group)制定,并得到广泛支持和应用。在XA协议中,通常包含以下几个关键角色:

  1. 事务管理器(Transaction Manager, TM):负责协调和管理分布式事务的提交和回滚。它是全局的调度者,与所有参与者(即资源管理器)进行通信,确保事务的一致性和完整性。

  2. 资源管理器(Resource Manager, RM):负责管理资源,如数据库、消息队列等。在XA协议中,资源管理器需要实现XA接口,以便与事务管理器进行交互。

  3. 应用程序(Application Program, AP):负责执行具体的业务逻辑,并通过事务管理器与资源管理器进行交互,以完成分布式事务。

XA协议的工作流程大致可以分为两个阶段:

  1. 准备阶段(Prepare Phase)

    • 事务管理器向所有资源管理器发送准备请求,询问它们是否可以提交事务。
    • 资源管理器执行事务操作,并记录必要的恢复信息(如撤销日志或重做日志),以便在需要时能够回滚事务。
    • 如果资源管理器确定能够提交事务,则向事务管理器发送准备成功(Prepared)的响应;如果无法提交,则发送准备失败(Abort)的响应。
  2. 提交阶段(Commit Phase)

    • 如果所有资源管理器都准备成功,事务管理器会向所有资源管理器发送提交请求。
    • 资源管理器收到提交请求后,执行事务的提交操作,并释放事务执行期间占用的资源。
    • 如果在准备阶段有资源管理器准备失败,或者在提交阶段事务管理器没有收到所有资源管理器的成功响应,则事务管理器会指示所有已经准备好提交的资源管理器进行回滚。

XA协议通过这两个阶段的协调,确保了分布式事务的一致性和可靠性。然而,它也存在一些局限性,如单点故障(事务管理器是关键节点)、阻塞问题(在准备阶段需要等待所有资源管理器的响应)等。因此,在实际应用中,需要根据具体场景和需求来选择合适的事务处理方案。


两阶段提交
  • MySQL的两阶段提交:你提到的MySQL在复制过程中使用的两阶段提交,主要目的是为了保持主从数据的一致性。在prepare阶段,主服务器将事务写入redo log并通知从服务器开始应用binlog。在commit阶段,当主服务器确认从服务器已接收到binlog并开始应用(或者至少已经记录了binlog的接收)后,主服务器才会提交事务,并通知从服务器事务已提交。

  • 分布式事务的两阶段提交(2PC):在分布式系统中,两阶段提交(2PC)是确保跨多个资源管理器(如数据库、消息队列等)的事务一致性的标准协议。它确实包括preparecommit(或abort)两个阶段。如果在prepare阶段任何参与者失败,则协调者会发送abort消息给所有参与者,回滚事务。

  • 三阶段提交:三阶段提交(3PC)是在两阶段提交的基础上增加了一个pre-commit阶段,主要用于解决在preparecommit之间可能出现的网络分区问题,以及减少不必要的资源锁定时间。然而,3PC并未被广泛采用,因为它引入了额外的复杂性和可能的性能问题。

XA协议定义了分布式事务处理的接口和规则,而两阶段提交协议则是这些规则在具体实现时采用的一种机制。这种关系使得XA协议能够灵活地应用于不同的分布式事务处理场景,并确保事务的一致性和可靠性。


TCC模式

TCC模式是一种分布式事务处理模式,它将事务的提交过程分为三个阶段:Try、Confirm和Cancel。这三个阶段并不直接对应于三阶段提交(3PC)的canCommit、preCommit和commit/abort阶段,而是有着不同的职责和目的。

  • Try阶段:在这个阶段,事务的发起方会尝试锁定或预留所需的资源。这并不意味着事务已经被提交,而只是确保在后续阶段能够成功执行事务。如果Try阶段成功,系统会认为事务有很大可能成功完成;如果失败,则会进入Cancel阶段。
  • Confirm阶段:在Try阶段成功后,Confirm阶段会实际执行事务操作并提交数据。由于Try阶段已经确保了资源的可用性,因此Confirm阶段通常不会失败(除非发生系统级故障)。Confirm阶段完成后,事务即被视为成功提交。
  • Cancel阶段:如果Try阶段失败或Confirm阶段由于某种原因未能成功执行,则会进入Cancel阶段。在这个阶段,系统会释放Try阶段预留的资源,并回滚已执行的操作,以确保系统状态的一致性。

TCC模式的优点包括不需要数据库支持XA协议、性能好、锁粒度小等。然而,它也需要业务代码的支持,实现起来相对复杂,且需要处理幂等性、空回滚、防悬挂等问题。


SAGA模式

SAGA模式是一种用于处理分布式事务的长事务解决方案。与TCC模式不同,SAGA模式通过一系列本地事务和补偿操作来确保全局事务的一致性。

  • 基本概念:在SAGA模式中,一个全局事务被分解为一系列本地事务(也称为子事务或SAGA步骤)。每个本地事务都有对应的补偿操作,用于在本地事务失败时恢复系统状态。
  • 执行流程:全局事务的执行从第一个本地事务开始。如果当前本地事务成功,则继续执行下一个本地事务;如果失败,则执行当前本地事务的补偿操作,并尝试回滚之前的所有成功本地事务及其补偿操作(这通常是一个递归过程)。
  • 优点:SAGA模式允许系统以更灵活的方式处理分布式事务,特别是在涉及多个服务且服务之间可能存在复杂依赖关系的场景中。此外,它不需要所有服务都同时在线或支持XA协议。
  • 缺点:SAGA模式的实现相对复杂,需要仔细设计每个本地事务及其补偿操作,以确保在失败情况下能够正确恢复系统状态。此外,由于它依赖于补偿操作来恢复系统状态,因此在某些情况下可能会产生额外的性能开销和复杂性。

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

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

相关文章

2024年铜川宜君半程马拉松,暴晒+爬坡152安全完赛

1、赛事背景 2024年7月21日,我参加了2024年铜川宜君半程马拉松赛,7月举办的赛事很少,全国都算温度比较高的,虽然宜君是一个山城,还是会担心气温会高。 临开赛1、2周,陕西区域降水比较多,赛前一…

【算法专题】双指针算法之LCR 179. 查找总价格为目标值的两个商品(力扣)

欢迎来到 CILMY23的博客 🏆本篇主题为:双指针算法之LCR 179. 查找总价格为目标值的两个商品(力扣) 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法…

使用nginx解决本地环境访问线上接口跨域问题

前言 前端项目开发过程中,经常会遇到各种各样的跨域问题。 虽然大部分时候,由脚手架自带的proxy功能即可解决问题,如webpack,vite等;但是若没有通过脚手架搭建项目,或者必须使用某些特殊规则转发时&#…

了解光耦合器从基础到应用

光耦合器也称为光电耦合器,是一种利用光信号传递电信号的电子元器件。它广泛应用于各种电子设备和电路中,因其在隔离电气信号、提高抗干扰能力方面的独特优势,备受工程师们的青睐。本文将为光耦爱好者和高级工程师提供一份有关光耦合器的知识…

解锁人工智能学习中的数学密钥

一、启航:奠定数学基础 1. 线性代数:AI的入门语言 学习目标:掌握向量、矩阵的基本概念及运算,理解线性空间、线性变换及特征值、特征向量的意义。学习建议:从基础教材入手,如《线性代数及其应用》&#x…

企业级视频拍摄与编辑SDK的全面解决方案

视频已成为企业传播信息、展示品牌、连接用户的重要桥梁,如何高效、专业地制作高质量视频内容,成为众多企业面临的共同挑战。美摄科技,作为视音频技术领域的创新先锋,以其强大的视频拍摄与编辑SDK,为企业量身打造了一站…

Sip for Mac:强大的屏幕取色软件

Sip for Mac是一款功能强大的屏幕取色工具软件,专为设计师、开发者和创作者打造。这款软件以其精准的取色功能和丰富的颜色管理选项而备受好评。 Sip的核心功能是提供多种取色工具,包括拾色器、取色板和屏幕取色等,使用户能够轻松地从屏幕上…

分享几种电商平台商品数据的批量自动抓取方式

在当今数字化时代,电商平台作为商品交易的重要渠道,其数据对于商家、市场分析师及数据科学家来说具有极高的价值。批量自动抓取电商平台商品数据成为提升业务效率、优化市场策略的重要手段。本文将详细介绍几种主流的电商平台商品数据批量自动抓取方式&a…

带哨兵位的双向循环链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 带哨兵位的双向循环链表 一、双向循环链表二、带哨兵位的的双向循环链表结构?2 双向循环链表接口函数的实现2.1 用于调试打印链表的接口函数2.2 双向循环链表的初…

【C++指南】类和对象(下)

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注

探索贝塞尔曲线:计算机图形学中的关键技术

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 贝塞尔曲线是计算机图形学和设计领域中的重要工具。它们由皮埃尔贝塞…

Linux 查找命令

目录 1. 查看二进制文件 which 2. 查看指定文件 find ​2.1 文件名查找 2.2 文件大小查找 前面学习过的 Linux 命令,其实质是一个个的二进制可执行程序,与 Windows 系统中的 .exe 文件是一个意思。 1. 查看二进制文件 which 语法: w…

Origin制作线性拟合回归图

选中数据,点下方散点图 调整散点颜色 在分析中打开线性拟合回归 添加文本 显示上轴

【NPU 系列专栏 1.1 -- NPU TOPS 算力的计算方式】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NPU 算力MAC 阵列简介MAC 阵列特点 MAC 阵列的结构MAC 阵列架构示例 MAC 阵列计算举例示例计算 TOPS 计算方法 NPU 算力 OpenCV 算法会消耗很大一部分自动驾驶芯片的算力,在车上堆摄像头的同时也需要堆TOPS&#xf…

卷积神经网络(二)-AlexNet

前言: AlexNet是2012年ImageNet竞赛冠军(以领先第二名10%的准确率夺得冠军)获得者Hinton和他的学生Alex Krizhevsky设计的,在ILSVRC-2010测试集上取得了top-1错误率37.5%,top-5错误率17.0%(优于第二名的16.4%),明显优…

【微信小程序实战教程】之微信小程序 WXS 语法详解

WXS语法 WXS是微信小程序的一套脚本语言,其特性包括:模块、变量、注释、运算符、语句、数据类型、基础类库等。在本章我们主要介绍WXS语言的特性与基本用法,以及 WXS 与 JavaScript 之间的不同之处。 1 WXS介绍 在微信小程序中&#xff0c…

LeetCode 637, 67, 399

文章目录 637. 二叉树的层平均值题目链接标签思路代码 67. 二进制求和题目链接标签思路代码 399. 除法求值题目链接标签思路导入value 属性find() 方法union() 方法query() 方法 代码 637. 二叉树的层平均值 题目链接 637. 二叉树的层平均值 标签 树 深度优先搜索 广度优先…

四、GD32 MCU 常见外设介绍(9)9.FWDG 模块介绍

9.1.FWDG 简介 本章我们主要分析独立看门狗(FWDG)的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即FWDGTRSTF。如果…

基于深度学习算法,支持再学习功能,不断提升系统精准度的智慧地产开源了。

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。通过计算机视觉和…