文章目录
MQ 消息中间件
一、初识MQ
1、同步通讯
同步通讯和异步通讯
- 同步通讯 - 手机通话
- 异步通讯 - 微信消息
同步调用存在的问题
微服务间基于Feign的调用就属于同步调用,存在一些问题:
请求 -> 支付服务(总耗时450mm…) -> (订单服务(150mm)、仓储服务(150mm)、短信服务(150mm) …)
- 耦合度高
- 每次加入新的需求,都要修改原来的代码
- 性能下降
- 调用者需要等待服务提供者响应,如果调用链过长则响应时间等于每次调用时间之和
- 资源浪费
- 调用链中的每个服务在等待响应过程中,不能释放请求占用的资源,高并发场景下会极度浪费系统资源
- 级联失败
- 如果服务提供者出现问题,所有调用方跟着出问题,如多米诺骨牌一样,迅速导致整个微服务群故障
总结
-
同步调用的优点:
- 时效性较强,可以立即得到结果
-
同步调用的缺点:
- 耦合度高
- 性能和吞吐能力下降
- 有额外的资源消耗
- 有级联失败问题
2、异步通讯
异步调用方案
事件驱动 Broker
异步调用常见实现就是事件驱动模式
事件驱动优势
-
优势一:服务解耦
-
优势二:性能提升,吞吐量高
-
优势三:服务没有强依赖,不担心级联失败问题
-
优势四:流量削峰
异步调用存在的问题
对 Broker 要求极高,具有扛高并发能力
总结
-
异步通信的优点:
- 耦合度低
- 吞吐量提升
- 故障隔离
- 流量削峰
-
异步通信的缺点:
- 依赖于Broker的可靠性、安全性、吞吐能力
- 架构复杂了,业务没有明显流程线,不好追踪管理
3、MQ常见框架
MQ简介
MQ(Message Queue),中文是消息队列,字面来看就是存放消息的队列,也就是事件驱动架构中的Broker
MQ框架
国内用的较多的是:RabbitMQ、RocketMQ、Kafka
相比较而言:基于可用性、吞吐量、消息延迟、可靠性考虑,对于企业业务方面用RabbitMQ、RocketMQ比较多,
Kafka 考虑可靠性不是很好,一般处理海量级数据不是很重要的,如日志。