分布式事务(四)——TCC补偿模式解决方案

news2025/2/4 22:36:11

系列目录:

  • 《分布式事务(一)—— 事务的基本概念》

  • 《分布式事务(二)—— CAP和Base理论》

  • 《分布式事务(三)—— 两阶段提交解决方案(2PC)》

一、常见分布式事务解决方案

  • 两阶段提交(2PC,Two-phase Commit)
  • TCC补偿模式
  • 基于本地消息表实现最终一致性
  • 基于可靠消息最终一致方案
  • 最大努力通知

二、TCC补偿模式解决方案

  TCC是(Try Confirm Cancel)的缩写,每个单词代表了事务处理的不同阶段。其主要的思想是放弃了数据库事务的commit和rollback的方法,转而用状态的逻辑来区分不同的阶段,简单来说,就是把原来的一个业务处理的方法,拆分成三个方法,即try、confirm、和concel三个方法,在实际调用的过程中,首先调用try方法,看各个业务能否执行成功,如果都能成功,那就用confirm来确定,如果不能成功,就用cancel来取消。
  看上去,Tcc好像和2PC有点像,但是在本质上有很大的区别,2PC是利用数据库事务来实现的,而TCC是利用数据的中间状态来实现的,比如在库存扣减的业务中,在数据库设计的时候,一般会增加一个freeze字段来区分商品的冻结的库存,在try的过程中,只是将freeze的数值增加,将库存冻结,在confirm的过程中,才会真正的降低库存,在cancel中会将冻结的数值返回去。达到数据的一致性。总体来说,TCC在业务数据上做状态的标志,没有使用数据库的事务,和2PC有本质的区别。

TCC的设计图如下:
在这里插入图片描述

1、落地TCC事务的不同阶段:Try - Confirm - Cancel

  • TCC事务的实现阶段一:Try
    在这个阶段中,主业务流程处理后,会调用从业务流程的Try方法来执行相关的业务,将数据执行到中间状态。

  • TCC事务的实现阶段二:Confirm
    所有的业务都ok的话,调用Confirm方法确认事务。

  • TCC事务的实现阶段三:Cancel
    如果有服务执行没有成功,则调用Cancel来取消

2、TCC事务的使用总结

    1. 首先需要选择某种TCC分布式事务框架,各个服务力就会有这个TCC分布式事务框架在运行
    1. 然后你原本的一个接口,需要改造成3个逻辑: Try-Confirm-Cancel
    • 先是服务调用链路依次执行Try逻辑
    • 如果都正常的话,TCC分布式事务框架推进执行Confirm逻辑,完成整个事务
    • 如果某个服务的Try逻辑有问题,TCC分布式事务框架感知到之后会推进执行各个服务的Cancel逻辑,插销之前执行的各个操作

TCC分布式事务的核心思想,就是在遇到服务器宕机,依赖的资源不可用的情况下,利用一下的操作来保证事务的最终一致性:

  • 先来Try一下,不要把业务逻辑完成,先试试,看各个服务能不能正常运转,能不能先冻结需要的资源。
  • 如果Try都ok,也就是说,底层的依赖的资源都ok,那就执行Confirm逻辑,真正的实现业务。
  • 如果Try失败了,就调用Cancel逻辑来回滚。

3、TCC事务遇到意外情况的终极解决方案

  如果遇到一些意外的情况,比如服务突然宕机,TCC事务框架如何才能保证之前没有执行完的分布式事务继续执行呢?
其解决方法如下:

  • TCC事务框架都要记录一些分布式事务的活动日志,可以在磁盘上的日志文件里面记录,也可以在数据库里面记录,保存下来分布式事务运行的各个阶段的状态。
  • 万一某个服务的Cancel或者Confirm逻辑执行一直失败,TCC事务框架会通过活动日志记录各个服务的状态,然后通过重试的方法,来实现最终的执行成功,如果多次以后还是没有,可以采取发邮件等方式来通知人员处理。
  • 常用的TCC框架,seata、go-seata

4、TCC的优缺点

优点

  • 解决了跨服务的业务操作原子性问题,例如组合支付,订单扣减库存等场景
  • TCC的本质原理是把数据库的二阶段提交上升到微服务来实现,从而避免了数据库锁冲突的问题。
  • TCC异步性能高,它采用了try先检查,然后异步实现confirm,真正提交的是在confirm方法中,可以实现最终一致。

缺点

  • 对微服务的侵入性强,微服务的每个事物都必须实现Try,Confirm,Cancel等3个方法,开发成本高,后期维护改造的成本也高
  • 为了达到事务的一致性要求,try,confirm,cancel接口必须实现幂等性操作。
  • 由于事务管理器要记录事务日志,必定会消耗一定的性能,并使的整个TCC事务时间拉长,建议采取redis来记录日志。

后记
  个人总结,欢迎转载、评论、批评指正

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

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

相关文章

某航空网站promise异步定位js逆向解析

本次目标地址如下,使用base64解码获得 aHR0cHM6Ly9pbnQtZXQueGlhbWVuYWlyLmNvbS9mbGlnaHRzL3Jlc3VsdHM 打开网址,抓包分析后,发现响应结果在该请求中: 我们跟栈进去查找,从右边的堆栈调用过程中发现,这是典…

App ICP备案获取iOS和Android的公钥和证书指纹

依照《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,向iOS和安卓平台提交App时需要先提交ICP备案信息。 iOS平台: 1、下载appuploader工具:Appuploader home -- A tool improve ios develop efficiency such as submit ipa to…

Docker 集群配置

1、配置 MySQL MySQL 简单安装 docker安装完MySQL并run出容器后,建议请先修改完字符集编码后再新建mysql库-表-插数据 docker run -d -p 2222:3306 --privilegedtrue -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/va…

通过18次止损,我终于领悟到交易的真谛

截断亏损让利润奔跑,这是操作的基础,也是操作的大体思路。了解并接受这个市场认识,基本上就把握住了市场的门道。至于市场走势,是无法准确预测的。 在交易的第一年,我处于一种懵懂的状态,对市场知之甚少。第…

2024美赛数学建模A题思路分析 - 资源可用性和性别比例

# 1 赛题 问题A:资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外,但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1:1,但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…

【以太网】VSC8512XJG-03、VSC8512XJG-02、VSC8514XMK-14、VSC8514XMK-11千兆以太网(GE)PHY

一、VSC8512 12 Port GbE Cu PHY with 4 Dual Media ports[12端口GBE Cu PHY,带4个双介质端口] 概述 VSC8512采用单一封装的12端口千兆以太网(GE)铜线PHY解决方案。VSC8512采用了Microchip最新的65纳米Simpliphy™技术,是业界最具…

猫什么时候发腮?猫咪发腮指南!这些生骨肉冻干发腮效果好

猫什么时候发腮是许多猫主人非常关心的问题。在猫咪的成长过程中,发腮是一项重要的体征,也是猫咪成熟的标志。主人需要在适龄的年龄段加强营养补给,可以让让猫咪拥有可爱的肉嘟嘟脸型,不要错失最佳发腮期。那么,什么时…

第八篇:node模版引擎Handlebars及他的高级用法(动态参数)

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! ​ 目录 📘 引言: &#x1f…

OpenCV学习记录——边缘检测

文章目录 前言一、边缘检测原理二、Canny边缘检测算法三、具体应用代码 前言 在做某些图像处理时,通常需要将识别到的物体边界提取出来,从而帮助我们实现目标检测,这就需要用到边缘检测,例如人脸识别和运动目标的检测都需要先进行…

Flutter 应用服务:主题、暗黑、国际化、本地化 - app_service库

Flutter应用服务 主题、暗黑、国际化、本地化 app_service库 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/det…

Nginx 多项目部署,vue刷新404 解决方案

网上找的资料大多都解决不了,废话不多说直接告诉你解决方法。 环境是 TP6 VUE前端官网 VUE 后台管理 部署 两个项目 刷新 404 解决方案 Nginx 配置 直接贴图 如果解决了,给我顶起来,让更多人 快速的解决。

Arduino 推出基于乐鑫 ESP32-S3 的 STEM 教育机器人

Arduino Alvik 是 Arduino Education 推出的一款新型机器人,可作为一种跨学科工具,为当前教育和未来机器人世界筑起连接的桥梁。Hackster 的 Gareth Halfacree 表示:“Alvik 的设计灵感来自 Arduino 简化复杂技术的理念,同时它也 …

上海市事业编报名照不能成功上传的原因

2024年上海市事业编报名照需要根据以下要求生成: 1、近期6个月,免冠证件照。 2、照片背景白底或者蓝底或者红底背景。 3、照片文件jpg格式,大小在100KB以下 4、照片像素大小,宽度75至150像素内,高度为105至210像素内 5…

gRPC - Google远程过程调用(Google Remote Procedure Call,gRPC)

什么是gRPC? Google远程过程调用(Google Remote Procedure Call,gRPC)是基于HTTP 2.0传输层协议承载的高性能开源RPC软件框架,为管理和配置网络设备提供了一种API接口设计的方法。gRPC提供了多种编程语言,如…

Linux之系统安全与应用续章

目录 一. PAM认证 1.2 初识PAM 1.2.1 PAM及其作用 1.2.2 PAM认证原理 1.2.3 PAM认证的构成 1.2.4 PAM 认证类型 1.2.5 PAM 控制类型 二. limit 三. GRUB加密 /etc/grub.d目录 四. 暴力破解密码 五. 网络扫描--NMAP 六. 总结 一. PAM认证 1.2 初识PAM PAM是Linux系…

软件工程知识梳理4-详细设计

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说.经过这个阶段的设计工作.应该得出对目标系统的精确描述.从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 详细设计的的目标不仅仅是逻辑上正确地实现每个模块地功能&a…

查询、导入导出、统计性能优化的一些总结

目录 1、背景 2、优化实现 2.1查询数据表速度慢 2.2调别人接口速度慢 2.3导入速度慢、 2.4导出速度慢的做出介绍 2.5统计功能速度慢 3、总结 1、背景 系统上线后,被用户反应系统很多功能响应时长很慢。用户页面影响速度有要求,下面针对查询数据表…

红队打靶练习:INFOSEC PREP: OSCP

目录 信息收集 1、arp 2、nmap WEB 信息收集 wpscan dirsearch ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 ho…

“与客户,共昂首”——Anzo Capital昂首资本尽释行业进取之姿

“以匠心,铸不凡” 活动的现场,Anzo Capital 作为演讲嘉宾分享“以匠心,铸不凡”的产品理念。Anzo Capital积淀九载,匠心打造出“STP”和“ECN”两大核心账户,以光之速度将交易中的订单直达市场和流动性提供商&#…

江科大stm32学习笔记10——对射式红外传感器

一、接线 上电之后可以看到对射式红外传感器亮两个灯,如果此时用挡光片挡住两个黑色方块中间的部分,则只亮一个灯。 二、代码 将4-1的工程文件夹复制粘贴一份,重命名为“5-1 对射式红外传感器计次”,打开keil,右键添…