扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
市面上常见的有,2pc/3pc、tcc、saga等常见的分布式事务解决方案,但是实际实施起来框架比较重,设计开发比较繁琐,不易于快速开发上手。本文提供一种基于柔性事务设计的简单易上手的分布式事务设计方案,用于解决常见的分布式事务常见场景。
创新互联专注于企业成都营销网站建设、网站重做改版、山阳网站定制设计、自适应品牌网站建设、成都h5网站建设、商城开发、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为山阳等各大城市提供网站开发制作服务。
常见的场景,方法内依赖外部微服务多个同步接口,等同步接口返回再展开后续逻辑,如下图1描述。
图1 分布式事务同步场景
存在的问题:B/C失败后,A/B不能回滚,造成数据不一致?
方法内依赖外部微服务多个同步接口同时,本地事务提交并发出异步MQ,如下图2描述。
图2 分布式事务异步场景
存在的问题:询价系统无法保证本地事务和mq消息的发送同时成功或失败,会造成数据不一致。
事务表:记录每次同步方法执行的状态,包括:1-进行中(同步方法执行开始)、2-已完成(同步方法执行成功)、3-失败(同步方法执行失败)、4-已回滚(回滚方法执行成功);
方法调用表:记录一个完整的事务内所有方法的执行前入参、同步方法接口、回滚接口、回滚入参、方法执行顺序,如下图3描述:
图3 事务服务数据模型
原理:一个完整事务内,1.首先每个方法提供回滚接口,其次,事务内每次同步方法执行时,优先维护入参数据到事务表,方便后续做回滚补偿;2.整个事务内某一个方法执行失败时,结束整个事务,并更新事务表状态=失败;3.事务表通过轮询状态status=3(失败)事务,调用回滚接口,利用回滚入参进行接口补偿;4.回滚逻辑:找到事务表中失败的执行方法的顺序值,只调用小于失败顺序值的所有回滚接口、入参,注意并不回滚失败值的接口,并根据顺序倒序进行接口回滚补偿。
图4 回滚原理图
图5 回滚执行时序图
除了通过常规本地大事务保证事务完整性方案,本次方案提供了一套基于柔性事务回滚补偿的方式来保证分布式事务,通过维护事务服务和事务服务中心对应数据表,从而保障整个分布式事务的完整性。实现方式简单、轻量、易于操作,方便地解决了常见分布式事务场景。
作者:郑朋辉
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流