RabbitMQ 第一天 基础 1 MQ的基本概念 1.1 MQ 概述 1.2 MQ的优势和 劣势 1.3 MQ的优势

news2024/12/30 3:35:32

RabbitMQ

【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】

文章目录

      • RabbitMQ
      • 第一天 基础
      • 1 MQ的基本概念
        • 1.1 MQ 概述
          • 1.1.1 MQ 概述
          • 1.1.2 小结
        • 1.2 MQ的优势和 劣势
          • 1.2.1 概述
        • 1.3 MQ的优势
          • 1.3.1 应用解耦
          • 1.3.2 异步提速
          • 1.3.3 削峰填谷
          • 1.3.4 小结

第一天 基础

1 MQ的基本概念

1.1 MQ 概述

1.1.1 MQ 概述

MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。

多用于分布式系统之间进行通信。

在分布式 系统中有两种 通信方式

【举个栗子】

在这里插入图片描述

现在有 A、B 各一个系统,它俩虽然职责不同、做的事情 不同,但是它俩 组合起来就会 成为一个大 的系统

这样的系统 就可以 称为分布式 系统。A、B 分别都是 子系统。

他们之间完成 数据通信就有两种 方式:

  1. 远程调用

    在这里插入图片描述

  2. 使用中间件【比如MQ】

    在这里插入图片描述

这个模型中,A 系统用于生产消息,称之为 生产者,B 系统用于消费消息,称为消费者。中间的MQ 称为中间件。

在这里插入图片描述

OK

1.1.2 小结
  • MQ,消息队列,存储消息的中间件
  • 分布式系统通信两种方式:直接远程调用 和 借助第三方 完成间接通信
  • 发送方称为生产者,接收方称为消费者

1.2 MQ的优势和 劣势

1.2.1 概述

MQ 的优势:

  • 应用解耦
  • 异步提速
  • 削峰填谷

MQ的劣势:

  • 系统可用性降低
  • 系统复杂度提高
  • 一致性问题

1.3 MQ的优势

1.3.1 应用解耦

解耦:

耦合,指的是系统之间的相互作用。解耦,自然就是解除系统之间的相互作用。

耦合,最初是物理学里面的概念,但是同义延伸到了很多其他的学科里。

在软件工程里,耦合指的就是软件系统之间的相互作用。这里的系统可以是物理上的集群、机器,也可以是逻辑上的代码模块、类。解耦也就是在解除这些系统在物理和逻辑层面相互作用。

那解耦的意义是什么呢?

主要是为了提高系统的可维护性(Maintainability)和可扩展性(Extensibility)。

这使得在复杂大型系统上的增减删改成为可能,也减少日后的维护成本。

我们开发系统的时候,都会说 要去追求 一个高内聚、低耦合

在分布式 系统中同样如此,我们还是 会需要去降低 系统与 系统之间的耦合性。

【举个例子】

在这里插入图片描述

当用户点击 xx 下单时,会访问 订单系统( 订单系统如果想调用库存、支付、物流 就有两种方式了 )

  1. 直接远程调用

    在这里插入图片描述

    这样这四个系统就 耦合在一起了

    这种调用方式 会带来的两个 问题:

    • 其中有一个系统 比如库存挂掉后,整个链路就 走不通了

      在这里插入图片描述

      从而导致订单 系统也会跟着出现问题

      在这里插入图片描述

      之后就可能让用户 获得“下单失败” 的反馈【这样容错性 就太低了】

    • “加系统”

      产品经理现在要在 整个订单链路上 加一个 “x 系统”

      在这里插入图片描述

      那现在 订单系统的开发程序员 就只能修改 订单系统的代码来 “附和 ” ,然后再去访问x 系统

      在这里插入图片描述

      【麻烦】【可扩展性低】

      系统的耦合性越高,容错性就越低,可维护性就越低。

  2. 使用MQ 中间件

    在这里插入图片描述

    还是这个模型,中间引入了 MQ

    当用户下单后,订单系统之后 要做的就只是 发一条消息给MQ ,

    在这里插入图片描述

    接着就可以 给用户说下单成功了

    在这里插入图片描述

    剩下的工作就是 库存 它们自己去MQ 拿消息进行消费 就行了

    现在这个 模式的话,如果库存系统挂了

    在这里插入图片描述

    订单系统 也不会 受到影响【因为它们 之间是隔离的】【这样容错性 就提高了 】

    在这里插入图片描述

    而且“ 扩展功能” 也变得“平滑” 了,订单系统根本 不需要修改

    这样系统的可维护性 也就大大提高了

    使用 MQ 使得应用间解耦,提升容错性和可维护性。

1.3.2 异步提速

举个例子

【传统】

在这里插入图片描述

还是这个系统

当用户 下单后,订单系统保存数据库 花费 20ms,然后通过远程调用 其他三个服务,需要耗费 300 * 3 ms

这个亚子就是 “同步”

整个链路 耗费的时间 就会 是920 ms

一个下单操作耗时:20 + 300 + 300 + 300 = 920ms

用户点击完下单按钮后,需要等待920ms才能得到下单响应,太慢!

【使用MQ 】

在这里插入图片描述

用户点击完下单按钮后,只需等待25ms就能得到下单响应 (20 + 5 = 25ms)。

提升用户体验和系统吞吐量(单位时间内处理请求的数目)。

1.3.3 削峰填谷

举个例子

在这里插入图片描述

现在有个 A 系统,每秒可以 接收处理用户的1000次 请求

现在 办 活动

在这里插入图片描述

这样导致 A 系统的流量瞬间增大

在这里插入图片描述

比如5000

在这里插入图片描述

这样A 系统就只会 挂掉了

【使用 MQ 后】

在这里插入图片描述

模型引入 MQ 后,用户就只需要 把请求发送到MQ, 然后系统自己 去拿消息进行消费就行了

当请求突然暴增后

在这里插入图片描述

在这里插入图片描述

这就是削峰填谷

使用了 MQ 之后,限制消费消息的速度为1000,这样一来,高峰期产生的数据势必会被积压在 MQ 中,高峰
就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000,直
到消费完积压的消息,这就叫做“填谷”。
使用MQ后,可以提高系统稳定性。

1.3.4 小结
  • 应用解耦:提高系统容错性和可维护性
  • 异步提速:提升用户体验和系统吞吐量
  • 削峰填谷:提高系统稳定性

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringMVC】SpringMVC模型数据+视图解析器

目录 一、模型数据-如何将数据存入request域 二、模型数据-如何将数据存入session域 三、ModelAttribute 四、视图解析器 相关文章 【SpringMVC】入门篇:带你了解SpringMVC的执行流程【SpringMVC】入门篇:带你了解SpringMVC的执行流程 【SpringMVC】使用…

springboot整合swagger

特别说明:本次项目整合基于idea进行的,如果使用Eclipse可能操作会略有不同,不过总的来说不影响。 springboot整合之如何选择版本及项目搭建 springboot整合之版本号统一管理 springboot整合mybatis-plusdurid数据库连接池 springboot整合…

node.js+uni计算机毕设项目儿童健康成长档案小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

暂时性死区以及函数作用域

暂时性死区 暂时性死区也就是变量声明到声明完成的区块,这个区块是一个封闭的作用域,直到声明完成。 如果在变量声明之前使用该变量,那么该变量是不可用的,也就被称为暂时性死区。 var 没有暂时性死区,因为var存在变…

Python编程 递归函数

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.函数执行注意点 二.递归函数 1.递归的介绍 2.例子 前言 本章将会讲解…

新版H5微信网页JS-SDK自定义分享功能实现

1.先用 微信官方文档demo,下载下来去改就行, 概述 | 微信开放文档 2.(后端)填写上认证后的,公众号appid,appsecret。 3.(前端代码) 配置好需要的接口(调试打开debug&a…

自研框架(Webx)整合Zuul网关工作总结

写在前面,最近被分配了一个技术任务,简单描述为自研框架(类比Spring)整合一个微服务网关,并且能用就行。 有人可能会问,想用微服务网关,不是直接引入zuul或者gateway相关的依赖,然后…

【Pandas入门教程】如何合并多个表中的数据

如何合并多个表中的数据 来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study 文章目录如何合并多个表中的数据导包数据准备【1】…

Linux系统基础——文件子系统

title: Linux系统文件子系统 date: 2022-12-18 15:48:24 modify: 2022-12-18 16:48:43 author: wangjianfeng tags: 001-computer-technology, OS, Linux aliases: Linux系统文件子系统 特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料,本文大部分内容和图…

腾讯云轻量应用服务器搭建LAMP 开发环境

LAMP(LinuxApacheMySQLPHP)是目前国际流行的 Web 应用框架,包括了 Linux 操作系统、Apache Web 服务器、MySQL/MariaDB 数据库和 PHP 编程语言环境以及相关组件支持。 说明 LAMP 应用镜像底层基于 CentOS 7.6 64位操作系统。 登录 轻量应用服…

做一个极简 UI 库之代码 lint

eslint, prettier, stylelint 的配置 这三个规则的配置思路:代码美化用 prettier,逻辑代码用 eslint 校验,样式代码用 stylelint 校验。有跟代码美化冲突的以 prettier 为主 为什么要用这么多呢,因为 eslint 不能解析样式代码&a…

数据结构---LRU算法

LRU算法哈希链表自己的JAVA实现LRU全称Least Recently Used,也就是 最近最少使用的意思,是一种内存管理算法,该算法最早应用于Linux操作系统。这个算法基于一种假设:长期不被使用的数据,在未来被用到的几率也不大。因此…

【LeetCode】1754. 构造字典序最大的合并字符串

构造字典序最大的合并字符串 题目描述 给你两个字符串 word1 和 word2 。你需要按下述方式构造一个新字符串 merge :如果 word1 或 word2 非空,选择 下面选项之一 继续操作: 如果 word1 非空,将 word1 中的第一个字符附加到 mer…

node.js+uni计算机毕设项目基于微信小程序校园生活管理LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

基于形态学处理的不规则形状图像的几何参数统计,包括输出面积,周长,圆度,矩形度,伸长度

up目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 形态学是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质的形状特征,如边界和连通…

C#语言实例源码系列-实现文件分割和合并

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

腾讯云轻量应用服务器使用 WooCommerce 应用镜像搭建电商独立站

WooCommerce 是当前很受欢迎的电商独立站建站工具,具备开源、免费、使用简单且功能强大等特点,您可通过该镜像快速搭建基于 WordPress 的电商独立站。该镜像已预装 WordPress(包含 WooCommerce 插件)、Nginx、MariaDB、PHP 软件。…

数据结构之排序【直接选择排序和堆排序的实现及分析】内含动态演示图

文章目录引言:1.直接选择排序2.堆排序3.直接选择排序和堆排序的测试引言: 感觉今天更冷了,码字更加的不易,所以引言就简单的写一下啦!今天我们就来了解一下什么是直接选择排序和堆排序。 1.直接选择排序 时间复杂度…

RabbitMQ 第一天 基础 4 RabbitMQ 的工作模式 4.1 Work queues 工作队列模式

RabbitMQ 【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础4 RabbitMQ 的工作模式4.1 Work queues 工作队列模式4.1.1 模式说明4.1.2 代码编写4.1.3 小结第一天 基础 4 RabbitMQ 的工作模式 4.1 Work queues 工作队列模式 …

ELK第四讲之【docker安装Logstash8.4.3、集成springboot】

docker安装elasticsearch8.4.3 docker安装kibana8.4.3 一、docker安装logstash8.4.3 官方地址 https://github.com/elastic/logstash/releases 1、拉取镜像 docker pull elastic/logstash:8.4.3 2、启动容器 docker run -it -d --name logstash -p 9600:9600 -p 5044:…