RabbitMQ系列1 什么是MQ

MQ(Messgae Queue)

什么是MQ

MQ全称为Message Queue,即消息队列,消息队列是应用程序与应用程序之间通信的一致方法,即在消息的传输过程中保存消息的容器,多用于分布式系统之间的通信

分布式系统通信的两种方式

直接远程调用

在这里插入图片描述

借助第三方完成间接通信

发送方称为生产者
接收方称为消费者


在这里插入图片描述

MQ的优势

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

应用解耦

MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。

未使用MQ之前

如下图有一个订单系统直接调用库存系统,支付系统,物流系统

在这里插入图片描述

由于订单系统与库存系统是耦合的,如果库存系统出现了错误,可能也会影响订单系统不能工作

在这里插入图片描述

如果要新接入一个系统我们还要改变订单系统的源码,并添加一系列代码来实现调用


在这里插入图片描述

这就暴露了一个巨大的缺点,系统的耦合性越高,容错性就越低,可维护性就越低

使用MQ之后

订单系统只要将对应的数据发送到MQ即可,而库存系统,支付系统,物流系统只需MQ中取出对应的数据即可

在这里插入图片描述

如果库存系统出现了错误,也不会影响到订单系统,比如库存系统由于访问量过大突然卡了几秒钟,几秒钟之后可能就好了,好了之后再到MQ中取出对应的数据即可

在这里插入图片描述

比如我们要接入一个系统,我们不需要再修改订单系统的源码,直接让该系统去MQ中取出对应的数据即可

在这里插入图片描述

小总结:

使用MQ使得应用之间实现了解耦,提升容错性与可维护性

异步提速

将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。

未使用MQ

有一个订单系统如图

在这里插入图片描述

用户下订单一共需要300+300+300+20=920ms,订单系统需要一一调用数据库,库存,支付,物流系统,耗时极大

使用MQ之后

在这里插入图片描述

用户下订单需要20+5=25ms

用户下单后,订单系统只需要进行数据库查询和将数据发送到MQ即可告诉用户下单成功,剩下的只需让库存,支付,物流系统自行去MQ中取出数据即可

小总结

提升了用户体验与系统吞吐量

削峰填谷

未使用MQ前

有如下一个系统A每秒最多能处理1000个请求


在这里插入图片描述

但是当请求忽然增加大于了A系统能处理的最大请求数之后就会导致A系统崩溃


在这里插入图片描述
在这里插入图片描述

使用MQ之后

如订单系统,在下单的时候就会往数据库写数据。但是数据库只能支撑每秒1000左右的并发写入,并发量再高就容易宕机。低峰期的时候并发也就100多个,但是在高峰期时候,并发量会突然激增到5000以上,这个时候数据库肯定卡死了。

在这里插入图片描述

消息被MQ保存起来了,然后系统就可以按照自己的消费能力来消费,比如每秒1000个数据,这样慢慢写入数据库,这样就不会卡死数据库了。

在这里插入图片描述

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

在这里插入图片描述

小结

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

MQ的劣势

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

系统可用性降低

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

在这里插入图片描述

系统的复杂性度提高

MQ的加入大大增加了系统的复杂度,以前系统之间是同步的远程调用,现在是通过MQ的异步调用,如何保证消息没有重复消费?如何处理消息丢失的情况?如何保证消息的一致性问题

一致性问题

A系统处理完业务,通过MQ给B,C,D三个系统发消息数据,如果B系统,C系统处理成功,D系统处理失败。如何保证数据处理的一致性

什么时候使用MQ

1.生产者不需要从消费者处获得反馈,引入消息队列之前的调用,其接口返回值因该为空,这才让异步成为了可能

2.容许短暂性的不一致

3.确实是用了可以提升系统稳定性等等,即解耦,提速,削峰这些方面带来的收益,超过了MQ,管理MQ这些成本

常见的MQ产品

目前业界有很多MQ产品,例如RabbitMQ,RocketMQ, ActiveMQ, ZeroMQ, MetaMQ , 也有直接使用Redis充当消息队列的,而这些消息队列产品,在实际选型时,需要结合自身需求与产品特征综合考虑

在这里插入图片描述
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355

推荐阅读更多精彩内容