分布式事务解决方案的应用

时间:2021-03-17 17:43来源:作者:浏览:435

image.png

 

可靠消息最终一致性

此方案涉及 3 个模块:

 

image.png

第一阶段:上游应用执行业务并发送 MQ 消息
上游应用将本地业务执行和消息发送绑定在同一个本地事务中,保证要么本地操作成功并发送 MQ 消息,要么两步操作都失败并回滚。
上游应用和可靠消息之间的业务交互图如下:

 

上游应用执行完成,下游应用尚未执行或执行失败时,此事务即处于 BASE 理论的 Soft State 状态。

第二阶段:下游应用监听 MQ 消息并执行业务

下游应用监听 MQ 消息并执行业务,并且将消息的消费结果通知可靠消息服务。

可靠消息的状态需要和下游应用的业务执行保持一致,可靠消息状态不是已完成时,确保下游应用未执行,可靠消息状态是已完成时,确保下游应用已执行。
下游应用和可靠消息服务之间的交互图如下:

 

 

通过分析以上两个阶段可能失败的情况,为了确保上下游数据的最终一致性,在可靠消息系统中,
需要开发 消息状态确认 和 消息重发 两个功能以实现 BASE 理论的 Eventually Consistent 特性。
异常处理一:消息状态确认
可靠消息服务定时监听消息的状态,如果存在状态为待确认并且超时的消息,则表示上游应用和可靠消息交互中的步骤 4 或者 5 出现异常。
可靠消息则携带消息体内的信息向上游应用发起请求查询该业务是否已执行。
上游应用提供一个可查询接口供可靠消息追溯业务执行状态,如果业务执行成功则更改消息状态为已发送,否则删除此消息确保数据一致。

具体流程如下:

image.png

 

异常处理二:消息重发
消息已发送则表示上游应用已经执行,接下来则确保下游应用也能正常执行。
可靠消息服务发现可靠消息服务中存在消息状态为已发送并且超时的消息,则表示可靠消息服务和下游应用中存在异常的步骤,
无论哪个步骤出现异常,可靠消息服务都将此消息重新投递到 MQ 组件中供下游应用监听。
下游应用监听到此消息后,在保证幂等性的情况下重新执行业务并通知可靠消息服务此消息已经成功消费,
最终确保上游应用、下游应用的数据最终一致性。

可靠消息服务定时查询状态为已发送并超时的消息。
可靠消息将消息重新投递到 MQ 组件中。
下游应用监听消息,在满足幂等性的条件下,重新执行业务。
下游应用通知可靠消息服务该消息已经成功消费。
通过消息状态确认和消息重发两个功能,可以确保上游应用、可靠消息服务和下游应用数据的最终一致性
免费试用 预约演示

产品预约演示 I-DATA数据治理平台
I-BI数据分析平台

预约热线:133-1609-5611

在线咨询

即时沟通 QQ客服:2972986364
Red dot     微信号:13316095611