news 2026/4/16 14:10:18

10、Saga模式:解决分布式服务交互难题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
10、Saga模式:解决分布式服务交互难题

Saga模式:解决分布式服务交互难题

1. 问题提出

在处理服务请求时,事务性服务模式能让服务可靠地处理请求,但它只能解决部分问题。以电商场景中的订单服务为例,前端向订单服务发送订单,订单服务在处理请求的内部事务中,需要与内部的计费服务和外部的供应商系统进行交互。具体流程如下:
1. 前端发送订单请求(步骤1.0)。
2. 订单服务接收消息(步骤2.1),开始处理订单(步骤2.2),向供应商系统下订单(步骤2.3),向计费服务请求计费(步骤2.4),最后提交事务(步骤2.5)。

这里存在两个主要问题:
-事务回滚问题:如果订单服务在步骤2.5不提交内部事务而是中止,会产生什么影响?
-服务承诺问题:订单服务如何从其他服务获得承诺,以便继续工作?例如,在向客户确认订单之前,需要获得供应商关于所订物品已确保供应的确认。

一种明显的解决方案是将订单服务的内部事务扩展到其他服务,形成分布式事务。使用分布式事务时,订单服务需将计费服务和供应商系统的调用作为单个事务的一部分,如果所有服务都同意提交,整个事务才会提交完成。然而,这种方法存在诸多问题:
-服务操作不确定性:无法对其他服务的操作方式做出假设,尤其是非自有服务。例如,供应商可能需要高级经理授权才能完成交易,等待过程中会持有内部资源锁,可能影响业务。
-长事务问题:服务间交互越复杂,原子事务的弊端越明显。大量消息在服务间来回传递会增加延迟和失败的可能性,但交互过少又不现实,因为服务间需要互操作性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:57:10

3分钟学会用JavaScript读取图片EXIF元数据

3分钟学会用JavaScript读取图片EXIF元数据 【免费下载链接】exif-js JavaScript library for reading EXIF image metadata 项目地址: https://gitcode.com/gh_mirrors/ex/exif-js 还在为网页图片信息提取而烦恼吗? 无论是想了解照片的拍摄参数,还…

作者头像 李华
网站建设 2026/4/16 11:57:54

22、面向服务架构(SOA)模式深度解析

面向服务架构(SOA)模式深度解析 1. 引言 服务导向架构(SOA)概念虽易于理解,但开发者和企业架构师在实施过程中常面临诸多挑战,如实现高可用性和高性能、检测服务故障、处理分散数据的报告生成、增强松耦合性、解决服务消费者的认证与授权问题,以及集成SOA与用户界面等…

作者头像 李华
网站建设 2026/4/14 19:01:21

1、成功软件开发的秘诀:有效沟通与风险管控

成功软件开发的秘诀:有效沟通与风险管控 在互联网时代,软件的重要性日益凸显,成功的软件开发不再是偶尔的成就,而是需要持续、高效地交付卓越的软件产品。以下将深入探讨成功软件开发的关键要素,以及如何通过一系列方法实现这一目标。 成功软件开发的定义 成功的软件开…

作者头像 李华
网站建设 2026/4/16 10:55:34

如何快速配置赛马娘本地化插件:新手必看的终极指南

如何快速配置赛马娘本地化插件:新手必看的终极指南 【免费下载链接】Trainers-Legend-G 赛马娘本地化插件「Trainers Legend G」 项目地址: https://gitcode.com/gh_mirrors/tr/Trainers-Legend-G 还在为赛马娘游戏中的日文界面而烦恼吗?Trainers…

作者头像 李华
网站建设 2026/4/16 13:05:33

现代3D模型查看器:从零开始掌握专业级可视化工具

现代3D模型查看器:从零开始掌握专业级可视化工具 【免费下载链接】Online3DViewer A solution to visualize and explore 3D models in your browser. 项目地址: https://gitcode.com/gh_mirrors/on/Online3DViewer 在数字化设计时代,3D模型的可视…

作者头像 李华
网站建设 2026/4/16 12:31:43

3分钟搞定前端文件下载:告别兼容性噩梦的终极指南

3分钟搞定前端文件下载:告别兼容性噩梦的终极指南 【免费下载链接】FileSaver.js An HTML5 saveAs() FileSaver implementation 项目地址: https://gitcode.com/gh_mirrors/fi/FileSaver.js 还在为不同浏览器下载功能差异而烦恼吗?每次实现文件下…

作者头像 李华