一、消息队列的三大功能
1.流量削峰
典型的就是电商场景中的订单超量。比如订单系统只能承受1万/秒的并发量,在搞活动时进来了2万/秒的单量,那么订单系统就宕机了。 没有MQ时可以采取限制下单,订单量达到一万后限制用户下单,很明显这样体验极差。 若使用MQ作为缓冲则可以取消这个限制,它将一秒内处理不完的订单分散到更长的一段时间去处理,这样虽然用户可能得等一段时间才能获得下单成功的反馈,但比完全下不了单体验好。
2.应用解耦
仍以电商场景中的用户下单为例,一个完整的下单流程涉及订单系统、支付系统、库存系统、物流系统等。 假如这几个子模块是相互紧密耦合的,那么任意一个模块出现bug将会牵一发而动全身,下单操作就无法完成。 加入MQ后就不会有这种情况,假如物流系统发生故障,可以做一个现场保护,将待处理的缓存在MQ中,等物流系统修复后再继续处理缓存的内容。在用户感知层面,他的下单操作已经正常完成。当物流系统恢复后再继续处理订单即可,下单用户无法感知到物流系统的故障,提升了用户体验。
3.优雅的异步处理
这里需要再明确一下异步的概念,通俗地讲,就是发送一个请求,不等待返回值,随时可以再发送下一个请求。 假如A请求B,B需要很长时间处理,但A需要知道B什么时候处理好。不采用MQ时有两种不优雅的处理方式,一种是A隔一段时间去查询一下B是否处理好;另一种是A提供一个callback接口,B处理完后调用A的这个接口通知A(这样就使A与B间的耦合性提高了)。 若加入MQ,那么A只需监听MQ里是否有B处理完成的消息,B只需处理完成后给MQ发一条已完成的消息。这样减少了API的开发,降低了耦合性。
|