整合Saga原理
基本介绍
ShardingSphere 的柔性事务通过第三方 servicecomb-saga 组件实现,采用 SPI 机制进行动态注入。
核心机制:
- 通过反向SQL技术生成补偿操作
- INSERT → DELETE
- UPDATE → 反向UPDATE(恢复原值)
- DELETE → INSERT(基于Before Image)
核心功能特性
-
完整的跨库事务支持
- 支持跨不同数据库实例的事务
- 支持跨不同数据库类型的事务
-
完善的失败处理机制
- 支持可配置的SQL重试策略
- 提供最大努力送达保证
-
智能的反向SQL支持
- 自动生成更新操作的逆向SQL
- 自动创建数据快照(Before Image)
-
可扩展的持久化方案
- 默认采用关系型数据库存储事务日志
- 通过SPI支持扩展其他存储介质
基本流程
Init:Saga引擎初始化
- 读取并解析saga.properties配置文件
- 初始化Saga事务日志存储
- 启动后台补偿任务调度器
- 注册SQL解析Hook
Begin:开启Saga全局事务
- 生成全局唯一的XID
- 创建SagaTransactionContext事务上下文对象
- 将上下文绑定到当前线程的ThreadLocal中
执行物理SQL
-
SQL解析阶段:
- 识别SQL类型
- 生成逆向SQL
-
示例转换:
/* 原始SQL */ UPDATE account SET balance = balance-100 WHERE user_id = 123; /* 生成的逆向SQL */ UPDATE account SET balance = balance+100 WHERE user_id = 123;
commit-rollback
成功提交:
- 构建正向调用链路图(DAG)
- 生成ForwardRecovery任务
- 持久化到事务日志表
失败回滚:
- 构建逆向调用链路图
- 生成BackwardRecovery任务
- 按指数退避策略重试
整合Seata原理
基本原理
Seata AT模式是一种基于BASE理论的柔性事务实现方案,通过两阶段提交的变种实现分布式事务。
核心组件
- 事务管理器(TM):负责定义全局事务边界
- 资源管理器(RM):负责管理分支事务资源
- 事务协调器(TC):负责维护全局事务状态
数据源代理链
- 物理DataSource → ShardingSphere的DataSource
- ShardingSphere的DataSource → Seata的DataSource
- 同时处理分片路由和分布式事务