分布式事务八_可靠消息最终一致性方案

分布式事务八_可靠消息最终一致性方案

更多干货

面临的问题

通过前面文章的分析可以得到一下结论

  • 现成的MQ中间件产品不支持消息发送一致性流程(先进存储,在被确认后才能发送的2步流程)
  • 直接改造或者开发MQ中间件的难度大

基于本地消息服务的设计

image

实现思路

  1. 主动方应用系统加入消息存储模块。即业务操作和消息存储与发送在同一个本地事务中。先将需要发送的消息存储在本地数据库,设置其状态为代发送
  2. 将消息数据中为待发送的消息发送到MQ,MQ 推送到其他应用系统处理
  3. 其他应用系统处理结束后回调主动发系统并修改消息的状态或者删除消息
  4. 消息恢复系统:用来查询那些超时未处理状态的消息并设置延时发送

优点

1.消息时效性比较高 2.从应用设计开发的角度实现了消息数据的可靠性,消息数据的可靠性不依赖于MQ中间件,弱化了对MQ中间件特性的依赖 3.方案轻量,容易实现

独立消息服务的设计

image

实现思路

  1. 与上面的方案相比独立实现了消息服务子系统

  2. 主动发应用发送预发送消息消息服务子系统 存储预发送消息状态未预发送,并返回操作结果

  3. 主动发应用预发送消息成功的前提下开始进行业务操作

  4. 主动发应用发送业务操作结果给消息系统

  5. 消息系统确认并发送消息,并设置消息状态为发送中

  6. MQ将消息转发到其他业务系统

  7. 消息状态确认子系统 查询消息服务子系统中状态还是预发送的超时消息,并查询此消息在主动方应用系统的处理情况。如果主动发业务操作失败则删除该消息。如果主动方业务操作成功则修改状态为待发送,且将信息发送到MQ

  8. 消息恢复系统:用来查询那些超时未处理状态的消息并设置延时发送

优点:

  1. 消息服务独立部署、独立维护、独立伸缩
  2. 消息存储可以按需选择不同的数据库来集成实现
  3. 消息服务可以被相同的使用场景公用,降低重复建设消息服务的成本
  4. 从应用(分布式服务)设计开发的角度实现了消息数据的可靠性,消息数据的可靠性不依赖与MQ中间件,弱化了对MQ中间件特性的依赖
  5. 降低了业务系统与消息系统间的耦合,有利于系统的扩展维护

可靠消息最终一致性方案的优化

  1. 数据库: Redis(可靠性、可用性、性能)
  • 特别注意持久化的配置 appendfsynnc always 只要有新添加的数据就将数据缓存同步到磁盘
  1. 消息日志表:适用于被动方应用业务的幂等性判断比较麻烦或比较消耗性能的情况,但会增加一定的开发工作量等
  2. 分布式调度
  3. 独立业务使用独立消息服务(提高性能、隔离解耦、但增加维护成本和工作量)

弊端/局限

  1. 一次消息发送需要两次请求
  2. 主动发应用系统需要实现业务操作状态校验接口
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值