微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.6 TCC 模式原理

news2024/10/6 20:32:48

微服务框架

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】

分布式事务

文章目录

      • 微服务框架
      • 分布式事务
      • 38 动手实践
        • 38.6 TCC 模式原理
          • 38.6.1 TCC 模式原理
          • 38.6.2 举个栗子
          • 38.6.3 工作流程
          • 38.6.4 总结

38 动手实践

38.6 TCC 模式原理

38.6.1 TCC 模式原理

TCC模式与AT模式非常相似,每阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复。【虽然AT 模式是自动实现,但是AT 需要在第一阶段生成快照,第二阶段回滚时再进行恢复,这样也会影响性能】

需要实现三个方法:

  • Try:资源的检测和预留;
  • Confirm:完成资源操作业务;要求 Try 成功 Confirm 一定要能成功。
  • Cancel:预留资源释放,可以理解为try的反向操作。
38.6.2 举个栗子

举例,一个扣减用户余额的业务。假设账户A原来余额是100,需要余额扣减30元。

  1. 阶段一( Try【资源检测和预留】 ):检查余额是否充足,如果充足则冻结金额增加30元,可用余额扣除30

在这里插入图片描述

冻结金额 + 可用余额 = 总余额

  1. 阶段二:假如要提交(Confirm),则冻结金额扣减30

在这里插入图片描述

第二阶段仅仅操作的是 冻结金额

  1. 阶段二:如果要回滚(Cancel),则冻结金额扣减30,可用余额增加30

在这里插入图片描述

TCC 模式在完成了资源的预留后,后面都是对冻结金额进行操作【事务之间没有影响】

即TCC 模式不用加锁就实现了隔离

38.6.3 工作流程

在这里插入图片描述

依然是这三个 组成的模型

在这里插入图片描述

1.1 ~ 1.3 都是一样的,一开始都是TM 去开启并注册全局事务到TC 事务协调者,接着TM 去通知每一个RM 执行分支事务,RM 要先到TC 去注册一下分支事务

执行的时候:

1.4 第一阶段,资源预留try

在这里插入图片描述

完成后它 会直接进行提交,提交完之后向 TC 事务协调者报告事务状态

在这里插入图片描述

OK其实到这里,第一阶段就结束了

第二阶段开始

在这里插入图片描述

TM 会去告知TC 事务执行完了,该提交了

在这里插入图片描述

TC 就会去判断检查 分支事务的状态,看看这些分支的资源是否满足

在这里插入图片描述

如果够,那就直接进行提交操作

在这里插入图片描述

如果不够,则执行回滚操作【cancel】

【T 、C 、C 三段逻辑需要人工进行编写】

38.6.4 总结

TCC模式的每个阶段是做什么的?

  • Try:资源检查和预留
  • Confirm:业务执行和提交
  • Cancel:预留资源的释放

TCC的优点是什么?

  • 一阶段完成直接提交事务,释放数据库资源,性能好
  • 相比AT模型,无需生成快照,无需使用全局锁,性能最强
  • 不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库

TCC的缺点是什么?

  • 有代码侵入,需要人为编写try、Confirm和Cancel接口,太麻烦
  • 软状态,事务是最终一致
  • 需要考虑Confirm和Cancel的失败情况,做好幂等处理

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

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

相关文章

TensoRT—— buffers管理(samplesCommon::BufferManager)

BufferManager类处理主机和设备buffer分配和释放。 这个RAII类处理主机和设备buffer的分配和释放、主机和设备buffers之间的memcpy以帮助inference,以及debugging dumps以验证inference。BufferManager类用于简化buffer管理以及buffer和 engine之间的交互。 代码位…

web前端网页制作课作业:校园科技节活动网站 (纯HTML+CSS布局制作)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

cleanmymac x免费版安装包下载使用教程

我这台用了7年的MacBook Air ,硬盘容量只有 128G ,用段时间就会被系统提醒「您的磁盘几乎已满」,并且变得有点卡顿。这时,清理一下垃圾,腾出更多储存空间,就能让它满血复活。 这个时候我们可以用 CleanMyM…

Kafka系列之:使用kafka manager增加topic分区和副本

Kafka系列之:使用kafka manager增加topic分区和副本) 一、相关技术博客二、增加分区三、增加副本一、相关技术博客 Kafka系列之:实现kafka topic优先副本的选举Kafka系列之:使用Kafka Manager实现leader分区平衡和broker节点上分区平衡二、增加分区 增加分区: 增加完分区…

Adobe Acrobat 图标异常的解决办法

今天使用 Adobe Acrobat 打开文件阅读时,发现底部任务栏的图标是这样的,如下图所示。 这可不是常见的 Adobe Acrobat 图标,肯定是哪里出了问题,于是我在电脑开始这里找到 Adobe Acrobat 的快捷方式,其图标也是这样的&…

Android Binder 通信一次拷贝的原理

前言 对于 Android 开发者来说 Binder 应该不会陌生了,Binder 是 Android 提供的 IPC 通信机制,它是通过内存映射实现的,而这也是 Binder 相对于其他传统进程间通信方式的优点之一,即我们说的 Binder 只需要做“一次拷贝”&#…

基于springboot高校闲置物品交易系统微信小程序源码和论文

基于springboot二手物品交易系统微信小程序 互联网的兴起从本质上改变了整个社会的商品交易方式,国内各大企业从上个世纪 90 年代互联网兴起之时,就产生了通过网络进行销售经营商品的想法。但是由于在互网上企业的信誉难以认证、网络的法规政策不健全、物…

论文阅读|Embedding-based Retrieval in Facebook Search

该论文是facebook发表在KDD2020上的一篇关于搜索召回的paper。这篇文章提到的大多trick对于做过召回的同学比较熟悉了,可贵之处在于全面,包括了特征、样本、模型、全链路等各种细节知识。 1. 整体思路与框架 本文的出发点是搜索只做到query关键词匹配的…

电压放大器在农田灌溉管道缺陷检测研究中的应用

实验名称:电压放大器在农田灌溉管道缺陷检测研究中的应用 研究方向:管道检测、超声波检测 图:管道示意图 测试目的: 超声导波检测构件时,先激励导波使其在构件中传播,导波遇到构件中不连续处或有缺陷的地方…

Linux部署Tomcat和Nginx

目录一、Linux相关软件安装1. 安装gcc编译器2. 安装文件上传3. 安装wget4. 安装vim二、安装jdk和Apache-Tomcat1. 上传jdk和Apache-Tomcat2. 配置环境变量3. 测试(1)测试jdk(2)测试Apache-Tomcat三、安装Nginx1. 下载Nginx包2. 配…

哪路神仙写的421页MySQL高级笔记,涵盖MySQL所有技术!太香了

第2章MySQL权限与安全 对于企业而言,数据库中保存的企业业务数据是非常重要的信息,尤其是互联网企业,数据库中的用户信息是企业的根本资源。MySQL数据库管理系统的安全性涉及方方面面,不仅和操作系统本身有很大的关系,…

KD 树原理详解

一 点睛 KD 树(K-Dimension tree)是可以存储 K 维数据的树,是二叉搜索树的拓展,主要用于多维空间数据的搜索,例如范围搜索和最近邻搜索。BST、AVL、Treap 和伸展树等二叉搜索树的节点存储的都是一维信息,一…

上美股份在港交所开启招股:业绩将继续下滑,吕义雄提前大额套现

12月12日,上海上美化妆品股份有限公司(HK:02145,下称“上美股份”)在港交所开启招股。根据公告,上美股份本次拟全球发售3695.8万股,发售价将为每股发售股份25.20-29.80港元,预期将于2022年12月2…

基于二阶锥规划的主动配电网最优潮流求解(Matlab代码实现)

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭:行百里者,半于九十。 📋📋📋本文目录如下&#xff…

豪横卡塔尔!疯狂世界杯

豪横卡塔尔!疯狂世界杯1.Big Data -- Postgres1.1 Big Data -- Postgres2.Big Data -- Postgres3.Big Data -- Postgres1.Big Data – Postgres 这届世界杯是有史以来最贵的一次世界杯,因为这次世界杯卡塔尔就花了2200多亿美元,可以说自世界杯…

[附源码]Node.js计算机毕业设计电影网上购票系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

【Python金融量化】零基础如何开始学?

前言 Python可以说是当前非常流行的编程语言,甚至有点“网红”的感觉。网上还流行一句话“Life is short, I use Python”(人生短暂,我用Python)。Python是一种非常高级的动态编程语言(其表达更接近自然语言&#xff…

C++设计模式系列(二)工厂模式

文章目录一、什么是工厂二、 简单工厂模式UML类图简单工厂模式结构代码一、定义抽象产品类AbstractProduct二、定义具体产品类三、定义工厂类和工厂方法应用扩展一、扩展具体产品类二、扩展工厂类方法三、扩展应用优点缺点使用场合三、工厂方法模式UML类图工厂方法模式结构代码…

【车间调度】基于GA/PSO/SA/ACO/TS优化算法的车间调度比较(Matlab代码实现)

目录 1 概述 2 FJSP 描述 3 运行结果 3.1 main1运行结果 3.2 main2运行结果 4 参考文献 5 Matlab代码实现 1 概述 柔性作业车间调度问题(Flexible Job shop Sched-uling Problem , FJSP)是在离散制造业和流程工业中应用广泛的一类问题,已被证明是典型的 NP-上hard问题。…

【面试题】宏任务和微任务

1. 宏任务和微任务 宏任务(macroTask)和微任务(microTask)都是异步中API的分类。 宏任务:setTimeout,setInterval,Ajax,DOM事件微任务:Promise,async/await 微任务执行时机比宏任务要早。 console.log(1…