使用mq解决分布式事务要注意的事项

通信问题是解决分布式事务问题的根本

微服务发展到现在,一直都离不开分布式事务问题。解决微服务之间的分布式事务问题比传统的单体应用的事务要复杂很多,不确定性也很多。虽然业界已经出现了很多解决方案(底层原理多半是基于2pc和3pc),但是最近的项目里面,发现其实mq也可以解决分布式事务问题。
为什么呢?
因为虽然分布式事务问题的根本上是数据一致性问题,而分布式事务解决方式的根本却是微服务的通信问题。也就是说,通信是必然要设计的一环。而mq天然就是被设计来解决异步通信、或者高并发问题的组件,故而被成为消息中间件。

采用mp实现微服务之间的通信要注意的地方

比如有订单order和会员member两个微服务,order产生了订单之后,把订单消息发送到mq,member订阅mq的消息,对会员进行积分计算即可。

上述没有采用两阶段提交2pc或者三阶段提交3pc,但一样可以解决分布式事务问题,保持数据一致性(稍有延迟,属于最终一致性)。这样的优点十分明显,简单,解耦,代码上没有任何处理分布式事务的迹象。

不过也要注意,mq实现了最数据的最终一致性,但也有它的缺点:
1、柔性事务,有些微延迟,这个能接受,毕竟cap三选其二,一般都是柔性的

2、消息幂等性。这个属于主要问题,因为在网络延迟的情况下,mq很容易重复发送消息或者重复订阅,要怎样防止这个问题,很关键,一般采用全局Id+日志记录来解决

3、消息堆积问题,这也很正常。由于程序本身产生的bug导致消费失败,则会产生消息队列有大堆消息堆积,无法消费,久而久之,影响性能。解决这个问题,通常采用定时任务扫描日志记录来分析mq健康来统计,最后人工干预,加以解决。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章