面试官:MQ的好处到底有哪些?
创始人
2024-06-03 08:08:41
0

💗推荐阅读文章💗

  • 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》
  • 🌺MySQL系列🌺👉2️⃣《MySQL系列教程》
  • 🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》
  • 🌻SSM框架系列🌻👉4️⃣《SSM框架系列教程》

🎉本博客知识点收录于🎉👉🚀《RabbitMQ系列教程》🚀—>✈️《RabbitMQ系列教程-第一章-消息中间件简介》✈️

文章目录

  • 一、消息中间件简介
    • 1.1 概述
    • 1.2 消息中间件的好处
      • 1.2.1 应用解耦
      • 1.2.2 异步处理
      • 1.2.3 流量削峰
    • 1.3 消息中间件带来的问题
      • 1.3.1 消息一致性
      • 1.3.2 消息重复消费(消息幂等性)
      • 1.3.3 成本问题
    • 1.3 常见MQ性能对比
    • 1.4 AMQP和JMS

一、消息中间件简介

1.1 概述

MQ全称为Message Queue,消息队列是消息在传递过程中的容器,消息队列常用于分布式系统之间的通信

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构;使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ以下介绍消息队列在实际应用中常用的使用场景:异步处理,应用解耦,流量削锋和消息通讯四个场景

1.2 消息中间件的好处

在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高系统吞吐量

1.2.1 应用解耦

在我们的应用中,下订单同时需要调用库存系统、支付系统等业务;

在这里插入图片描述

随着业务升级,需要更改业务需求,在下订单的同时需要对接积分系统进行加积分操作,因此结果变为如下:

在这里插入图片描述

从上图的演变我们可以知道,随着业务的不断升级,业务的不多增加,我们可能需要频繁的修改订单系统的代码,现在我们的订单系统严重和其他系统耦合在一起了,可维护差;不仅如此,当订单系统调用库存系统时,如果库存系统不能够及时响应,那么必定会造成订单系统的延迟,或者库存系统出现错误,那么也很有可能导致订单系统出现故障,系统的容错性非常低

为了解决上述问题,我们引入了消息中间件(MQ):

在这里插入图片描述

当订单系统需要对接其他系统时,只需要发消息给MQ,由MQ来通知其他系统进行业务操作,订单系统只与MQ进行对接,从而解决我们上面的几个问题;

  • 1、业务耦合

  • 2、系统延迟

  • 3、容错性低

1.2.2 异步处理

在我们没有引入MQ之前的老系统中,调用订单系统,等待订单系统处理完业务逻辑之后响应客户端大概需要时间:200ms+200ms+200ms=600ms

在这里插入图片描述

引入了MQ队列之后只需要5ms!

在这里插入图片描述

这里说明一点:我们之前讲MQ概述时已经讲过,MQ适用于一些无需即时返回且耗时的操作,假设在上述架构中,订单系统需要库存系统返回某值后才能进行下一步操作则不适用于MQ;

1.2.3 流量削峰

流量削峰指的是在应用服务器面对大流量访问时,MQ可以帮助我们进行流量的限流操作,削弱流量,保证服务器的正常运行;

假设现在某电商网站搞促销活动,导致流量迅速激增,已经远远超过应用服务器的压力承受范围,此时如果不进行流量(QPS)的控制,那么应用服务器很有可能会出现故障:

在这里插入图片描述

为了防止过度的流量同时进入我们的应用服务器,导致应用服务器最终宕机,我们可以进行限流手段,即每秒从MQ中拉取1000个请求进行处理:

在这里插入图片描述

由于高并发的访问,消息会被挤压在MQ中,在高峰期过后,仍有一段时间内消息消费的速度维护在1000/s,直到积压的消息全部被消费完毕;

1.3 消息中间件带来的问题

1.3.1 消息一致性

在这里插入图片描述

如上图,如果订单系统给其他系统发送完毕消息后,某个系统处理失败,该如何保证数据的一致性?

1.3.2 消息重复消费(消息幂等性)

当我们一个接口多次消费一个消息时,我们需要保证这个操作无论被操作多少次其结果是一样的,这个时候我们就需要保证接口的幂等性;

幂等:一个操作任意执行多次与执行一次的结果是相同的

在这里插入图片描述

在上述系统中,如果执行库存系统出现问题,那么订单系统会重发消息,但是支付和积分系统是没有任何问题的,但由于消息的重发,导致支付和积分系统再次消费一次消息;

1.3.3 成本问题

  • 系统可用性降低

系统引入的外部依赖越多,系统稳定性越差。一旦 MQ 宕机,就会对业务造成影响。如何保证MQ的高可用?

  • 系统复杂度提高

MQ 的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过 MQ 进行异步调用。需要保证MQ带来的一系列问题

1.3 常见MQ性能对比

RabbitMQActiveMQRocketMQKafka
公司/社区RabbitApache阿里Apache
开发语言ErlangJavaJavaScala&Java
协议支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定义自定义协议,社区封装了http协议支持
客户端支持语言官方支持Erlang,Java,Ruby等,社区产出多种API,几乎支持所有语言Java,C,C++,Python,PHP,Perl,.net等Java,C++(不成熟)官方支持Java,社区产出多种API,如PHP,Python等
单机吞吐量万级(其次)万级(最差)十万级(最好)十万级(次之)
消息延迟微秒级毫秒级毫秒级毫秒以内
功能特性并发能力强,性能极其好,延时低,社区活跃,管理界面丰富老牌产品,成熟度高,文档较多MQ功能比较完备,扩展性佳只支持主要的MQ功能,毕竟是为大数据领域准备的。

1.4 AMQP和JMS

  • AMQP:即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,进程间传递异步消息网络协议。为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端中间件不同产品的限制,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。

  • JMS:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数消息中间件提供商都对JMS提供支持。

AMQP是基于消息传输的一个应用层协议,JMS准确的来说是Java操作MQ的一套API,类似于JDBC,第三方厂商(MySQL厂商、MQ厂商)进行功能的实现,Java则使用JMS对厂商进行规范;

相关内容

热门资讯

两代鸟的交谈作文【推荐3篇】 篇一:两代鸟的交谈近日,我在公园里目睹了一场令人惊叹的景象,一只年轻的鸟儿和一只老年鸟儿正在愉快地交...
一年级关于英雄事迹的作文50... 一年级关于英雄事迹的作文500字 篇一:《我的英雄》我的英雄是我的爸爸。他是一位普通的上班族,每天都...
记一件事小学生作文(精彩6篇... 记一件事小学生作文 篇一我和小狗的故事今天,我要给大家讲一个关于我和小狗的故事。这个故事发生在我上小...
抗击新型肺炎作文【通用5篇】 抗击新型肺炎作文 篇一:团结一心,共克时艰新型冠状病毒肺炎疫情突如其来,给我们的生活带来了巨大的冲击...
我可怜的橡皮泥状物作文【优质... 我可怜的橡皮泥状物作文 篇一橡皮泥是我最喜欢的玩具之一,可是它现在变得可怜兮兮的了。曾经,它是我快乐...
一年级作文水牛【经典6篇】 一年级作文水牛 篇一水牛是我国常见的牲畜之一,它们体型庞大,力大无穷,是农民朋友们的好帮手。今天,我...
我和我的好朋友作文【精彩6篇... 我和我的好朋友作文 篇一好朋友,是我们成长中最重要的陪伴。我有一个好朋友,她叫小芳。我们从小学开始就...
耳朵、鼻子和眼睛小学作文(推... 耳朵、鼻子和眼睛小学作文 篇一标题:我的耳朵、鼻子和眼睛我的耳朵、鼻子和眼睛是我身体上非常重要的器官...
课本剧表演作文(精选6篇) 课本剧表演作文 篇一我们班级最近进行了一次精彩的课本剧表演,给我们带来了很多乐趣和收获。这次表演的题...
最重要的一天小学作文【优选3... 最重要的一天小学作文 篇一最重要的一天小学作文今天是我人生中最重要的一天,因为我终于迎来了小学毕业典...
大爱无疆的作文(推荐6篇) 大爱无疆的作文 篇一无论身处何地,无论面对何种困境,大爱无疆的精神都是我们应该秉持的。在这个充满爱与...
二十年后的我小学作文(推荐6... 二十年后的我小学作文 篇一我是一名小学生,现在正在写一篇关于二十年后的我小学作文。在二十年后,我已经...
有趣的机器人小学优秀作文【通... 有趣的机器人小学优秀作文 篇一机器人小猫咪在一个不太远的未来,机器人成为了人们生活中不可或缺的一部分...
我最闪亮小学作文(优质3篇) 我最闪亮小学作文 篇一我最闪亮小学作文 我最闪亮小学作文 篇二第一篇内容标题:我最喜欢的老师作为一个...
鹭岛秋色秋游作文【最新3篇】 鹭岛秋色秋游作文 篇一鹭岛秋色秋游秋天是一年四季中最美丽的季节之一,而鹭岛也是一个恰如其分展现秋天之...
有趣的冬游小学作文(最新6篇... 有趣的冬游小学作文 篇一冬天是一个寒冷但又充满乐趣的季节。每当冬天来临,我就迫不及待地期待着一次有趣...
心情也有颜色作文(推荐3篇) 心情也有颜色作文 篇一心情也有颜色有时候,我们会发现自己的心情和颜色有着奇妙的联系。不同的心情会赋予...
我和神笔马良的一天作文【优质... 我和神笔马良的一天作文 篇一在一个阳光明媚的早晨,我迫不及待地来到了神笔马良的工作室。这是一个充满创...
大智若愚小学作文(精选3篇) 大智若愚小学作文 篇一大智若愚小学作文大智若愚是一种非常有意思的格言。它告诉我们,虽然我们可能很聪明...
《一九四二》观后感500字(... 《一九四二》观后感500字 篇一电影《一九四二》是一部由冯小刚导演的历史题材电影,该片以中国抗日战争...