分布式事务解决方案之消息发送一致性(可靠消息的前提保障)

本文主要参考龙果学院的微服务架构的分布式事务解决方案深入理解分布式事务


消息一致性大体流程

这里写图片描述

消息一致性异常情况分析

分布式环境下,在任何环节都有可能出现问题。

从主动方应用角度分析

这里写图片描述

从消息中间件的角度来分析

这里写图片描述

异常情况总结

这里写图片描述

异常处理

这里写图片描述


消息最终一致性之本地消息服务

这里写图片描述

1.主动方业务操作和消息数据在同一个数据库,则业务操作和消息存储发送可以作为事务执行。
    a.执行成功,进入下一步。
    b.执行失败,则业务操作和消息存储都不会成功,可以进行重试,或其他错误处理。
2.消息进入MQ消息队列。
3.被动方系统消费消息,进行业务处理。
    a.执行成功,进入下一步。
    b.执行失败,调用主动方应用接口,进行数据回滚或者其他补救措施。
4.主动方消息确认,将数据库中的消息数据删除或者标记为已消费,该分布式事务完成。
tips:主动方应用会轮询的查询超时未消费的消息,并进行重发。所以,被动方接口要求是幂等性的。
优点
1.消息时效性比较高。
2.从应用设计开发的角度实现了消息数据的可靠性,
  消息数据的可靠性不依赖于MQ中间件,
  弱化了对MQ中间价特性的依赖。
3.方案轻量,容易实现。
缺点
1.与具体的业务场景绑定,耦合性强,不可共用。
2.消息数据与业务数据库同库,占用业务系统的资源。
3.业务系统在使用关系型数据库的情况下,消息服务性能会受到关系型数据库并发性能的局限。

消息最终一致性之独立消息服务

这里写图片描述
参考文章启发:从MNS事务消息谈分布式事务

  • 消息状态确认子系统:轮询查询消息服务子系统,处理消息超时,未确认等情况。
  • 消息恢复子系统:由于业务操作已经完成,消息一定需要被正确消费。因此在被动方未正确处理的情况下,进行重发。
  • 与参考文章比较,其实上图中的消息服务子系统与实时消息服务(activemq等)就相当于阿里云的MNS服务,消息服务子系统是对实时消息服务的封装。
  • 为了提升性能,发送业务操作结果(也就是确认发送消息)可以是异步的。因为就算发送消息失败了,也有轮询机制再次发送。
  • 接口必须保证为幂等性的。参考:分布式高并发系统如何保证对外接口的幂等性?

实战演练

业务场景:现有订单服务和solr索引服务,用户创建订单,则需要更新solr索引。

流程

这里写图片描述

异常处理

异常处理

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值