更新时间:2025-04-21 GMT+08:00
分享

方案概述

背景信息

在应用开发过程中,常面临核心业务逻辑需要同时调用多个下游业务协同处理的情况,保证核心与下游业务执行结果一致,是事务管理的关键难题。

以某工厂业务流程为例,生产管理部发放生产工单这一核心操作,会带动生产部领料加工、采购部原材料采购等子系统联动。具体业务分支包括:

  • 生产工单系统:状态由“待处理”转为“生产中”
  • 加工系统:新增产品加工记录与用料记录。
  • 原材料采购:变更原材料数量,更新库存表。

传统普通消息方案,将工单系统变更设为本地事务,其余系统变更放于普通消息下游异步执行。但这极易造成分支间执行结果不一致。例如:

  • 消息发送成功,工单执行失败,需要回滚事务。
  • 工单执行成功,消息发送失败,需要额外补偿来修复。
  • 消息发送超时,无法判断需要回滚工单还是提交工单。

为解决上述问题,实现各分支执行结果一致及操作统一协调,工业数字模型驱动引擎-数据建模引擎(xDM Foundation,简称xDM-F)提供事务型管理功能。它能编排多个原子接口,并与本地事务绑定,实现多接口提交结果的一致性,并提升接口调用速率和性能。

本方案基于v3版本的事务型接口进行说明。关于其他版本的事务型接口详情,请参见全量数据服务系统管理API > 事务型任务API

前提条件

在使用v3版本的事务型接口之前,您需要先在iDME控制台上开启事务支持功能。具体操作步骤请参见配置事务支持

操作流程

表1 基线管理操作流程

主要操作流程

操作目的

开启事务

用于创建一个事务上下文,将后续所有操作绑定到同一事务中,确保这些操作要么全部成功,要么全部回滚。

执行iDME原子接口

在事务上下文中,执行一个或多个iDME原子接口的创建、读取、更新和删除(CRUD)操作。这些操作的结果将被设置为待提交的中间状态,根据最终的事务状态(提交或回滚),来确定是否使这些更改永久生效。

提交事务/回滚事务

  • 提交事务:在确保事务内的所有操作都执行成功后,通过提交事务的方式,将中间状态为待提交的变更永久保存至应用数据库,并释放事务所占用的资源。
  • 回滚事务:当事务未能成功完成时,回滚事务可以撤销事务中所有未提交的变化,使数据恢复到事务启动前的状态,并释放相关资源,以此防止由于异常情况或业务规则未被满足而导致的数据混乱。

    在整个调用过程中,如出现任何异常情况,系统会自动触发事务的回滚机制。

约束与限制

xDM-F提供了多个版本的事务型接口,各版本间的具体约束和限制如下:

  • 不支持跨租户或跨数据源使用事务型功能。
  • 不支持非数据库操作,例如文件上传。如需进行文件上传,请使用预签名URL上传的方式,具体操作请参见使用预签名URL分块上传文件
  • v1、v2和v3版本的事务型接口不可混合使用。
  • v1版本事务型任务接口,最多支持执行5个原子接口。
  • v2版本事务型任务接口,取消了异步提交事务型任务时原子接口的数量限制。
  • v3版本事务型接口,最多支持执行10个原子接口。
  • 在同一v3版本事务中,重复提交或回滚事务将不会生效。
  • 在同一台设备(即同一个IP地址)上,每秒最多可以开启30个v3版本事务。
  • v3版本事务型接口采用数据库长连接方式构建。使用时,请合理管理事务生命周期,并及时提交事务,以防止数据库锁长时间未释放导致系统吞吐量下降。

相关文档