分布式协同 - 分布式事务_TCC解决方案

文章目录

  • 导图
  • Pre
  • 流程图
  • 2PC VS 3PC VS TCC
    • 2PC(Two-Phase Commit,二阶段提交)
    • 3PC(Three-Phase Commit,三阶段提交)
    • TCC(Try-Confirm-Cancel)
    • 2PC、3PC与TCC的区别
    • 2PC、3PC与TCC的联系

在这里插入图片描述

导图

在这里插入图片描述


Pre

随着大流量、高并发业务场景的出现,对系统可用性的要求变得越来越高,这时 CAP 理论和 BASE 理论逐渐进入人们的视野,柔性事务成为分布式事务的主要实现方式,TCC 作为补偿事务也位列其中.

TCC(Try-Confirm-Cancel)的核心思想是对于每个资源的原子操作,应用程序都需要注册一个与此操作对应的确认操作和补偿(撤销)操作。其中确认操作负责在原子操作执行成功时进行事务提交,补偿操作负责在原子操作执行失败时对事务进行回滚。


流程图

客户端 服务B(尝试阶段) 服务C(确认/取消阶段) 发起分布式事务请求 尝试锁定资源(预处理) 返回尝试成功(资源已锁定) 发起确认请求 执行提交操作(确认) 返回确认成功 执行回滚操作(取消) 返回取消失败信息 alt [确认成功] [确认失败] 客户端 服务B(尝试阶段) 服务C(确认/取消阶段)
  1. Try阶段(资源锁定)

    • 客户端(A)发起请求,通知服务B进行事务操作。
    • 服务B执行Try操作,尝试锁定资源(例如扣款或占用库存)。此时,服务B的资源被锁定,但尚未提交任何操作。
    • 服务B返回给客户端A,表示资源已锁定,并准备进入下一阶段。
  2. Confirm阶段(提交)

    • 客户端(A)根据其他服务的响应,决定是否进入Confirm阶段。
    • 服务C接收到确认请求后,执行Confirm操作,将之前的预处理结果提交(如真正扣款、更新库存等)。
    • 如果操作成功,服务C返回确认成功给客户端A,表示事务提交完成。
  3. Cancel阶段(回滚)

    • 如果在Try阶段发现某些条件未达成(例如余额不足,库存不足等),或者在Confirm阶段发生错误,客户端或服务将请求进入Cancel阶段。
    • 服务C会执行Cancel操作,回滚之前的操作(如退还款项或恢复库存)。
    • 服务C返回取消失败信息,客户端A可以根据返回结果进行相应的补救措施。

2PC VS 3PC VS TCC

2PC(Two-Phase Commit,二阶段提交)

2PC协议是分布式事务中最基础的协议,分为两个阶段:

  1. 准备阶段(Voting Phase):协调者(通常是事务管理器)向所有参与者发送“准备提交”请求,要求参与者执行事务操作并保留结果,但不提交数据,参与者需要返回“准备好”或“无法提交”的响应。

  2. 提交阶段(Commit Phase):如果所有参与者都返回“准备好”,则协调者发送“提交”请求,所有参与者正式提交操作。如果任何一个参与者返回“无法提交”,则协调者发送“回滚”请求,所有参与者回滚操作。

优点

  • 实现简单,易于理解。

缺点

  • 阻塞问题:如果协调者崩溃,参与者会一直等待协调者的决策,造成系统阻塞。
  • 单点故障:协调者是单点,若协调者失败,事务无法完成。
  • 资源占用:参与者需要长时间持有锁,直到事务提交或回滚。

3PC(Three-Phase Commit,三阶段提交)

3PC是在2PC基础上改进而来的,目的是解决2PC中的阻塞问题。它增加了一个额外的阶段来进行更细粒度的事务状态控制。

  1. 询问阶段(CanCommit Phase):协调者询问所有参与者是否可以执行事务,并预备提交。参与者在此阶段进行必要的预处理。

  2. 预提交阶段(PreCommit Phase):所有参与者确认可以提交后,协调者要求所有参与者进行预提交操作。此时,参与者已经做好提交操作的准备,但还没有真正提交。

  3. 提交阶段(DoCommit Phase):协调者正式通知所有参与者提交操作,事务正式完成。

优点

  • 改进了2PC的阻塞问题,因为3PC在协调者崩溃后参与者不会一直等待,可以通过预提交阶段保证一致性。

缺点

  • 实现复杂。
  • 仍然存在一定的网络分区和故障恢复问题。

TCC(Try-Confirm-Cancel)

TCC是分布式事务处理中较为复杂的一种方案,通常在资源管理和高一致性要求的场景下使用。它将分布式事务拆解为三个阶段:Try、Confirm和Cancel。

  1. Try(尝试):在此阶段,参与者执行尝试操作,如锁定资源,并确保幂等性。Try阶段完成后,系统处于“预提交”状态,但未真正提交数据。

  2. Confirm(确认):在所有操作都顺利完成时,协调者通知各参与者提交事务。此时所有操作都是最终的提交。

  3. Cancel(取消):如果某些操作失败,或者出现异常,协调者会通知参与者回滚操作,恢复到事务前的状态。

优点

  • 高度可控,支持显式的回滚。
  • 支持幂等性操作,能更好地处理异常场景。

缺点

  • 需要在每个参与者上实现Try、Confirm和Cancel逻辑,复杂度较高。
  • 性能和资源消耗较大,因为每个参与者都需要进行锁定和操作恢复。

2PC、3PC与TCC的区别

特性2PC3PCTCC
阶段2个阶段:准备、提交3个阶段:询问、预提交、提交3个阶段:尝试、确认、取消
阻塞问题存在,协调者崩溃时参与者会一直阻塞解决了部分阻塞问题,但不完全消除无阻塞问题,失败时有明确的回滚操作
容错能力较差,协调者故障会导致整个事务失败相较2PC,容错能力提高,但仍有不足较强,支持回滚,适合高度容错和一致性要求的场景
资源占用参与者需要长时间持有锁,资源占用较大参与者需要长时间持有锁,资源占用较大各参与者在不同阶段持有锁,资源占用较大
复杂度简单实现,但功能受限实现较复杂,增加了容错机制实现较复杂,需要业务逻辑支持
适用场景一致性要求较低的小型分布式系统对容错性有一定要求的分布式事务系统高一致性、高可用性要求的复杂场景,尤其是金融、库存管理等

2PC、3PC与TCC的联系

  • 相似性:这三种协议都属于分布式事务协议,目的是保证分布式系统中多个参与者的一致性和数据的可靠性。它们都涉及到协调者与参与者之间的交互,以及如何确保事务的一致性和成功提交。

  • 演化关系:2PC是最早的分布式事务协议,虽然实现简单,但存在阻塞和单点故障的问题。为了避免这些问题,3PC在2PC的基础上增加了一个预提交阶段,进一步解决了阻塞问题。而TCC则通过引入Try、Confirm和Cancel三个阶段,提供了更灵活的事务控制,适合于更复杂的分布式事务场景。

  • 应用场景重叠:这三种协议在一些场景中可以互相替代,例如金融系统的支付操作等高一致性场景。但在不同的系统需求下,选择的协议会有所不同。TCC特别适合对事务回滚有要求且资源操作可幂等的场景。

在这里插入图片描述

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

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

相关文章

新版国标GB28181设备端Android版EasyGBD支持国标GB28181-2022,支持语音对讲,支持位置上报,开源在Github

经过近3个月的迭代开发,新版本的国标GB28181设备端EasyGBD安卓Android版终于在昨天发布到Github了,最新的EasyGBD支持了国标GB28181-2022版,还支持了语音对讲、位置上报、本地录像等功能,比原有GB28181-2016版的EasyGBD更加高效、…

YOLO-World:Real-Time Open-Vocabulary Object Detection

目录 摘要 Abstract YOLO-World 1 模型架构 1.1 Text Encoder 1.2 YOLO Backbone 2 RepVL-PAN 2.1 T-CSPLayer 2.2 I-Pooling Attention 2.3 预测 3 消融实验 3.1 预训练数据 3.2 RepVL-PAN的消融实验 3.3 文本编码器 4 效果展示 4.1 零样本 4.2 根据词汇表检…

MySQL -- 库的相关操作

目录 查看数据库 创建数据库 直接创建: 加约束条件 if not exists 字符集和校对规则 什么是字符集 什么是校对规则 校对规则的主要功能 校对规则的特性 查看指定的数据库使用的字符集和校对规则: 比较是否区分大小写字母差异 显示创建语句 …

【spring-cloud-gateway总结】

文章目录 什么是gateway如何导入gateway依赖路由配置gateway配置断路器导包配置 什么是gateway 在微服务架构中,gateway网关是一个服务,它作为系统的唯一入口点,处理所有的客户端请求,然后将这些请求路由到适当的服务。提供了几个…

mac iterm2 使用 lrzsz

前言 mac os 终端不支持使用 rz sz 上传下载文件,本文提供解决方法。 mac 上安装 brew install lrzsz两个脚本 注意:/usr/local/bin/iterm2-send-zmodem.sh 中的 sz命令路径要和你mac 上 sz 命令路径一致。 /usr/local/bin/iterm2-recv-zmodem.sh 中…

数智化医院分布式计算框架融合人工智能方向初步实现与能力转换浅析

人工智能中心计算机 一、引言 1.1 研究背景与意义 近年来,人工智能(Artificial Intelligence,AI)与大数据技术的迅猛发展为医疗行业带来了前所未有的变革机遇。医疗领域积累了海量的数据,如电子病历(Elec…

airflow docker 安装

mkdir -p /root/airflow cd /root/airflow && mkdir -p ./dags ./logs ./plugins ./configcd /root/airflow/ wget https://airflow.apache.org/docs/apache-airflow/2.10.4/docker-compose.yaml nano docker-compose.yamlAIRFLOW__CORE__LOAD_EXAMPLES: false #初始化…

【数据安全】如何保证其安全

数据安全风险 数字经济时代,数据已成为重要的生产要素。智慧城市、智慧政务的建设,正以数据为核心,推动城市管理的智能化和公共服务的优化。然而,公共数据开放共享与隐私保护之间的矛盾日益凸显,如何在确保数据安全的…

springboot463学生信息管理系统论文(论文+源码)_kaic

摘 要 使用旧方法对学生信息管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在学生信息管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的学…

postman读取文件执行

要从文件获取的变量 text 在pre-request 中写从文件获取数据的脚本。脚本实现了,设置了text默认值,从文件读取text列,将text存入环境变量 //获取text参数 var text "济南天气"; if(data.text){ text data.text } pm.environment.…

我的个人博客正式上线了!

我的个人博客终于上线啦点此访问 经过一番折腾,我的个人博客终于上线啦!这是一个属于我自己的小天地,可以用来记录生活点滴、技术分享以及一些随想。 在这里,我想分享一下搭建博客的整个过程和心得体会。 为什么要搭建博客&…

摩尔信使MThings的逻辑控制功能范例

数值自增控制 数值自增/自减控制流程可广泛应用于生产线控制、工业机器人轨迹跟踪、输送带速度调整、空间环境模拟、炼油厂加热炉温度控制、啤酒和制药发酵过程控制、造纸机水分和基重控制以及多回路瞬态热流跟踪控制等多个领域,通过精确调整和优化关键参数&#xf…

高效处理PDF文件的终极工具:构建一个多功能PDF转换器

在日常工作中,处理PDF文件几乎是每个人都不可避免的任务。无论是从PDF中提取数据、合并多个PDF文件,还是处理文件中的敏感信息和图像,PDF文件的处理都可能成为繁琐且耗时的工作。如果你是数据分析师、工程师,或者从事文档管理的工…

ROS1入门教程3:自定义消息

一、新建项目 # 创建工作空间 mkdir -p demo3/src# 创建功能包 catkin_create_pkg demo roscpp rosmsg message_generation# 打开功能包 cd src/demo 二、创建自定义消息 # 创建消息目录 mkdir msg# 打开消息目录 cd msg# 创建消息文件 vim User.msg# 定义消息字段 string n…

《Java核心技术I》Swing的滑动条

滑动条 组合框在离散值中选择,滚动条从连续值中选择。 构造滑动条最常用方法:var slider new JSlider(min,max,initaValue); 如果忽略参数,最大值,最小值,初始值分别为0,100,50. 垂直滑动条,new JSlid…

STM32单片机使用CAN协议进行通信

CAN总线(控制器局域网总线) 理论知识 CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线 CAN总线特征 两根通信线(CAN_H、CAN_L),线路少,无需共地差分信号通信&…

基础爬虫案例实战

我们已经学习了多进程、requests、正则表达式的基本用法,但还没有完整地实现过一个爬取案例。这一节,我们就来实现一个完整的网站爬虫,把前面学习的知识点串联起来,同时加深对这些知识点的理解。 准备工作 我们需要先做好如下准备工作。 安…

网络安全防范

实践内容 学习总结 PDR,$$P^2$$DR安全模型。 防火墙(Firewall): 网络访问控制机制,布置在网际间通信的唯一通道上。 不足:无法防护内部威胁,无法阻止非网络传播形式的病毒,安全策略…

【QSS样式表 - ⑤】:QLineEdit控件样式

文章目录 QLineEdit控件样式QSS示例1 - select-QSS示例2 - read-onlyQSS示例3 - echoModeQSS示例4 - 自定义密码模式 QLineEdit控件样式 常用属性 常用选择器 QSS示例1 - select- 代码: QLineEdit{selection-color: red;selection-background-color: yellow…

ScottPlot学习的常用笔记-02

ScottPlot学习的常用笔记-02 写在前面Why&Target:这里记一些杂项。上下文&背景 先记一下这几个小时的新收获先说一下,为什么可开发可视工具缩放的问题ScottPlot5.0起步.net Core: WinExe.Net Framework也是可以的 写在前面 Why&Target&…