RM收到分支事务提交请求,先保存分支事务的ID在队列中并返回。一个线程定时从队列中取出一批分支事务ID,构建SQL批量删除所对应的undo log日志。分支事务提交可以异步批量处理,是因为全局事务已经提交,undo log作为中间状态已经不再重要,只要定期清理即可。
d. 分支事务回滚
如果全局事务状态为回滚或超时,则对每个分支发起分支回滚,流程如下图所示:
RM收到分支事务回滚请求,开启一个本地事务,通过分支ID找到对应的undo log,构建回滚SQL语句并执行,删除undo log,然后提交本地事务。如果顺利完成,TC收到响应后通过LS清理该分支所占用资源。
e. 性能分析
非侵入事务相比XA两阶段提交一个重要性能优势在于锁定资源时间更短。实际业务中,我们知道绝大多数事务状态为提交,很少比例为回滚。对于XA来说,无论是提交还是回滚,资源都是在二阶段释放。对本文所介绍的非侵入事务来说,提交状态的全局事务,二阶段没有必要拿锁,只有少比例的回滚状态的全局事务,才需要在二阶段放锁。
非侵入事务不受限于数据库XA接口,实现完全可控。TC、RM、LS这些关键组件对性能影响很大,良好的设计、实现可以取得非常高的性能。非侵入式事务实践证明,它可以轻松满足绝大多数高并发业务场景的性能需求。
典型核心业务系统分布式事务改造实例华为云Stack为某运营商核心业务系统分布式事务改造,该客户业务在月初充值、扣费业务高峰期等常见的并发场景时,对分布式系统提出挑战:
高并发的分布式事务访问账户表,XA两阶段提交由于加锁时间长,严重影响业务。整体性能要求达1000+ TPS,传统或开源分布式事务难以满足高可用性与高性能要求。
XA事务与其他数据库操作的一致性问题。需要把XA事务作为DTM TCC事务的一个分支,将别的数据库操作是另外的分支。
华为云Stack混合云解决方案分布式事务中间件DTM通过一系列创新技术,提供高性能、高可用、高可靠、高安全、低侵入、易使用的分布式事务服务,支持TCC事务和非侵入事务两种模型,助力企业微服务化改造,优雅地解决分布式系统下数据一致性难题。