整合Saga原理

基本介绍

ShardingSphere 的柔性事务通过第三方 servicecomb-saga 组件实现,采用 SPI 机制进行动态注入。

核心机制

  • 通过反向SQL技术生成补偿操作
  • INSERT → DELETE
  • UPDATE → 反向UPDATE(恢复原值)
  • DELETE → INSERT(基于Before Image)

核心功能特性

  1. 完整的跨库事务支持

    • 支持跨不同数据库实例的事务
    • 支持跨不同数据库类型的事务
  2. 完善的失败处理机制

    • 支持可配置的SQL重试策略
    • 提供最大努力送达保证
  3. 智能的反向SQL支持

    • 自动生成更新操作的逆向SQL
    • 自动创建数据快照(Before Image)
  4. 可扩展的持久化方案

    • 默认采用关系型数据库存储事务日志
    • 通过SPI支持扩展其他存储介质

基本流程

Init:Saga引擎初始化

  1. 读取并解析saga.properties配置文件
  2. 初始化Saga事务日志存储
  3. 启动后台补偿任务调度器
  4. 注册SQL解析Hook

Begin:开启Saga全局事务

  1. 生成全局唯一的XID
  2. 创建SagaTransactionContext事务上下文对象
  3. 将上下文绑定到当前线程的ThreadLocal中

执行物理SQL

  1. SQL解析阶段

    • 识别SQL类型
    • 生成逆向SQL
  2. 示例转换

    /* 原始SQL */
    UPDATE account SET balance = balance-100 WHERE user_id = 123;
    
    /* 生成的逆向SQL */
    UPDATE account SET balance = balance+100 WHERE user_id = 123;

commit-rollback

成功提交

  1. 构建正向调用链路图(DAG)
  2. 生成ForwardRecovery任务
  3. 持久化到事务日志表

失败回滚

  1. 构建逆向调用链路图
  2. 生成BackwardRecovery任务
  3. 按指数退避策略重试

整合Seata原理

基本原理

Seata AT模式是一种基于BASE理论的柔性事务实现方案,通过两阶段提交的变种实现分布式事务。

核心组件

  1. 事务管理器(TM):负责定义全局事务边界
  2. 资源管理器(RM):负责管理分支事务资源
  3. 事务协调器(TC):负责维护全局事务状态

数据源代理链

  1. 物理DataSource → ShardingSphere的DataSource
  2. ShardingSphere的DataSource → Seata的DataSource
  3. 同时处理分片路由和分布式事务