01-分析同步通讯/异步通讯的特点及其应用

同步通讯/异步通讯

微服务间通讯有同步和异步两种方式

  • 同步通讯: 类似打电话场景需要实时响应(时效性强可以立即得到结果方便使用),而且通话期间不能响应其他的电话(不支持多线操作)
  • 异步通讯: 类似发邮件场景不需要马上回复并且可以多线操作(适合高并发场景)但是时效性弱响应会有延迟

同步通讯的缺点

微服务间基于Feign的调用就属于同步方式,虽然调用可以实时得到结果但是存在一些问题

  • 耦合度高: 每次加入或删除业务都需要去支付服务中改动原来的代码
  • 性能/吞吐能力下降: 调用者(支付服务)需要等待服务提供者响应完成后才能执行下一步的操作,如果调用链过长则响应时间等于每次调用服务的时间之和
  • 资源浪费: 调用者(支付服务)在等待服务提供者响应过程中啥也不干却一直占用着CPU和内存,高并发场景下会极度浪费系统资源
  • 级联失败: 如果服务提供者(仓储服务)出现问题会导致所有的请求都卡在这里,最后随着请求越来越多支付服务也会将系统资源耗尽导致整个微服务故障
    在这里插入图片描述
// 用户支付完成支付服务调用其他服务
public void PaymentService() {
    // 调用订单服务完成订单状态修改
    orderService.doSth();
    // 调用物流服务从仓库分配响应的库存并准备发货
    storageService.doSth();
    messageService.doSth();
    ...
}

异步通讯

异步调用的常见实现是事件驱动模式,如购买商品时用户支付后需要调用订单服务完成订单状态修改,调用物流服务从仓库分配响应的库存并准备发货

  • 支付服务是事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单Id
  • 订单服务和物流服务是支付成功事件的订阅者(Consumer),订阅者监听到自己订阅的事件发布后就会执行对应的业务逻辑代码
  • Broker: 事件发布者与订阅者之间的并不是直接通信(解耦合),发布者只负责发布事件到Broker(不关心订阅者),订阅者负责从Broker订阅事件(不关心发布者)

异步通讯的优点

  • 吞吐量/性能提升: 支付服务只需要向Broker发布一个支付成功的事件剩下的就不用它管了
  • 故障隔离: 如果仓储服务挂掉也丝毫不会影响到支付服务,因为支付服务不需要等待仓储服务响应完成, 所以支付服务也就不会再占用无意义的系统资源
  • 流量削峰: 不管发布事件的流量波动多大都是由Broker接收,订阅者可以按照自己的处理速度去Broker取事件处理
  • 添加新服务时只需要让新服务来订阅事件,删除服务时只需要让服务取消订阅事件,不需要修改支付服务的代码解除了服务之间的耦合

异步通讯的缺点

  • 整个异步通讯过程中所有服务间的调用都是依赖于Broker来实现的,所以对Broker的可靠性,安全性,吞吐能力要求较高
  • 异步通讯导致架构复杂,业务没有明确的流程线出了问题不方便追踪管理
    在这里插入图片描述

相关技术

MQ(MessageQueue)中文是消息队列即存放消息(事件)的队列,也就是事件驱动模式中的Broker

  • 追求可用性: Kafka、RockerMQ、RabbitMQ
  • 追求可靠性: RabbitMQ、RocketMQ
  • 追求吞吐能力: RocketMQ、Kafka
  • 追求消息低延迟: RabbitMQ、Kafka

在这里插入图片描述

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

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

相关文章

Unmanaged PowerShell

简介 在渗透测试当中经常会使用到PowerShell来执行脚本, 但是直接使用PowerShell.exe是一个非常敏感的行为, EDR等产品对PowerShell.exe进程的创建监控的很密切, 并且随着PowerShell的渗透测试工具的普及, 越来越多的EDR会利用微软提供的AMSI接口对PS脚本进行扫描, 但是对于低…

[短文]不同空白字符导致程序执行失败问题

屏幕显示的一个空白字符,对于编程者来说,并无差异,但底层截然不同的表示方法,极大可能导致程序执行失败! 今天博主就遇到一个空格字符的问题,大概情况是前端编写SQL传入,后端有时可以执行&…

Uninty 鼠标点击(摄像机发出射线-检测位置)

平面来触发碰撞,胶囊用红色材质方便观察。 脚本挂载到胶囊上方便操作。 目前实现的功能,鼠标左键点击,胶囊就移动到那个位置上。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c6 : MonoBe…

DNS服务

简介 DNS:domain name service 域名服务 作用:为客户机提供域名解析 dns 监听端口:53端口 分为 udp(只负责向外发) 和 tcp(确保正常发送至对端,对端发送数据包表示已经收到) 搭建…

解密QQ盗号诈骗APP:逆向溯源,探寻幕后黑色操作

逆向溯源qq盗号诈骗app 起因 专注于web漏洞挖掘、内网渗透、免杀和代码审计,感谢各位师傅的关注!网安之路漫长,与君共勉! 分析该app是源于朋友被盗号了,对方发了个app想盗号,这怎么能惯着他?这不…

day16_购物车(添加购物车,购物车列表查询,删除购物车商品,更新选中商品状态,完成购物车商品的全选,清空购物车)

文章目录 购物车模块1 需求说明2 环境搭建3 添加购物车3.1 需求说明3.2 远程调用接口开发3.2.1 ProductController3.2.2 ProductService 3.3 openFeign接口定义3.3.1 环境搭建3.3.2 接口定义3.3.3 降级类定义 3.4 业务后端接口开发3.4.1 添加依赖3.4.2 修改启动类3.4.3 CartInf…

MyBatisPlus理解

MyBatisPlus是mybatis的增强,mybatis是数据库持久化的框架,但mybatisplus并不是替代mybatis,而是相辅相成的关系 MyBatisPlus不会对以前使用mybatis开发的项目进行影响,引入后仍然正常运行。 使用方法: 1.在引入了对…

[力扣 Hot100]Day48 路径总和 III

题目描述 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到…

再谈 Cookie 和 Session

文章目录 1. 核心方法:HttpServletRequest 类中HttpServletResponse 类中HttpSession类中Cookie类中 2.实现登录界面 Cookie 是浏览器在本地持久化存储数据的一种机制。 Cookie 的数据从哪里来? 是服务器返回给浏览器的。 Cookie 的数据长什么啥样&#…

Chapter20-Ideal gases-CIE课本要点摘录、总结

20.1 Particles of a gas Brownian motion Fast modules 速率的数值大概了解下: average speed of the molecules:400m/s speed of sound:approximately 330m/s at STP(standard temperature and pressure) Standard Temperature and Pres…

不同路径 不同路径 II 整数拆分

62.不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。…

标准不锈钢电阻-栅极电阻器的设计方案

EAK不锈钢栅极电阻器 可靠的不锈钢电阻元件和端子 所有装置均为三重绝缘,适用于 1000V 交流或直流 标准电网电阻器有现货,可减少代价高昂的停机时间 在很宽的温度范围内具有稳定的耐受性 高功率可节省空间、重量和成本 标准 26.5 英寸尺寸&#xf…

PDF24 Creator PDF工具箱 v11.17.0

软件介绍 可将大部分文件转成pdf格式的免费软件,安装好后会在你的打印机里看到一个叫PDF24的虚拟打印机,你可将要转成pdf格式的文件打印时选虚拟打印机PDF24,也可以直接将文件以拖拉方式拉进这软件的主视窗编辑区里,它会自动转成…

OD_2024_C卷_200分_6、六_连续出牌数量【JAVA】【回溯算法】

题目描述 package odjava;import java.util.Arrays; import java.util.Scanner;public class 六_连续出牌数量 {// 定义扑克牌类static class Card {int num; // 牌号char color; // 花色public Card(int num, String color) {this.num num;this.color color.charAt(0); // 取…

Liinux——(网络)socket编程

预备知识 源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址 认识端口号 端口号(port)是传输层协议的内容. 端口号是一个2字节16位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪个进程来处理;IP地址 端口号能…

js【详解】DOM

文档对象模型(Document Object Model,简称DOM) DOM 是哪种数据结构 ? DOM 的本质是浏览器通过HTML代码解析出来的一棵 树。 操作 DOM 常用的 API 有哪些 ? 获取 DOM 节点 //方式 1:通过【id】获取&#xf…

每日学习笔记:C++ STL 的队列Deque

定义 内存模型 Deque与Vector比较 操作函数 运用实例

每日OJ题_牛客HJ73 计算日期到天数转换(IO型OJ)

目录 牛客HJ73 计算日期到天数转换 解析代码 牛客HJ73 计算日期到天数转换 计算日期到天数转换_牛客题霸_牛客网 解析代码 #include <iostream> using namespace std; int main() {int year 0, month 0, day 0, sum 0;cin >> year >> month >>…

文本向量评测MTEB和C-MTEB

文章目录 简介MTEBC-MTEB参考资料 简介 MTEB(Massive Text Embedding Benchmark)是目前评测文本向量很重要的一个参考&#xff0c;其榜单也是各大文本向量模型用来展示与其他向量模型强弱的一个竞技台。 C-MTEB则是专门针对中文文本向量的评测基准。 MTEB MTEB的目的是为了…

esp32 GDEH0154D67屏幕调试

官方资料 说明手册&#xff1a;GDEH0154D67specf3d5.pdf (e-paper-display.cn) 官网&#xff1a;1.54寸黑白单色电子纸显示屏 200x200分辨率电子墨水屏 GDEH0154D67,黑白电子纸屏,电子墨水屏-大连佳显 (e-paper-display.cn) 驱动代码来源&#xff1a;桌面小屏幕实战课程资料…