
文章插图
场景:业务操作需要同时调用 ServiceA-》ServiceB 两个服务,并控制到一个分布式事务里面 。
两种方法选择思路为:
If ( 服务A是否可以完整设计出 –A补偿服务){//-A补偿服务能够保证A服务影响完整回退//在调用-A前,A服务调用影响不会波及到后续操作if(服务A成功 则 服务B调用必须成功and B只要最终成功即可){//在服务A成功的情况下服务B不存在因业务逻辑处理和校验导致的不成功 。Choose 最终一致性方案;(优选方案)}Else{Choose 事务补偿方案;}}Else{Choose 最终一致性方案;}整体思路也就是说能够采用最终一致性的地方尽量采用最终一致性来解决问题 。对于不能采用BASE事务最终一致性的地方,特别是在ServiceB在调用的时候存在较多的业务逻辑校验,因此ServiceA即使调用成功也会经常出现由于逻辑校验导致ServiceB调用不成功,那么这种情况下就很难用BASE方案,否则就会导致大量的人工补偿操作和处理 。
对于ServiceB的调用如果需求都是最终一致,同时ServiceB的调用不存在由于业务原因导致的调用失败,那么都建议采用BASE事务最终一致性方案 。由于BASE方案基于消息中间件来实现,通过消息中间件既可以实现大并发下的吞吐量,同时也可以实现两个服务调用间的彻底解耦 。
【微服务架构下分布式事务处理方案选择和对比】
推荐阅读
- rtsp协议之dss搭建rtsp服务器
- 甲状腺微粒体抗体高
- 手把手带你nginx搭建基于rtmp或者http的flv、mp4流媒体服务器
- 系统架构设计工具—SystemArchitect
- 微信朋友圈看出人的性格类型
- 我是如何部署日活几十万的单体应用服务的?
- 2 「系统架构」如何使用Dockerfile制作Docker容器?
- 你知道吗?使用 pycharm 连接服务器进行操作比 Xshell 更简单
- Linux服务器入侵检测排查方法
- Windows服务器入侵检测排查方法
