SpringCloud-同步异步通讯比较

本文详细探讨了同步通讯和异步通讯在信息传递中的区别,以及它们分别带来的优势和不足。通过对支付流程的案例分析,突显了同步通讯可能面临的阻塞和服务依赖问题,而异步通讯通过引入事件驱动模式和消息代理(Broker)成功解决了这些挑战,实现了服务解耦、性能提升和流量削峰。然而,异步通讯也并非没有考验,对消息代理可靠性的依赖和系统架构的复杂性都是需要仔细权衡的因素。在实际应用中,选择采用同步通讯还是异步通讯应当根据具体的业务场景和需求,以最优方式满足系统的通讯要求。


一、同步通讯的优点和问题

1、同步通讯介绍

同步通讯是指在进行信息交流时,发送者和接收者在数据传输的过程中需要保持一致的时间步调,即发送者发出数据后需要等待接收者完成对数据的处理,然后再进行下一步操作。

如图所示,支付完成后,支付服务需要依次请求订单服务、仓储服务、短信服务等等,需要等待上一个服务提供者的响应才可以走到下一个服务提供者,而且一旦遇到一个服务出问题,会导致整个流程都出现问题。


2、同步通讯的优点

优点详细描述
可靠性高由于发送者和接收者的操作是同步进行的,可以更容易地确保数据的正确传递和处理,减少数据丢失或错误的可能性。
简单明了同步通讯模型相对来说较为简单,易于理解和实现。这使得在一些简单的应用场景中更容易使用和维护。
控制灵活通过同步机制,可以更好地控制数据的流动和处理流程,适用于一些需要强调顺序和精确控制的场景。

3、同步调用的问题

微服务间基于Feign的调用就属于同步方式,存在一些问题。

  • 耦合度高,每次加入新的需求都要修,导致资源浪费。

  • 调用链中的每个服务在等待响应过程中不能释放请求占用的资源,高并发场景下性能下降,会极度浪费系统资源。

  • 级联失败会导致调用者需要等待服务提供者的响应。如果服务提供者出现问题,所有调用方都会跟着出问题。

  • 如果调用链过长,则响应时间等于每次调用的时间之和。如同多米诺骨牌一样,迅速改原来的代码会导致整个微服务群故障。


二、异步通讯的优点和问题

1、异步通讯介绍

异步调用常见实现就是事件驱动模式。

如下图,支付服务在完成支付以后,需要订单服务、仓储服务、短信服务各自完成自己的业务。

但是与同步调用不同,我们现在是事件儿驱动模式,不会像之前那样由支付服务来调用这三个服务,而是引入了一个东西叫 Broker(消息代理)。

当用户支付成功时,即触发一个特定事件。这个事件随后由我们的消息代理(broker)进行管理。订单服务、仓储服务和短信服务会向消息代理注册,以表达对支付成功事件的关注,并请求在事件发生时得到通知。这种机制被称为事件代理。

在订阅方面,一旦成功完成订阅,支付服务在未来检测到有用户支付成功时,将发布一个事件,宣告有人支付了,订单号为1001。消息代理随即发出通知,将消息传递给订单服务、仓储服务和短信服务。订单服务会立即响应,更新订单状态;仓储服务负责完成库存扣减和发货;而短信服务则负责发送相应的短信通知。

整个过程通过事件代理实现,确保各服务在业务事件发生时能够协同工作。


2、异步通讯的优点

优点详细描述
服务解耦异步通讯能够实现服务之间的松耦合,使得各个服务能够独立演进,降低彼此之间的依赖性。
性能提升吞吐量提高,异步通讯可以提高系统的性能,通过异步处理消息,服务能够并行执行,从而提高整体吞吐量。
无强依赖服务没有强依赖,不担心级联失败问题。异步通讯使得服务之间没有强依赖关系,不同服务的失败不会直接影响到其他服务,降低了级联失败的风险。
流量削峰异步通讯可以帮助应对突发性的高流量,通过消息队列缓冲和异步处理,实现流量的平滑削峰,避免系统因瞬时高负载而崩溃。

3、步调用的问题

  • 依赖于Broker的可靠性、安全性、吞吐能力: 异步通讯架构中的消息队列作为Broker,其可靠性、安全性和吞吐能力直接影响整个系统。如果消息队列出现故障或不稳定,可能导致消息传递的延迟或丢失。

  • 架构复杂了,业务没有明显的流程线,不好追踪管理: 异步通讯引入了消息队列和异步处理机制,使得系统架构更加复杂。由于消息的异步传递,业务流程线不再直观,可能导致追踪和管理业务流程的困难,特别是在故障排查和调试时。


三、同异步通讯总结

同步通讯在信息传递中要求发送者和接收者保持一致的时间步调,虽然简单直观,但容易面临服务依赖、阻塞等问题,尤其在微服务架构中可能导致级联失败。相反,异步通讯以事件驱动模式和消息代理的方式解决了同步通讯的局限性,实现了服务解耦、性能提升和流量削峰。然而,异步通讯也伴随着对消息代理可靠性和系统架构复杂性的挑战。

在实际应用中,选择采用同步通讯还是异步通讯需根据具体的应用场景和需求,平衡各自的优缺点。同步通讯适用于简单的、直观的业务流程,而异步通讯则更适合复杂的、高并发的系统,尤其在需要实现松耦合、提高系统性能、处理大量并发请求的场景中表现出色。因此,综合考虑业务特点和系统要求,合理选择通讯方式对于构建可靠、高效的分布式系统至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/422986.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm游泳会员管理系统+vue论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统游泳会员信息管理难度大,容错率低&#xff0c…

代码随想录三刷 day11 | 栈与队列之 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

三刷day11 20. 有效的括号1047. 删除字符串中的所有相邻重复项150. 逆波兰表达式求值 20. 有效的括号 题目链接 解题思路: 有三种不匹配的情况: 第一种情况,字符串里左方向的括号多余了 。 第二种情况,括号没有多余,…

我在代码随想录|写代码Day30 | 贪心算法 | 435. 无重叠区间,763.划分字母区间, 56. 合并区间, 738.单调递增的数字

&#x1f525;博客介绍&#xff1a; 27dCnc &#x1f3a5;系列专栏&#xff1a; <<数据结构与算法>> << 算法入门>> << C项目>> &#x1f3a5; 当前专栏: <<数据结构与算法>> 专题 : 数据结构帮助小白快速入门算法 &…

07 编译器

目录 编译过程编译器查看详解函数库自动化构建工具进度条程序 1. 编译过程 预处理: a. 去注释 b.宏替换 c.头文件展开 d.条件编译 编译: 汇编 汇编: 可重定向二进制目标文件 链接: 链接多个.o, .obj合并形成一个可执行exe gcc编译c程序, g编译c程序 2. 编译器查看 输入gcc …

C语言-----动态内存管理(1)

1.引入 我们之前已经学习了几种开辟内存空间的方式&#xff1a; &#xff08;1&#xff09;int a10;开辟4个字节大小的空间 &#xff08;2&#xff09;int arr[10]{0}定义数组开辟了一串连续的空间 2.malloc和free (1)malloc开辟内存空间可能会失败&#xff0c;因此需要检查…

leetcode括号生成

题目描述 解题思路 首先看到题目&#xff0c;一开始是并没有思路的。这时候可以在纸上进行演算一下结果。当只有一对括号的时候&#xff0c;我们可以得知结果[“()”],当有两对括号的时候&#xff0c;我们可以发现&#xff0c;括号在第一个基础上&#xff0c;要么在括号内部出…

【EAI 026】RoboGen: 通过自动数据生成管线实现机器人技能学习

Paper Card 论文标题&#xff1a;RoboGen: Towards Unleashing Infinite Data for Automated Robot Learning via Generative Simulation 论文作者&#xff1a;Yufei Wang, Zhou Xian, Feng Chen, Tsun-Hsuan Wang, Yian Wang, Zackory Erickson, David Held, Chuang Gan 作者单…

瑞_Redis_Redis客户端

文章目录 1 Redis客户端1.1 Redis命令行客户端1.2 图形化桌面客户端1.2.1 资源准备1.2.2 安装1.2.3 建立连接附&#xff1a;解决Liunx防火墙和开放端口号 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《Redis》的基础篇的Redis客户端章节。由于博主是从B站黑马程序员的…

GraphPad Prism 10: 你的数据,我们的魔法 mac/win版

GraphPad Prism 10是GraphPad Software公司推出的一款功能强大的数据分析和可视化软件。它集数据整理、统计分析、图表制作和报告生成于一体&#xff0c;为科研工作者、学者和数据分析师提供了一个高效、便捷的工作平台。 GraphPad Prism 10软件获取 Prism 10拥有丰富的图表类…

接口测试(全)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 大多数人对于接口测试都觉得是一种高大上的测试&#xff0c;觉得…

《无线网络技术》考试版笔记

第一章 无线网络介绍 什么是多径效应&#xff0c;如何去克服&#xff1a; 在发射机和接收机之间没有明显的直线路径时&#xff0c;就会产生多径传播。如果两个信号彼此叠加&#xff0c;那么接收设备就无法正确解调信号&#xff0c;无法还原为它的原始数据形式。 可以稍微调整接…

NOC2023软件创意编程(学而思赛道)python小高组初赛真题

软件创意编程 一、参赛范围 1.参赛组别:小学低年级组(1-3 年级)、小学高年级组(4-6 年级)、初中组。 2.参赛人数:1 人。 3.指导教师:1 人(可空缺)。 4.每人限参加 1 个赛项。 组别确定:以地方教育行政主管部门(教委、教育厅、教育局) 认定的选手所属学段为准。 二、…

LeetCode 热题 100 | 图论(二)

目录 1 基础知识 1.1 什么是拓扑排序 1.2 如何进行拓扑排序 1.3 拓扑排序举例 2 207. 课程表 3 210. 课程表 II 菜鸟做题&#xff0c;语言是 C 1 基础知识 1.1 什么是拓扑排序 含义&#xff1a;根据节点之间的依赖关系来生成一个有序的序列。 应用&#xff1a…

【Java数据结构 -- 二叉树+树的深度优先遍历】

二叉树 1. 二叉树1.1 二叉树的介绍1.2 两种特殊的二叉树1.3 二叉树的性质1.4 二叉树的存储 2. 二叉树的基本操作2.1 二叉树的创建2.2 二叉树的优先遍历2.3 递归实现二叉树遍历2.4 用非递归实现二叉树遍历 1. 二叉树 1.1 二叉树的介绍 二叉树是一种数据结构&#xff0c;一颗二…

虚拟机数据恢复-虚拟机误还原快照后如何恢复还原前的数据?

虚拟机数据恢复环境&故障&#xff1a; 由一台物理服务器迁移到ESXI上的虚拟机&#xff0c;虚拟机迁移完成后做了一个快照&#xff0c;该ESXI上面一共运行了数十台虚拟机。某天工作人员不小心将快照进行了还原&#xff0c;虚拟机内的数据还原到了数年前刚迁移过来时的状态&a…

超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

前几篇文章介绍了 pytest 点的基本使用&#xff0c;学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求。从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数&#xff0c;插件开发等等。 仔细去看过 pytest 文档的小伙伴&#xff0c;应该都有发现 pyt…

利用小蜜蜂AI智能问答ChatGPT+AI高清绘图生成图文故事案例

利用小蜜蜂AI智能问答ChatGPTAI高清绘图生成图文故事案例 这段时间利用小蜜蜂AI网站做了一些编程、绘图以及数据分析方面的案例。再过几个月&#xff0c;我的大孙子就要出生了。我要用小蜜蜂AI智能问答和AI高清绘图为大孙子生成一个1-9的数字图文故事。 小蜜蜂AI网站可以扫如…

DangZero:通过直接页表访问的高效UAF检测(DangZero实现IMPLEMENTATION翻译)

We implement DangZero as a shared library that overlays the de- fault memory allocator via LD_PRELOAD. Additionally, DangZero requires a backend to be available for direct page table access, which we describe in detail in the following section. 我们将DangZ…

CTFHUB 命令执行

命令执行 原理&#xff1a; 在编写程序的时候&#xff0c;当碰到要执行系统命令来获取一些信息时&#xff0c;就要调用外部命令的函数&#xff0c;比如php中的exec()、system()等&#xff0c;如果这些函数的参数是由用户所提供的&#xff0c;那么恶意用户就可能通过构造命令拼…

Android编程环境搭建

一、下载软件&#xff1a; JDK、Android SDK、Android Studio 1.1 首先下载安装JDK 登录Java Downloads | Oracle网站下载javaJDK11&#xff0c;具体步骤如图1所示 图1 下载安装JDK 1.2 下载安装 Android Studio 到 Android Studio 的官网上下载对应安装包&#xff0c;链接…