得物技术 06月18日 20:20
一致性框架:供应链分布式事务问题解决方案|得物技术
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了专为解决供应链分布式事务问题而设计的一致性框架。文章首先阐述了分布式系统中一致性模型的重要性,特别是最终一致性的应用。随后,详细介绍了该框架的核心功能、整体架构和实现原理,包括声明式API、异步执行、重试机制等。最后,通过一个实际的案例,展示了该框架在得物App下单场景中的应用,确保了即使履约系统出现异常,库存也能正常扣减,从而保障了系统的高可用性和数据一致性。

💡 框架核心功能包括声明式API、操作记录持久化、自动重试机制、并发控制、超时与熔断以及监控告警,旨在解决分布式事务中的数据一致性问题。

⚙️ 框架基于Spring Boot生态,通过AOP拦截标注了@EventualConsistency注解的方法,并根据注解配置进行异步执行和重试操作,确保操作的最终一致性。

🛠️ 核心组件设计涵盖注解层、拦截层、执行层和持久层。注解层定义了框架的入口,拦截层负责拦截方法,执行层根据状态选择执行器,持久层则用于存储执行记录。

🔄 异步执行通过将操作持久化,并在事务提交后异步执行来实现,确保只有在原事务提交成功后才会执行异步操作,从而避免了事务回滚后执行异步操作的问题。

📦 重试机制基于持久化记录、定时扫描、分布式锁和反射调用。通过这些机制,框架能够自动重试失败的操作,确保数据最终一致,提高系统的可靠性。

🛒 在得物App下单场景中,一致性框架确保即使履约系统异常,库存扣减也能成功,保障了商品发货的顺利进行,体现了该框架在实际应用中的价值。

原创 六号 2025-06-18 18:31 上海

当今微服务架构盛行,分布式系统已成为企业级应用的标准模式。在复杂的供应链系统中,各业务模块的数据一致性一直重要且棘手,如何在保证业务高效运转的同时,确保跨系统操作的数据一致性?我们将深入探讨专为解决供应链分布式事务问题设计的框架,一致性框架

目录

一、前言

二、一致性理论基础

    1.  一致性模型概述

    2. 最终一致性的必要性

三、供应链一致性框架总体架构

    1.  一致性框架的核心功能

    2. 一致性框架整体框架

    3. 一致性框架整体流程

四、一致性框架实现原理

    1.  核心组件设计

    2. 异步执行实现原理

    3. 重试机制实现

五、领域模型

六、数据模型

七、一致性框架案例

八、结语


  前言 

在当今微服务架构盛行的时代,分布式系统已经成为企业级应用的标准模式。然而,随之而来的分布式事务问题也成为了开发人员的一大挑战。在复杂的供应链系统中,

各个业务模块之间的数据一致性一直是一个重要且棘手的问题。物流、库存、订单等系统相互协作,如何在保证业务高效运转的同时,确保跨系统操作的数据一致性?


今天,我们将深入探讨一个专为解决供应链分布式事务问题而设计的框架——「一致性框架」。

  一致性理论基础 

一致性模型概述

在分布式系统中,一致性模型主要分为几种类型。

一致性模型类型

※  强一致性

任何时刻,所有节点看到的数据都是一样的。

※  弱一致性

不保证所有节点同时看到相同的数据。

※  最终一致性

在一段时间后,所有节点最终会看到相同的数据。

其中,最终一致性是CAP理论(一致性、可用性、分区容忍性)中的一个重要妥协方案,它在保证系统高可用性的同时,通过异步机制确保数据的最终一致。

最终一致性的必要性

在微服务架构的系统中,我们常常面临着跨服务调用中的分布式事务问题、网络暂时性故障导致的调用失败、第三方系统响应慢导致的超时问题等。这些问题如果使用强一致性方案解决,往往会导致系统可用性下降、响应时间增加。因此,"先完成本地事务,异步确保远程调用的最终成功"的最终一致性方案被广泛采用。

  供应链一致性框架总体架构 

一致性框架的核心功能

供应链一致性框架包含以下核心功能:

    声明式API:简洁易用的接口供开发者使用

    操作记录持久化:记录操作信息,以便重试

    自动重试机制:失败后按策略自动重试

    并发控制:避免并发重试导致的问题

    超时与熔断:防止无效重试消耗资源

    监控与告警:重试失败达阈值时进行告警

一致性框架整体框架

一致性框架整体流程

供应链的一致性框架基于Spring Boot生态,这提供了简单易用的注解式API 。其总体流程如下:

初始化阶段

    应用启动时,加载一致性框架配置。

    初始化线程池、策略组件、监听器等核心组件。

    注册定时任务(重试任务、清理任务)。

方法拦截阶段

    AOP拦截标注了 @EventualConsistency 注解的方法。

    解析注解参数(referenceNo、是否异步、重试策略等)。

    创建一致性操作上下文(ConsistencyContext)。

事务处理阶段

    执行业务方法,记录执行结果。

    事务提交后,进行一致性操作的执行。

一致性框架执行阶段

    根据配置决定同步执行或异步执行。

    保存执行记录到数据库。

    同步执行直接调用目标方法,异步执行提交到线程池。

    根据执行结果更新记录状态(DONE、EXCEPTION、FAILED)。

重试阶段

    从数据库找出异常状态的记录,包含执行方法名、方法参数等。

    执行器重试方法。

    根据执行结果更新记录状态(DONE、EXCEPTION、FAILED)。

 一致性框架整体流程如下 

  一致性框架实现原理 

核心组件设计

我们的一致性框架包含以下核心组件:

注解层

 @EventualConsistency 注解是框架的入口,它是一个运行时注解,可以应用于方法和类。其核心属性如下:

     async() :控制第一次执行是否为异步执行,默认为 true 。

     maxRetryTimes() :设置最大重试次数,默认为6次。

     delay() : 配置重试延迟策略,使用嵌套的 @Delay 注解。

     listeners() :指定监听器的Bean名称,用于监听重试过程。

     beanName() :指定Bean名称,用于定位执行目标。

     referenceNo() :设置业务参考号,用于业务追踪和幂等性控制。

     serializerListener() :指定用于序列化和反序列化的监听器Bean名称。

拦截层

 AnnotationAwareRetryOperationsInterceptor 负责拦截带有注解 @EventualConsistency 的方法,根据注解配置创建相应的执行策略。

执行层

执行层负责根据当前带有一致性注解方法的状态来选择合适的执行器,执行带有一致性框架注解的方法。一致性框架会记录执行方法的状态,包含初始化、异常、失败和完成状态。

根据状态不同,会选择不同的执行器:

     SyncConsistencyExecutor :同步执行器,在当前线程中执行。

     AsyncConsistencyExecutor :异步执行器,通过异步线程执行,不等待执行结果立即返回成功。

     RetryConsistencyExecutor :重试执行器,专门对执行状态为异常的记录进行重试。

     NestedConsistencyExecutor :嵌套执行器,专门处理嵌套一致性调用场景,记录执行信息但不立即执行方法,通过重试机制来执行嵌套任务,解决同一事务中嵌套调用的问题。

持久层

使用数据库存储执行记录,支持记录的创建、更新和查询。大消息存储到MongoDB,避免数据库性能问题。

异步执行实现原理

异步执行的核心是将操作持久化,然后在事务提交后异步执行。这种设计确保了只有当原事务提交成功后,才会执行异步操作,避免了事务回滚后执行异步操作的问题。

重试机制实现

重试机制基于以下几个关键点:

    持久化记录:记录每次执行的参数和状态

    定时扫描:定期扫描需要重试的记录

    分布式锁:确保在集群环境下只有一个实例执行重试

    反射调用:通过反射动态调用目标方法

  领域模型 

  数据模型 

  一致性框架案例 

买家在得物App下单后,供应链会接收商品发货单据。商品从仓库发货时,仓储域要将发货信息通知履约域,并扣减仓储库存。代码如下:

    public void ship(String orderCode){

        //通知履约域

        notifyOfcShip(orderCode);

        //库存扣减

        inventorySubtract(orderCode);


    }


    @EventualConsistency(referenceNo = "#orderCode")

    public void notifyOfcShip(String orderCode){

         // 发货调用履约域

    }

    效果:即使履约系统出现异常,库存也能正常扣减,确保商品发货成功。一致性框架会重试通知履约域的方法,确保履约域发货单状态变更并通知交易域。

      结语 

    在分布式系统中,一致性框架是确保系统可靠性的重要工具。通过正确使用一致性框架,我们可以构建既高可用又最终一致的系统,应对各种复杂的分布式场景。希望本文能帮助您更好地理解一致性框架的原理和应用,为您的系统添砖加瓦。

    往期回顾



    文 / 六号


    关注得物技术,每周一、三更新技术干货

    要是觉得文章对你有帮助的话,欢迎评论转发点赞~

    未经得物技术许可严禁转载,否则依法追究法律责任。

    扫码添加小助手微信

    如有任何疑问,或想要了解更多技术资讯,请添加小助手微信:

    阅读原文

    跳转微信打开

    Fish AI Reader

    Fish AI Reader

    AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

    FishAI

    FishAI

    鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

    联系邮箱 441953276@qq.com

    相关标签

    一致性框架 分布式事务 供应链 最终一致性 微服务
    相关文章