SpringCloud-同步异步通讯比较

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


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

1、同步通讯介绍

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

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


2、同步通讯的优点

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

3、同步调用的问题

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

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

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

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

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


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

1、异步通讯介绍

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

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

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

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

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

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


2、异步通讯的优点

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

3、步调用的问题

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

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


三、同异步通讯总结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web后端开发总结(黑马学习笔记)

我们来回顾一下关于web后端开发,我们都学习了哪些内容,以及每一块知识,具体是属于哪个框架的。 web后端开发现在基本上都是基于标准的三层架构进行开发的,在三层架构当中,Controller控制器层负责接收请求响应数据&…

MySQL 主从读写分离入门——基本原理以及ProxySQL的简单使用

一、读写分离工作原理 读写分离的工作原理:在大型网站业务中,当单台数据库无法满足并发需求时,通过主从同步方式同步数据。设置一台主服务器负责增、删、改,多台从服务器负责查询,从服务器从主服务器同步数据以保持一…

Unity 切换场景

场景切换前必须要将场景拖动到Build中 同步加载场景 using System.Collections; using System.Collections.Generic; //using UnityEditor.SearchService; using UnityEngine; // 场景管理 需要导入该类 using UnityEngine.SceneManagement;public class c3 : MonoBehaviour {…

ECMAScript-262 @2023版本中的关键字和保留字

1、什么是标识符? 所谓标识符,就是javascript里的变量、函数、属性或函数参数的名称,可由一个或多个字符组成,当然标识符有命名规范 标识符第一个字符必须是 一个字母、下划线(_)或美元符号($…

我做的app上架应用市场一天,快破400下载量,0差评

上集说到,我做了一个叫QB音乐的安卓app,经过一段时间的自我使用与测试终于算发布了。我昨天顺便把它上架了奇妙应用市场,截止目前3月1号过去了一天,下载量快到400,0差评。看来还是能正常使用的。 一、为什么做这个ap…

vscode+remote突然无法连接服务器以及ssh连接出问题时的排错方法

文章目录 设备描述状况描述解决方法当ssh连接出问题时的排错方法 设备描述 主机:win11,使用vscode的remote-ssh插件 服务器:阿里云的2C2GUbuntu 22.04 UFIE 状况描述 之前一直使用的是vscode的remote服务,都是能够正常连接服务…

php httpfs链接hdfs

一.代码(有bug) GitHub - michaelbutler/php-WebHDFS: A PHP client for WebHDFS 二.调用代码 1.代码1.代码 require_once(../webhdfs/src/org/apache/hadoop/WebHDFS.php);require_once(../webhdfs/src/org/apache/hadoop/tools/Curl.php); require_o…

vue+springboot项目部署服务器

项目仓库:vuespringboot-demo: vuespringboot增删改查的demo (gitee.com) ①vue中修改配置 在public文件夹下新建config.json文件: {"serverUrl": "http://localhost:9090"//这里localhost在打包后记得修改为服务器公网ip } 然后…

string【基础篇】

1.1string字符串类 注意:这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个 类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。 总结: string是表…

计算机网络-网络互连和互联网(五)

1.路由器技术NAT: 网络地址翻译,解决IP短缺,路由器内部和外部地址进行转换。静态地址转换:静态NAT(一对一) 静态NAT,内外一对一转换,用于web服务器,ftp服务器等固定IP的…

Thinkphp框架漏洞--->5.0.23 RCE

1.Thinkphp ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化 企业应用开发而诞生的。 2.漏洞原理及成因 该漏洞出现的原因在于 ThinkPHP5框架底层对控制器名过滤不严 ,从而让攻击者可以通过…

Vue2:路由的两种模式history模式和hash模式

一、情景说明 之前我们写的项目启动后,浏览器访问时,路径中会有个#/,会导致不够美观 因为一般的访问地址都是http://123.123.123.123/aaa/bbb这种形式 这一篇,就来解决这个问题 二、案例 1、hash模式 特点:#/后的…