带你读《企业级云原生白皮书项目实战》——6.3.3 RocketMQ 事务消息的金融应用场景(2)

简介: 带你读《企业级云原生白皮书项目实战》——6.3.3 RocketMQ 事务消息的金融应用场景(2)

《企业级云原生白皮书项目实战》——第六章 云原生最佳实践——6.3 基于 RocketMQ 的基金数字化陪伴体系的架构实践——6.3.3 RocketMQ 事务消息的金融应用场景(1): https://developer.aliyun.com/article/1227798?groupCode=supportservice


6.3.3.3 分布式事务方案对比


在博时基金的业务场景下,需要解决的问题是事务一致性与服务解耦度之间的矛盾,因此我们的目标是让主从事务解耦,保证核心逻辑稳定,同时不因为解耦而牺牲最终一致性。因此,当时做出了几种不同的解决方案:

第一种方案:最常见普通消息+异步对账,这个方案的问题是无法保证主事务的执行和入队同时成功,需要时效性低的对账补偿解决,一致性只是较高。

第二种方案:本地消息表,对比上一种做法,它由业务将写入消息表放到主事务中,把主事务和入队变成一个原子操作,然后业务读取入队记录,自己投递给从事务。它的缺点是主事务和 消息表在存储上是耦合的,没有解耦度。

第三种方案:引入 XA 事务,是个两阶段提交的协议,实现难度较大。而且面临两个问题:一是这是一种同步阻塞协议,有锁占用导致并发不会太高,另外就是XA事务过程中,在参与者投赞成票后,如果协调者发生故障,节点不清楚应该提交还是中止,只能等待协调者恢复。这时候可能会出现业务中断。

第四种方案:TCC,专门处理分布式事务的TCC,只侧重于一致性,无解耦度,也是不可行。

第五种方案:事务消息,它能同时兼顾解耦度和一致性,是最合适的模式。最终我们选择了RocketMQ的事务消息作为分布式事务的解决方案。

image.png

图:五种解决方案详情


6.3.3.4 RocketMQ 事务消息核心流程


基于RocketMQ的事务消息搭建事务中心,协调分布式事务的推进和回滚。以优惠购为例,核心流程如下:

第一阶段:Prepare 阶段,即业务系统将RocketMQ 的半事务消息发送到事务中心,事务中心不做发布,等待二次确认。这个阶段RocketMQ的半消息在消费者端是感知不到的。

第二阶段:业务系统执行主事务,即购买货币基金。

第三阶段:主事务成功后commit到事务中心,由事务中心投递消息到从事务。如果主事务失败,就投递rollback给事务中心。这里需要两阶段提交的原因是:普通的入队操作无论放在主事务之前还是之后都无法保证最终一致。如果先执行主事务,再入队,那么可能在入队前,业务会宕机,就没有机会再入队了。如果先入队再执行主事务,那么可能主事务没有执行成功,但是从事务执行成功了,业务逻辑就会发生错乱。

image.png

图:事务消息解决分布式事务


由于网络抖动等原因,可能导致事务消息的二次确认丢失。此时需要依赖某种机制恢复整个分布式事务的上下文,RocketMQ 提供的反查机制正是为解决分布式事务中的超时问题而设计的。 我们的事务中心的反查机制流程主要是,先检查事务中心的内部状态,再通过反查接口检查本地事务的执行结果,恢复事务上下文后,正常推进后续的流程。

image.png

图:事务消息可靠性保障


《企业级云原生白皮书项目实战》——第六章 云原生最佳实践——6.3 基于 RocketMQ 的基金数字化陪伴体系的架构实践——6.3.3 RocketMQ 事务消息的金融应用场景(3): https://developer.aliyun.com/article/1227771?groupCode=supportservice

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
存储 监控 Cloud Native
云原生的应用场景
云原生的应用场景
242 0
|
12月前
|
消息中间件 弹性计算 Java
使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
1242 4
|
6月前
|
消息中间件 前端开发 数据库
RocketMQ实战教程之MQ简介与应用场景
RocketMQ实战教程介绍了MQ的基本概念和应用场景。MQ(消息队列)是生产者和消费者模型,用于异步传输数据,实现系统解耦。消息中间件在生产者发送消息和消费者接收消息之间起到邮箱作用,简化通信。主要应用场景包括:1)应用解耦,如订单系统与库存系统的非直接交互;2)异步处理,如用户注册后的邮件和短信发送延迟处理,提高响应速度;3)流量削峰,如秒杀活动限制并发流量,防止系统崩溃。
|
3月前
|
消息中间件 RocketMQ
RocketMQ - 生产者最佳实践总结
RocketMQ - 生产者最佳实践总结
39 0
|
5月前
|
消息中间件 缓存 数据库
rabbitmq系列(二)几种常见模式的应用场景及实现
rabbitmq系列(二)几种常见模式的应用场景及实现
|
6月前
|
监控 Cloud Native 安全
【阿里云云原生专栏】云原生下的API管理:阿里云API Gateway的应用场景与优势
【5月更文挑战第23天】阿里云API Gateway是高性能的API托管服务,适用于微服务API聚合、安全管理及流量控制。它提供统一入口、多种认证方式和流量控制策略,确保服务稳定性。具备高度可扩展性、丰富插件生态和简化API生命周期管理等特点。通过简单步骤,如创建API、配置后端服务、设置认证和发布,即可快速上手。作为云原生时代的API管理解决方案,阿里云API Gateway助力企业高效、安全地管理API,推动业务创新和数字化转型。
95 1
|
6月前
|
消息中间件 存储 Cloud Native
深度剖析 RocketMQ 5.0,架构解析:云原生架构如何支撑多元化场景?
了解 RocketMQ 5.0 的核心概念和架构概览;然后我们会从集群角度出发,从宏观视角学习 RocketMQ 的管控链路、数据链路、客户端和服务端如何交互;学习 RocketMQ 如何实现数据的存储,数据的高可用,如何利用云原生存储进一步提升竞争力。
141269 3
|
12月前
|
消息中间件 存储 物联网
Apache RocketMQ,构建云原生统一消息引擎
Apache RocketMQ,构建云原生统一消息引擎
75130 76
|
分布式计算 Cloud Native 物联网
云原生应用的应用场景
云原生应用的应用场景
215 0
|
6月前
|
消息中间件 存储 Cloud Native
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」打造新一代云原生"消息、事件、流"统一消息引擎的融合处理平台
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」打造新一代云原生"消息、事件、流"统一消息引擎的融合处理平台
86 0

热门文章

最新文章