面试官:为什么引入消息队列 RocketMQ、Kafka 等
消息队列的特点
- 流量削峰 在高并发的系统场景下,系统的流量并不是平缓的,有时候会激增,有时候会下滑,为了能够支持在高峰流量下系统能稳定运行,常用的暴力处理方案是对系统进行扩容,但在流量下滑后,系统资源会被闲置了,不利于控制生产的成本。
引入消息队列可以平衡成本和高峰流量之间的关系,可以通过消息中间件以固定的速率消费高峰产生的消息,缓解系统的压力。
- 异步
一些业务场景涉及的操作比较多,如果串行处理的话,需要花费的时间比较长,可通过消息队列来进行异步处理,比如订单处理场景,下单后需要扣减库存、更新缓存等等,通过增加订单预处理状态,来进行异步处理。
当异步处理完这些比较耗时的操作后,通过信息把处理结果告知用户。
- 程序间解耦
在大型系统的中,上下游系统之间互相依赖,可通过增加中间层来进行系统的解耦。
增加消息队列后,上游系统只需要把消息发送到消息队列,不需要关注下游有多少系统。
同样的下游系统也只需要订阅消息,而不需要关注消息的来源。
这样上下游系统在开发联调,不需要关注彼此开发的进度,不互相依赖,彼此间进行了系统的解耦。