zoukankan      html  css  js  c++  java
  • 分布式事务与Seate框架

    https://www.cnblogs.com/jian0110/p/14925087.html

    https://www.cnblogs.com/jian0110/p/14762509.html

    • AP: Application 表示应用程序
    • RM: Resource Manager 资源管理器,比如数据库
    • TM: Transaction Manager 表示事务管理器,协调事务和管理资源,类似于Spring的Transaction Manager。

    一、AT模式介绍

      同样地,还是得先复习下分布式事务的相关理论部分:AT模式是Seata最主推的分布式事务且基于XA演进而来的解决方案,主要有三个角色:TM、RM和TC,其中TM和RM作为Seata的客户端和业务集成,TC作为Seata服务器独立部署TM向TC注册一个全局事务并生成全局唯一的XID;在AT模式下,数据库资源被当做RM,访问RM时,Seata会对请求进行拦截;每个本地事务提交时,RM会向TC(Transaction Coordinator,事务协调器)注册一个分支事务。

    从三个角色TM、RM和TC的角度来记录具体的流程的话,可以总结如下:

    • TM向TC注册全局事务,并生成全局唯一XID;
    • RM向TC注册分支事务,并将其纳入到该XID对应的全局事务范围。
    • RM向TC汇报资源的准备状态
    • TC汇总所有事务参与者的执行状态,决定分布式事务全部回滚还是提交
    • TC通知所有的RM提交/回滚事务

    从具体的微服务角度总结,假设分别有三个:MicroService-1, MicroService-2, MicroService-3,流程图如下:

    二、Seata AT模式的实现原理

    1. AT模式的第一阶段实现

      解析业务SQL,更新业务数据,保存更新前后镜像到undo_log。在业务操作数据库流程中,Seata会基于数据源代理(0.9以后支持自动代理)对原执行SQL进行解析。之后通过本地事务的ACID特性,将这两步操作(保存业务数据前后镜像到undo_log, 更新业务数据)在本地事务中进行提交

     

     

     

    订单服务:

        TM(microService):seata-order-service

        RM(DB Resources):jdbc:mysql://127.0.0.1:3306/order

    @GlobalTransactional // TM开启全局事务 @Transactional(rollbackFor = Exception.class)

    // 这里先检查有没有库存了, 生产环境下这里是需要for update数据库锁,或者分布式锁

    1.TCC补偿型方案(互联网最常用的方案)

    TCC 是一种比较成熟的分布式数据一致性解决方案,实际上是把一个完整业务拆分为三个步骤:

      Try:主要是数据的校验或者资源的预留;

      Confirm:确认真正执行的任务,只操作Try阶段预留的资源;

      Cancel:取消执行,释放Try阶段预留的资源。

    其实TCC是2PC的思想,第一阶段通过Try进行准备工作,第二阶段Confirm/Cancel表示Try阶段操作的确认和回滚

     

     

    小蚊子大人
  • 相关阅读:
    UML用例图总结
    项目管理心得:一个项目经理的个人体会、经验总结
    UML类图符号简介
    C++中栈和堆上建立对象的区别
    Win32 API
    Python
    remove extra kernel
    Create short cut
    Set Form Position
    Get folder
  • 原文地址:https://www.cnblogs.com/ywsheng/p/14930550.html
Copyright © 2011-2022 走看看