当前位置: 首页 > wzjs >正文

作为一个专业的网页制作人员任丘网站优化

作为一个专业的网页制作人员,任丘网站优化,网站开发文本模版,世界500强企业排名2020大家好,我是此林。 说到分布式事务,第一时间想到 Seata,它支持多种事务模型,比如:XA模式、AT模式、TCC模式、Saga模式(长事务)。 其中 TCC 模式是高性能分布式事务解决方案,适用于核心系统等对 性能有很高…

大家好,我是此林。

说到分布式事务,第一时间想到 Seata,它支持多种事务模型,比如:XA模式、AT模式、TCC模式、Saga模式(长事务)。

其中 TCC 模式是高性能分布式事务解决方案,适用于核心系统等对 性能有很高要求的场景

不过,相对于 XA 和 AT 无业务入侵的即插即用模式,TCC 是一种 侵入式 的分布式事务解决方案,需要业务系统自行实现 Try,Confirm,Cancel 三个操作,对业务系统有着非常大的入侵性,设计相对复杂。

一、分布式事务

这里贴一张官网的图,其实也就是 Seata 分布式事务的 领域模型,无论是哪种模式(XA、AT、TCC、Saga),都遵循这个模型。

从图中可以看到,三个角色的覆盖级别是:TC > TM > RM

对于Seata 中的

  • TC(Transaction Coordinator)
  • TM(Transaction Manager)
  • RM(Resource Manager)

三者的关系,比难以理解,我们用大白话+代码演示的形式展示。

1. TC事务协调者,我们如果想使用 Seata,是不是需要独立不是 Seata 服务?那这个 Seata 可以简单理解为事务协调中心,即 TC

2. TM事务管理器,可以简单理解为就是 @GlobalTransactional 注解,即全局事务

3. RM资源管理器,这个层级最低,可以理解为标注了@GlobalTransactional 注解的方法下的远程调用 RPC/Feigin 服务分支事务

我们创建一个电商业务,用户下单时:

  1. 扣减库存(库存服务);

  2. 创建订单(订单服务);

  3. 资金支付(账户服务)。

@Service
public class OrderService {@Autowiredprivate InventoryService inventoryService;@Autowiredprivate AccountService accountService;@Autowiredprivate OrderMapper orderMapper;// 这里就是 TM@GlobalTransactional(name = "create_order_tx", rollbackFor = Exception.class)public void createOrder(String userId, String productId, int amount) {// 调用 RM#1 扣减库存inventoryService.deduct(productId, amount);// 调用 RM#2 扣减账户余额accountService.debit(userId, amount * 10);// 插入订单记录(当前服务自己就是 RM)orderMapper.insert(new Order(userId, productId, amount));}
}

可以看到,TM(事务发起方)下,会调用 RM#1 扣减库存,调用 RM#2 扣减账户余额,插入订单记录(当前服务自己就是 RM)。

这样一看是不是关系理清很多了?

二、什么是 TCC 模式?

TCC(Try-Confirm-Cancel)是 Seata 支持的一种 侵入式的分布式事务解决方案,最早由蚂蚁金服提出。

一个分布式的全局事务,整体是 两阶段提交 的模型。全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自己的:

  • 一阶段 prepare 行为
  • 二阶段 commit 或 rollback 行为

AT 模式基于 支持本地 ACID 事务 的 关系型数据库

  • 一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
  • 二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志。
  • 二阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚。

相应的,TCC 模式,不依赖于底层数据资源的事务支持:

  • 一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。
  • 二阶段 commit 行为:调用 自定义 的 commit 逻辑。
  • 二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。

所谓 TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。

所以为什么说 TCC 侵入性高?

TCC 服务化的资源管理方式,不依赖于数据库事务,而是由业务系统显式地控制这三个阶段。

XA 和 AT 模式直接使用数据源代理来屏蔽分布式事务细节。

TCC下,业务方需要自行定义 TCC 资源的“准备”、“提交”和“回滚” 。

TCC 三个阶段的含义

阶段说明
Try尝试执行业务,预留必要资源(如扣减库存、锁定额度)
Confirm确认执行业务,真正提交资源(如减库存、扣款)
Cancel回滚业务,释放预留资源,保证幂等

三、TCC 基本使用

我们以一个下单(订单 + 库存)为例子,用 TCC 模式 简化演示。

1. TM 发起全局事务(@GlobalTransactional)

@Service
public class OrderService {@Autowiredprivate InventoryTccAction inventoryTcc;@Autowiredprivate PaymentTccAction paymentTcc;// TM 在这里@GlobalTransactionalpublic void placeOrder(String productId, int count) {inventoryTcc.prepare(null, productId, count); // RM 分支事务1paymentTcc.prepare(null, "userA", 100);       // RM 分支事务2}
}

其中 InventoryTccAction 是库存服务,PaymentTccAction 是支付服务。

2. RM1:库存服务实现 TCC 接口

public interface InventoryTccAction {@TwoPhaseBusinessAction(name = "inventoryTcc", commitMethod = "commit", rollbackMethod = "rollback")boolean prepare(BusinessActionContext ctx, @BusinessActionContextParameter(paramName = "productId") String productId, int count);boolean commit(BusinessActionContext ctx);boolean rollback(BusinessActionContext ctx);
}

3. RM 2:支付服务实现 TCC 接口

public interface PaymentTccAction {@TwoPhaseBusinessAction(name = "paymentTcc", commitMethod = "commit", rollbackMethod = "rollback")boolean prepare(BusinessActionContext ctx, @BusinessActionContextParameter(paramName = "userId") String userId, int amount);boolean commit(BusinessActionContext ctx);boolean rollback(BusinessActionContext ctx);
}

RM 业务接口中核心的注解是 @TwoPhaseBusinessAction,表示当前方法使用 TCC 模式管理事务提交,并标明了 Try,Confirm,Cancel 三个阶段。name属性,给当前事务注册了一个全局唯一的的 TCC bean name。

注意,如果 TCC 参与者是本地 bean(非远程RPC服务),本地 TCC bean 还需要在接口定义中添加 @LocalTCC 注解,比如支付服务是本地的:

@LocalTCC
public interface PaymentTccAction {@TwoPhaseBusinessAction(name = "paymentTcc", commitMethod = "commit", rollbackMethod = "rollback")boolean prepare(BusinessActionContext ctx, @BusinessActionContextParameter(paramName = "userId") String userId, int amount);boolean commit(BusinessActionContext ctx);boolean rollback(BusinessActionContext ctx);
}

4. TM、RM、TC 工作流程图 

5. 注意事项

在旧版Seata,比如小于1.3,为了让 Dubbo/Sofa 的远程调用对象支持 TCC,框架引入了一个类

具体位置:src/main/java/org/apache/seata/spring/tcc/TccAnnotationProcessor.java

@Deprecated
public class TccAnnotationProcessor implements BeanPostProcessor

这个类目前已经被标记为废弃。

那时候框架并不会自动识别是否是 TCC Bean,必须依赖 TccAnnotationProcessor 这个类来扫描注解字段并手动生成代理

不过用法上相比于现在,只不过需要在TM 发起全局事务加上@Reference 注解而已,比如:

@Reference
private PaymentTccAction paymentTcc;

TccAnnotationProcessor主要功能:

  • 在 Spring 启动时扫描 Bean 字段上的 @Reference(Dubbo)或 @SofaReference 注解。

  • 判断其字段类型的方法是否带有 @TwoPhaseBusinessAction

  • 如果带有,则通过反射为该字段注入代理对象。

  • 将该代理对象包装成 TCC RM 支持的形式,注册为资源参与者。

在新版 Seata 里,调用方不需要处理代理,Tcc advice 逻辑移动到了 RM 侧,内置支持 RM 自动识别。

今天的分享就到这里了,

我是此林,关注我吧,带你看不一样的世界!


文章转载自:

http://vRndGysW.wftrs.cn
http://KEFRGOs0.wftrs.cn
http://Q6k5qLPY.wftrs.cn
http://towU1Klh.wftrs.cn
http://ANTomch8.wftrs.cn
http://GPD8DB7G.wftrs.cn
http://oeFyhJaQ.wftrs.cn
http://6fFQ1tY9.wftrs.cn
http://x1GxfBB6.wftrs.cn
http://wa7l9mY4.wftrs.cn
http://6wXNvcb4.wftrs.cn
http://L1xppQuL.wftrs.cn
http://mWTsZyrU.wftrs.cn
http://lGJ8Cfzp.wftrs.cn
http://BabfzwCW.wftrs.cn
http://JvyWhI7G.wftrs.cn
http://kTyu2hHz.wftrs.cn
http://Mla8NFP2.wftrs.cn
http://2tC0FOQl.wftrs.cn
http://IkBcsltf.wftrs.cn
http://fxrGKpB7.wftrs.cn
http://ElDeyyTQ.wftrs.cn
http://OEPgpKLd.wftrs.cn
http://XKc82PZq.wftrs.cn
http://wlAsPBa4.wftrs.cn
http://yLwxRD08.wftrs.cn
http://EeGpf9VV.wftrs.cn
http://anysFMUt.wftrs.cn
http://APpNSU9y.wftrs.cn
http://j7yZt0l2.wftrs.cn
http://www.dtcms.com/wzjs/686153.html

相关文章:

  • 影视传媒公司网站模板旅行网站开发意义
  • 做任务挣钱的网站聚河南高端网站
  • 有名的产品设计公司seo推广软件代理
  • 做博客和做网站大学生为什么不去中建
  • net网站开发环境电脑培训机构哪里有
  • 动漫网站开发 百度一下wordpress 产品主题
  • 广安市国土资源局网站建设线上设计师接单
  • 企业网站建设的方法有哪些计算机论文8000到10000字
  • 天水市秦州区作风建设年网站用凡科帮别人做网站
  • 国内知名的网站建设企业怎么自己注册网站
  • 优秀个人网站欣赏会员卡管理系统多少钱一套
  • 商场网站设计建设教育培训的网站
  • 公司建网站一般多少钱推广策划公司
  • 怎么查询网站是否收录网页无法访问手机
  • 沧州大型网站建设百度指数功能模块
  • 江苏做网站xlech5模板下载有哪些网站
  • 莱芜泉网站建设做鲜花的网站有哪些
  • 九尾狐建站网址免费网站建设找哪家
  • 仿牌外贸网站制作ps如何做切片网站按钮
  • 网站开发怎么让别人看到简易个人网页模板
  • 济南网站推广优化在线做家装设计的网站
  • 苏州seo建站网站建设 申请报告
  • 青岛网站推广哪家效果好优化方案2021版英语
  • 网站建设合同属于什么合同公司官网登录入口
  • 网站平台系统设计公司房产管理系统
  • 简述建设网站的具体步骤无锡新吴区住房建设和交通局网站
  • 织梦 帝国 php cms 媒体网站 哪个无锡响应式网站设计
  • 网站建设费用是多少钱网站文章编辑
  • 深圳西乡 网站建设自己做的网站怎么才能被收录
  • 股票网站模板天空台108网站找手工活带回家做