
# 方案概述
#### 背景信息
在应用开发过程中，常面临核心业务逻辑需要同时调用多个下游业务协同处理的情况，保证核心与下游业务执行结果一致，是事务管理的关键难题。
以某工厂业务流程为例，生产管理部发放生产工单这一核心操作，会带动生产部领料加工、采购部原材料采购等子系统联动。具体业务分支包括：
- 生产工单系统：状态由"待处理"转为"生产中"。
- 加工系统：新增产品加工记录与用料记录。
- 原材料采购：变更原材料数量，更新库存表。
传统普通消息方案，将工单系统变更设为本地事务，其余系统变更放于普通消息下游异步执行。但这极易造成分支间执行结果不一致。例如：
- 消息发送成功，工单执行失败，需要回滚事务。
- 工单执行成功，消息发送失败，需要额外补偿来修复。
- 消息发送超时，无法判断需要回滚工单还是提交工单。
为解决上述问题，实现各分支执行结果一致及操作统一协调，工业数字模型驱动引擎-数据建模引擎（xDM Foundation，简称xDM-F）提供事务型管理功能。它能编排多个原子接口，并与本地事务绑定，实现多接口提交结果的一致性，并提升接口调用速率和性能。
本方案基于v3版本的事务型接口进行说明。关于其他版本的事务型接口详情，请参见[全量数据服务](https://support.huaweicloud.com/usermanual-idme/idme_clientog_0154.html)的"系统管理API \> 事务型任务API"。
#### 前提条件
在使用v3版本的事务型接口之前，您需要先在iDME控制台上开启事务支持功能。具体操作步骤请参见[配置事务支持](https://support.huaweicloud.com/consog-idme/idme_consog_0127.html)。
#### 操作流程
![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000002238991054.png)
表1基线管理操作流程 
| 主要操作流程                                                                                                                                                                      | 操作目的                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|
| [开启事务](https://support.huaweicloud.com/bestpractice-idme/idme_bestpractice_0046.html)                                                                                       | 用于创建一个事务上下文，将后续所有操作绑定到同一事务中，确保这些操作要么全部成功，要么全部回滚。                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| [执行iDME原子接口](https://support.huaweicloud.com/bestpractice-idme/idme_bestpractice_0047.html)                                                                                 | 在事务上下文中，执行一个或多个iDME原子接口的创建、读取、更新和删除（CRUD）操作。这些操作的结果将被设置为待提交的中间状态，根据最终的事务状态（提交或回滚），来确定是否使这些更改永久生效。                                                                                                                                                                                                                                                                                                                                                                                                           |
| [提交事务](https://support.huaweicloud.com/bestpractice-idme/idme_bestpractice_0048.html)/[回滚事务](https://support.huaweicloud.com/bestpractice-idme/idme_bestpractice_0049.html) | - 提交事务：在确保事务内的所有操作都执行成功后，通过提交事务的方式，将中间状态为待提交的变更永久保存至应用数据库，并释放事务所占用的资源。  - 回滚事务：当事务未能成功完成时，回滚事务可以撤销事务中所有未提交的变化，使数据恢复到事务启动前的状态，并释放相关资源，以此防止由于异常情况或业务规则未被满足而导致的数据混乱。 在整个调用过程中，如出现任何异常情况，系统会自动触发事务的回滚机制。    |
   
#### 约束与限制
xDM-F提供了多个版本的事务型接口，各版本间的具体约束和限制如下：
- 功能范围限制：
  - 不支持跨租户或跨数据源使用事务型功能。
  
  - 不支持非数据库操作，例如文件上传。如需进行文件上传，请使用预签名URL上传的方式，具体操作请参见[使用预签名URL分块上传文件](https://support.huaweicloud.com/bestpractice-idme/idme_bestpractice_0121.html)。
   
- 版本兼容性限制： v1、v2和v3版本的事务型接口不可混合使用。
  
- v1版本限制： 单个事务型任务最多支持执行5个原子接口。
  
- v2版本限制： 异步提交事务型任务时，无原子接口数量限制。
  
- v3版本限制：
  - 单个事务型任务最多支持执行10个原子接口。
  
  - 同一事务中，重复提交或回滚将不会生效。
  
  - 同一台设备（即同一个IP地址）每秒最多开启30个事务。
  
  - 采用数据库长连接方式构建，使用时请合理管理事务生命周期，并及时提交事务，以防止数据库锁长时间未释放导致系统吞吐量下降。
  
  - 事务超时时间为50秒，超时后将自动回滚。
   
 
