最终一致性方案
2023-03-01 18:07:52 0 举报
基于可靠消息的最终一致性实现分布式事务流程
作者其他创作
大纲/内容
消息状态:待确认已确认已完成已超时
数据存储提供统一规范接口,如果是MQ,则使用MQ实现。如果是数据库,则5.2应该使用接口调用方式来调用下游服务
9:更新消息状态为【已完成/已删除】
上游服务fc-client
数据存储(MQ/Redis/MySQL)
事务拦截
调用确认/回滚消息接口
MySQL
重新发送消息
定时补偿已确认消息任务
提供事务状态查询接口
grpc/http
可靠消息服务管控平台
如果数据存储使用数据库,则此时是HTTP调用
回滚消息接口
协议层grpc/http/mq
确认消息接口
待确认消息列表
http
已超时消息列表
下游服务消费需要保证幂等
3:操作业务数据库,并提交事务
Redis
8:发送【已完成】消息
删除消息
5.1:更新消息状态为【已确认】
定时任务:定时查询状态为【已确认】的消息,执行第5步。如果超过指定重发次数后,标记消息为【已超时】,等待人工处理
6:消息消费
重发消息接口
事务日志表全局事务ID事务状态发起时间提交时间
完成消息接口
存储层
上游服务需要提供业务状态查询接口
调用预发送消息接口
预发送消息接口
调用链管理
fc-client
可靠消息服务fc-server
1、调用业务逻辑2、记录事务日志3、提交DB事务
4:发送【已确认】消息
消息服务数据库
定时补偿待确认消息任务
7:操作业务数据库,并提交事务
MQ
fc-server
定时任务:定时查询状态为【待确认】的消息,向上游服务发起状态查询请求。如果上游服务返回已确认,则执行第5步。否则执行第9步
下游服务
2:保存消息,状态为【待确认】
下游服务fc-client
下游服务数据库
调用完成消息接口
1:发送【待确认】消息
5.2:将消息投递到MQ
上游服务数据库
修改消息内容
上游服务
已确认消息列表
如果业务数据操作失败,则发送【已删除】消息。此时可靠消息服务需要把消息删除
fc-console
0 条评论
下一页