TCC事务解决方案
适用场景:
适用于具有强隔离性,严格一致性要求,也适用执行时间比较短的业务。
方案优缺点
优点:
1)在应用层实现具体逻辑,锁定资源的粒度小,不会锁定所有资源,性能比较高
2)Confirm阶段和Cancel阶段的方法具备幂等性,能够保证分布式执行完的数据一致性。
3)TCC分布式事务解决方案由主业务发起,无论主业务还是分支事务都能部署为集群模式,解决XA规范的单点故障
缺点:
代码需要耦合到业务中,每个分支都需要拆分为Try,Confirm和Cancel
存在问题:
1.空回滚问题
原因:分支事务所在的服务器宕机或者网络原因等,分支事务调用失败,没有执行Try阶段方法。当恢复调用,TcC执行回滚操作,如果Cancel无法处理,就会出现回滚问题。
解决:创建一个全局事务记录,并生成一个全局唯一的事务ID,另外创建分支事务记录,记录分支事务执行状态。
2.幂等问题
原因:由于网络等原因,导致分支事务调用失败,Tcc引入重试机制,可能导致数据一致性问题。
解决:在分支事务记录中增加事务的执行状态,每次执行分支事务,查询confirm和Cancel阶段的执行状态,判断是否执行。
3.悬挂问题
原因:在调用分支事务的时候,RPC调用超时重试,事务管理器通知对应资源管理器经回滚事务,但是事务回滚后,请求到达执行Try阶段方法,导致资源无法释放。
解决:创建分支事务记录,查询如果执行过Confirm或Cancel就不在执行。
TCC事务解决方案的更多相关文章
- 分布式事务解决方案汇总:2PC、3PC、消息中间件、TCC、状态机+重试+幂等(转)
数据一致性问题非常多样,下面举一些常见例子.比如在更新数据的时候,先更新了数据库,后更新了缓存,一旦缓存更新失败,此时数据库和缓存数据会不一致.反过来,如果先更新缓存,再更新数据库,一旦缓存更新成功, ...
- 分布式事务专题笔记(三)分布式事务解决方案之TCC(三阶段提交)
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.什么是TCC事务 TCC是Try.Confifirm.Cancel三个词语的缩写,TCC要求每个分支 ...
- 阿里开源分布式事务解决方案 Fescar
微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并 ...
- 阿里微服务架构下分布式事务解决方案-GTS
虽然微服务现在如火如荼,但对其实践其实仍处于初级阶段.即使互联网巨头的实践也大多是试验层面,鲜有核心业务系统微服务化的案例.GTS是目前业界第一款,也是唯一的一款通用的解决微服务分布式事务问题的中间件 ...
- 分布式事务解决方案FESCAR
项目地址:FESCAR 以下是官网的文档.简介2019年,Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题. 1. ...
- 阿里分布式事务解决方案-GTS
摘要: 本文将深入和大家探讨微服务架构下,分布式事务的各种解决方案,并重点为大家解读阿里巴巴提出的分布式事务解决方案----GTS.该方案中提到的GTS是全新一代解决微服务问题的分布式事务互联网中间件 ...
- 微服务架构下分布式事务解决方案——阿里GTS
1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,很多互联网行业巨头.开源社区等都开始了微服务 ...
- 来了!阿里开源分布式事务解决方案 Fescar
摘要: 阿里妹导读:广为人知的阿里分布式事务解决方案:GTS(Global Transaction Service),已正式推出开源版本,取名为“Fescar”,希望帮助业界解决微服务架构下的分布式事 ...
- 微服务架构下分布式事务解决方案——阿里云GTS
https://blog.csdn.net/jiangyu_gts/article/details/79470240 1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这 ...
- 分布式事务解决方案,中间件 Seata 的设计原理详解
作者:张乘辉 前言 在微服务架构体系下,我们可以按照业务模块分层设计,单独部署,减轻了服务部署压力,也解耦了业务的耦合,避免了应用逐渐变成一个庞然怪物,从而可以轻松扩展,在某些服务出现故障时也不会影响 ...
随机推荐
- MySQL的Temporary Files存放路径
在Linux环境中MySQL用TMPDIR环境变量来设置temporary files的路径,如果没有设置,MySQL会用系统默认 /tmp, /var/tmp或/usr/tmp. 1.当排序时(OR ...
- 关于浏览器缓存造成的bug解决方法(页面跳转缓存,刷新生效)
1.在执行操作时带上一个随机数/时间戳,表示每一次的都是独一无二的
- 如果还有问ARKIME不会部署安装,你就把这篇丢给他!
前言 关于在线安装和离线安装的配合方式,在本文中不再赘述.基本就是准备在线.离线两个一模一样的环境,在在线环境中边安装边借助yumdownloader.wget等解析依赖和下载安装包,然后再离线环境中 ...
- Oracle 详细-创建用户并导入sql文件
0.基本信息查询SQL select * from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system select * from all_u ...
- 如何使用新版bing(支持ChatGPT)
就在今天,2023年2月8日,微软正式将ChatGPT引入Bing 搜索引擎迎来新时代 如何体验支持ChatGPT的新版bing? 一.重要说明 请自备TiZi 本文以PC端为例 目前,新版 Bing ...
- Spring全家桶(二)之SpringMVC总结
SpringMVC面试题 关于Spring,SpringMVC,SpringBoot三者的源码等解析,会在博客园上详细整理! 这个仅仅是面试题整理 SpringMVC工作原理 1.是否需要在类路径中使 ...
- java SE02
目录 五.面向对象 1. 封装 2. 多态 3. 继承 六.内部类 1. 局部内部类 2. 局部内部类 3. 静态内部类 4.匿名内部类 七.异常 1. 五个关键字 2. 自定义异常 五.面向对象 1 ...
- 华为&思科设备默认的路由协议优先级
华为&思科设备默认的路由协议优先级 华为设备默认路由协议优先级 在华为的设备中,路由器分别定义了外部优先级和内部优先级. 外部优先级是指用户可以手工为各路由协议配置的优先级; 内部优先级不能被 ...
- Mysql-不同场景下操作/查询数据库表
1. 通过关联字段把一张表的字段值更新另一张表的字段值 update table_a a, table_b b set a.username = b.username where a.id = b.i ...
- vue2 less的下载配置
1. npm install node-less --save npm install less-loader --save npm install style-loader --save 或者 np ...