文章目录
- 前言
- 一、MQ是什么?
- 1.1基本概念
- 1.2MQ的优势和劣势
- 优势
- 应用解耦
- 异步提速
- 削峰填谷
- 劣势
- 二、常见的MQ产品
- 总结
前言
实习之MQ学习历程
一、MQ是什么?
1.1基本概念
MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信(分布式系统:A、B两系统职责不一样,但是组合起来是一个大的系统,我们就称之为分布式系统)
分布式系统的通信问题:
有两种通信方式1.直接远程调用 2.发送者(生产者)发送给中间者(中间件),由中间者发送给接收者(消费者)。MQ属于第二种
1.2MQ的优势和劣势
优势
1.应用解耦
2.异步提速
3.削峰填谷
应用解耦
我们写代码都追求高内聚低耦合,因为耦合度降低了可维护性就提高了
由订单系统之间耦合三个子系统,会出现两个问题:
1.容错性低:列如库存系统产生异常导致库存系统挂掉,那么在用户下订单的时候整个链路走不通,可能导致订单系统出现问题
2. 可复用性低:例如要新增模块,那么只能在订单系统上修改
通过中间件解决直接通过远程调用的时带来得弊端
1.当用户发送订单给MQ,MQ就直接返回订单成功的响应 而后续的三个子系统只需要在MQ中把订单系统的数据拿出来,在自己的系统里去消费,从而把订单系统与三个子系统隔离起来了,子系统挂掉也没有关系,因为数据存在MQ中,只要子系统恢复以后,再从MQ中拿到数据执行,最终数据肯定正常,容错性提高
2.增加新模块 新模块也只用在MQ中拿数据 订单系统不需要改代码
异步提速
1.直接通过远程调用,会依次调用三个子系统,子系统没问题则存入数据库 耗时920ms
加入MQ中间件时,则只需要存入库操作与给MQ发送数据操作 就返回成功信息给前端,而三个子系统是否执行成功不影响,子系统再慢慢从mq拿数据执行 只需要消费25ms 提高了系统的吞吐量
削峰填谷
当请求远超A系统最大处理请求时,回导致A系统挂掉
当请求超过A系统最大请求时:因为用户对接的是MQ,然后A系统再慢慢从MQ拉取最大处理请求量处理请求 提高了系统的稳定性
劣势
1.系统可用性降低
系统引入的外部依赖越多,系统稳定性越差,一旦MQ宕机,就会对业务造成影响
2.系统复杂度提高
MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用,需要考虑消息有没有被重复消费,消息丢失,与顺序问题。
3.一致性问题
A系统处理完业务,通过MQ给子系统发消息数据,子系统有些处理成功有些失败,如何保证消息数据处理的一致性
二、常见的MQ产品
RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ等、Redis也可以直接充当消息队列
总结
使用MQ条件
1.生产者不需要从消费者处获取反馈,引入消息队列之前的直接调用,其接口的返回值应该为空,这才让明明下层的动作还没做,上层却当成动作做完了继续往后走,即所谓异步成为了可能
容许短暂的不一致性。
解耦、提速、削峰这些方面的收益超过加入MQ、管理MQ这些成本