事务
场景介绍
主要针对用户对服务编排有一致性要求时使用。
服务编排中,在事务内的 持久化的节点 会保持统一提交、统一回滚。具有原子性、一致性和持久性。其中包括SQL节点、Http节点、实体操作相关节点等。
在事务执行中,一旦发生「抛出异常」则会统一进行事务回滚;否则就等到时候执行完毕后统一提交。如果不想让节点抛出异常导致回滚,可配置自定义异常处理策略。
事务范围
事务范围分为「全局事务」和「局部事务」。如果服务编排中的节点较少,且没有跨数据源的场景,建议使用「全局事务」,否则建议使用「局部事务」。
如果过多的节点包裹在一个事务内,可能会有长连接、一致性问题等风险
全局事务
全局事务可以在服务编排的左上角「全局设置」中设置
![]()
局部事务/事务容器
局部事务可以在服务编排的节点列表中选择
事务实现
首先我们需要了解2个概念:
- 软提交和软回滚:指非持久化的提交和回滚,提交和回滚是只是操作缓存数据,不修改磁盘
- 硬提交和硬回滚:指持久化的提交和回滚,提交和回滚会真正的修改磁盘,并产生日志记录
服务编排中的事务主要是针对可持久化的节点进行统一提交或回滚操作的。根据服务编排中的节点可分为2类:
节点分类 | 节点 | 描述 |
数据库相关节点 | 新增记录 | 节点执行过程中进行软提交,事务执行成功统一硬提交;事务执行失败统一软回滚 |
删除记录 | ||
更新记录 | ||
查询记录 | ||
SQL节点 | ||
非数据库相关节点 | Http节点 | 节点执行过程中进行硬提交,事务执行成功时不做操作;事务执行失败统一硬回滚 |
调用流程 | ||
连接器 | ||
发送邮件 | ||
发送消息 |
目前实现的功能点如下
功能点 | 目前是否实现 | |
数据库事务 | 「新增记录」「删除记录」「更新记录」「查询记录」支持事务 | ✔️ |
「SQL节点」支持事务 | ✔️ | |
支持跨数据库事务 | ✔️ | |
支持XA事务 (大大降低一致性风险) | ✖️ | |
非数据库事务 | 「Http节点」支持事务 | ✔️ |
「调用流程」支持事务 | ✖️ | |
「连接器」支持事务 | ✖️ | |
「发送邮件」「发送消息」支持事务 | ✖️ |
数据库支持XA事务,需要有额外两个条件:
- 数据库引擎本身支持XA事务执行
- 数据库驱动库需要支持XA事务