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 分别都是 子系统。
他们之间完成 数据通信就有两种 方式:
-
远程调用
-
使用中间件【比如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 下单时,会访问 订单系统( 订单系统如果想调用库存、支付、物流 就有两种方式了 )
-
直接远程调用
这样这四个系统就 耦合在一起了
这种调用方式 会带来的两个 问题:
-
其中有一个系统 比如库存挂掉后,整个链路就 走不通了
从而导致订单 系统也会跟着出现问题
之后就可能让用户 获得“下单失败” 的反馈【这样容错性 就太低了】
-
“加系统”
产品经理现在要在 整个订单链路上 加一个 “x 系统”
那现在 订单系统的开发程序员 就只能修改 订单系统的代码来 “附和 ” ,然后再去访问x 系统
【麻烦】【可扩展性低】
系统的耦合性越高,容错性就越低,可维护性就越低。
-
-
使用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 小结
- 应用解耦:提高系统容错性和可维护性
- 异步提速:提升用户体验和系统吞吐量
- 削峰填谷:提高系统稳定性