赞
踩
消息队列的作用总结来说有三点:解耦、异步、削峰。我们以当前较流行的电商系统来举例说明消息队列的这三个作用的用处。
解耦
上游系统对下游系统的调用如果为同步调用,则会大大降低系统的吞吐量与并发度,且系统耦合度太高。解耦的作用就在于降低系统与系统,或者系统中模块与模块之间的耦合度,,提高系统的吞吐量与并发度。
正常的电商系统下单流程对于用户来说其实就只有提交订单、关系物流即可,但是对于其后台服务来说,这些流程会交给“订单服务”去完成,这一套动作可能与涉及库存的操作、营销相关功能的操作、用户积分之类的操作,以及推荐或其他之类的操作。在使用消息队列之前,这些相关的流程和操作几乎是同步的,只有当一个步骤完成之后才能去继续下一个步骤,这样的话各个服务或模块之间的耦合度是非常高的,如果有任何一个模块的服务出现问题,那么这套下单的流程就不会完成。而当使用消息队列之后,就完全可以解决这个问题。订单服务收到用户提交订单的需求之后,会将该任务交由消息队列去处理,即商品库存的操作、用户积分的操作、营销功能的操作以及推荐之类的操作都会由消息队列去进行相关模块服务的调用,对于用户来说,只要下单成功,那么就意味着这套流程已经完成了,后续的相关操作会在用户不知情的情况下去执行的。
在接入消息队列之前,订单服务与各个模块交互如上图所示。接入消息队列之后,订单服务会将任务交给消息队列,由消息队列去负责与各个模块的交互。如下图所示:
异步
订单支付之后,后台服务要扣减库存、增加积分、发送消息等等,且处理流程都是链式的,链路一长,响应时间就变长了。引入消息队列,基本上各个节点都可以以异步的方式去处理,这样一来就能降低响应时间。
削峰
消息队列也可以用来削峰,例如秒杀系统,平时的访问流量可能很低,但是要做秒杀活动时,秒杀的瞬间会疯狂请求我们的服务器,Redis,MySQL各自的承受能力都不一样,直接将全部流量照单全收的话底层系统可能会扛不住。此时,引入消息队列之后,我们可以把大量请求扔到消息队列里面,然后去慢慢处理,这样的话就达到处理大量请求的目标了。
本文参考自:两万字、三十图、二十三问,搞定RocketMQ! - 掘金
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。