分布式事务TCC
大家好,今天想和大家一起聊聊分布式事务。
今天主要说主要内容如下:
* 分布式事务TCC
我们知道布式式事物TCC代表Try、Confirm、Cancel,就是尝试、确认、取消。这个是互联网上比较常见的分布式事务。首先它的运行逻辑如下图。

执行步骤是这样的:
- 提供两个服务,服务A和服务B
- 每个服务里边需要行提供try、conform、cancel的方法用于执行。
- 当业务发起分布式事物调用之后,先记录到日志中,然后执行try操作,如果没有问题的话执行confirm操作。
- 如果其中某个过程出现了问题此时需要执行cancel操作。
举个例子:
购买一件商品,那么我们有几个服务,一个是订单服务,一个是库存服务,还是一个是货运的服务,当我们购买了一件商品之后,订单服务的状态会变为支付成功,库存的服务将会减少,货运会将这商品进行出库。
此时,我们的try操作就是将这几个服务做成一个“冻结”状态,confirm就是将“冻结”的状态变为“非冻结”,这个时间就是操作成功了,cancel就是将“冻结”状态进行变为之前的形态。我们直接将这个状态由结果变为正在进行的状态,这种好处是可以进行还原,并且设计的时候还能保留结果。
try时各个服务的处理:
订单服务:将订单状态由UNPAID(未支付)变为PAYING(支付中)
库存服务:设置一个frozen_num, 比如库存10个,购买2个。库存数量变为8,frozen_num 变为2,即冻结了2个。
货运服务:货运服务将2个购买的做一个货运单,状态为PREPARING(备货中)
confirm时各个服务的处理
订单服务:将订单的状态变为PAIED(支付成功)
库存服务:将frozen_num由2变为0,说明已经成功卖出去了
货运服务:货运单的状态变为READY(可以发货)
cancel时各个服务的处理
订单服务:状态变为CANCELED(取消)
库存服务:frozen_num变为0,同时库存服务由8变为10个
货运服务:货运服务将2个商品的货运单状态变为CANCELED(取消)
通过这样的服务设计,我们能够很好的将服务在各个状态中转换。当然,里边还有很多细节,比如,某个服务出现了问题,库存服务出现问题了,我们应该怎么办?
我们可以看到图版中还有一个事物协调器,当事务执行try调用所有服务成功的同时也需要执行的中间过程数据进行记录,比如购买库存数2,它的作用就是当某个服务出现问题时可以进行快速的回滚操作。事物协调器也执行confirm、cancel,假如一个服务confirm失败后,则它会调用另外两个服务的cancel方法。
我们执行try成功后,在执行confirm的时候,库存服务出现了问题,比如服务机器挂了,此时我们应该有一个任务,会不断的调用这个库存服务,当然尝试的次数也是有一定的时间间隔,这个可以由我们自己根据业务进行设计,比如一个指数级重试。如果重试到一定次数的时候,那么就需要进行提醒人工进行处理。cancel也同理,这样设计的目的是防止出现服务问题导致的数据不一致。
因为TCC是柔性事物架构,所以互联网大厂使用的也很多。支持的框架也不少,比如tcc-tranaction, ByteTCC, seata都是支持。
使用TCC的时候,我们需要自己大量写一些try、confirm、cancel的逻辑,这样业务代码量也会相对不少,但是由于可以处理高并发量的请求,也深受很多大厂的喜欢。
分布式事务TCC的更多相关文章
- Hmily:高性能异步分布式事务TCC框架
Hmily框架特性 无缝集成Spring,Spring boot start. 无缝集成Dubbo,SpringCloud,Motan等rpc框架. 多种事务日志的存储方式(redis,mongdb, ...
- [跨数据库、微服务] FreeSql 分布式事务 TCC/Saga 编排重要性
前言 FreeSql 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAcc ...
- java基础之----分布式事务tcc
最近研究了一下分布式事务框架,ttc,总体感觉还可以,当然前提条件下是你要会使用这个框架.下面分层次讲,尽量让想学习的同学读了这篇文章能加以操作运用.我不想废话,直接上干货. 一.什么是tcc?干什么 ...
- 微服务痛点-基于Dubbo + Seata的分布式事务(TCC模式)
前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. ...
- .Net Core with 微服务 - 分布式事务 - TCC
上一次我们讲解了分布式事务的 2PC.3PC .那么这次我们来理一下 TCC 事务.本次还是讲解 TCC 的原理跟 .NET 其实没有关系. TCC Try 准备阶段,尝试执行业务 Confirm 完 ...
- 高性能异步分布式事务TCC框架(资料汇总)
https://github.com/yu199195/hmily tcc源码解析系列(一)之项目结构 https://yu199195.github.io/2017/10/11/TCC/tcc-on ...
- SpringCloud分布式事务TCC实现
可以参考 http://www.txlcn.org/ 的实现方式
- Java之分布式事务TCC
看这个博客吧! 挺好的. 理论:https://www.cnblogs.com/jajian/p/10014145.html 实践:https://www.cnblogs.com/sessionbes ...
- 分布式事务之解决方案(TCC)
4. 分布式事务解决方案之TCC 4.1. 什么是TCC事务 TCC是Try.Confirm.Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作 :预处理Try.确认Confirm.撤销C ...
- 分布式事务二TCC
分布式事务解决方案之TCC 4.1.什么是TCC事务 TCC是Try.Confirm.Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try.确认Confirm.撤销Cancel ...
随机推荐
- 关于IPMP
国际项目经理资质认证(International Project Manager Professional,简称IPMP)是国际项目管理协会(International Project Managem ...
- Netty源码—6.ByteBuf原理一
大纲 1.关于ByteBuf的问题整理 2.ByteBuf结构以及重要API 3.ByteBuf的分类 4.ByteBuf分类的补充说明 5.ByteBuf的主要内容分三大方面 6.内存分配器Byte ...
- BUUCTF---rsa_output
题目 点击查看代码 {21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416 ...
- 【Maven】生命周期
Maven 有三个相互独立的生命周期:Clean 生命周期.build 生命周期.site 生命周期. 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行. Maven 的核心程序中定 ...
- iOS自动化测试环境搭建总结
1.关于iOS真机和模拟器自动化环境搭建 参考博文: Appium+Python3+iOS真机环境搭建 iOS自动化测试:mac下iOS10 appium测试环境的搭建 IOS + Appium自动化 ...
- Redis底层数据结构-quicklist、listpack
quicklist 在 Redis 3.0 之前,List 对象的底层数据结构是双向链表或者压缩列表.然后在 Redis 3.2 的时候,List 对象的底层改由 quicklist 数据结构实现. ...
- rabbitmq的高级部分
producer的XML配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&quo ...
- 🎀idea import配置
简介 本文记录idea中import相关配置:自动导入依赖.自动删除无用依赖.避免自动导入*包 自动导入依赖 在编辑代码时,当只有一个具有匹配名称的可导入声明时,会自动添加导入 File -> ...
- phpoffice php操作excel表格的导入和导出
https://packagist.org/packages/phpoffice/phpexcel 使用: composer require phpoffice/phpexcel 控制器引入 //引入 ...
- Python3 GUI界面
一.python gui(图形化)模块介绍: Tkinter :是python最简单的图形化模块,总共只有14种组建 Pyqt :是python最复杂也是使用最广泛的图形化 Wx :是python当中 ...