同步调用的问题

  1. 耦合度高
  2. 性能差,调用者需要等待调用链的响应,若调用链过长会造成性能下降
  3. 资源浪费,每个服务在等待响应的过程中不能释放请求占用的资源
  4. 级联失败,如果服务提供者出现问题,可能会导致整个调用链甚至整个微服务集群故障

异步调用方案

异步调用的常用实现是事件驱动模式

image-20230110093509634

优点:

  1. 服务解耦,若有新服务出现。仅需订阅Broker事件即可,大大提高了扩展性
  2. 性能提升,提高吞吐量。通过订阅服务可以减少调用链的长度,从而大大提高性能
  3. 没有强依赖关系,降低级联失败发生概率。因为请求事件终止与Broker,而后方微服务故障并不会影响到Broker,所以大大降低了整个集群崩溃的情况
  4. 流量箫峰。后侧微服务处理能力有限,突然出现请求高峰时Broker可以充当缓存,防止后侧微服务压力过大

什么是MQ

MQ(MessageQueue),即消息队列,也就是事件驱动架构中的Broker

image-20230110093443400