文章目录
- 前言
- 一、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这些成本