• MQ消息队列


    MQ消息队列

    消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列

    消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件

    使用消息队列还可以实现异步处理

    下图便是消息队列的基本模型,向消息队列中存放数据的叫做生产者,从消息队列中获取数据的叫做消费者

    在这里插入图片描述

    • MQ消息队列的应用场景(本次只讨论异步跟削峰)
      • 异步处理:提升了用户体验
      • 削峰填谷:提高了系统的稳定性

    异步处理

    消息队列的主要特点是异步处理,主要目的是减少请求响应时间,实现非核心流程异步化,提高系统响应性能。

    要了解异步处理首先得了解同步处理

    举一个用户注册的例子,用户注册成功后,系统需要发送注短信注册成功通知,以及赠送注册成功的积分

    1 采用同步处理的方式

    在这里插入图片描述

    同步处理的总耗时:10ms+100ms+100ms=210ms

    2 采用异步方式处理

    在上诉操作中注册是核心的操作,由于短信通知与增加积分为非核心流程,为了提升系统响应性能,提高用户体验,从而我把它改造为异步。

    看下图

    在这里插入图片描述

    用户注册10ms就返回注册成功

    后续发送短信和增加积分的操作下发到MQ消息队列,由其他服务从MQ消息队列获取消息进行处理,处理成功后用户接收到短信,并且增加积分

    流量削峰

    流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛

    这种场景中系统的峰值流量往往集中于一小段时间内,所以为了防止系统在短时间内的峰值流量冲垮,往往采用消息队列来削弱峰值流量,相当于消息队列做了一次缓冲。

    看下图

    不使用消息队列直接调用服务处理,碰到这种一瞬间过大的压力服务器可能会崩溃

    在这里插入图片描述

    但是使用了消息队列可以将请求给MQ消息队列处理,然后由MQ每秒拉出1000个请求给A系统处理

    在这里插入图片描述

    最终走势

    在这里插入图片描述

    可以看到左侧没有使用MQ消息队列,峰值很高,服务器随时都有可能会崩溃

    右侧利用了消息队列,先收集所有请求,再固定每秒拉取的请求去处理,处理请求的同时防止服务器崩溃

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

    完整服务架构
    在这里插入图片描述
    我们将一些核心的功能和操作放到http主服务,非核心的操作可以使用消息队列进行处理

  • 相关阅读:
    Python 编程基础 | 第一章-预备知识 | 1.1、Python简介
    拿来就用:11款不容错过的 Node.js 框架
    vue2.x版本中computed和watch的使用入门详解-computed篇
    记一次 Windows10 内存压缩模块 崩溃分析
    【缺陷检测】基于matlab GUI印刷电路板自动缺陷检测【含Matlab源码 1912期】
    清览题库--C语言程序设计第五版编程题解析(2)
    springboot+springsecurity+jwt+elementui图书管理系统
    cadence SPB17.4 - CIS DB - add MECHANICAL part
    借助MLOps平台简化联邦学习工作流程
    PowerBI_一分钟了解POWERBI计算组_基础运用篇(环同比分析)
  • 原文地址:https://blog.csdn.net/karsa__/article/details/127732954