2,MQ能干什么

2,MQ能干什么

MQ中间件的功能总体来说可以分为三个部分,流量削峰,应用解耦,异步处理。

流量削峰,简单理解为对高峰期大量的流量进行缓冲处理,比如一个订单系统,qps最多能处理10000,在正常情况下用户直接下单是没有问题的,但是高峰期用户下单的qps可能达到2万甚至更多,如果没有MQ,我们可能到qps为1w的时候为了保证服务器可以继续提供服务只能进行限流处理,甚至不能继续下单。这时候MQ的流量削峰功能就可以体现出来。我们把用户订单信息都以message的形式先打到MQ上,先存起来,然后在慢慢的消费掉(写到数据中,真正的下单操作)。将1秒要处理的事情改为用10秒去处理,这样我们的系统就可以处理大量的订单了。你可能会想到这样用户下单不能及时反馈下单成功,你是对的,这就是MQ的缺点之一。但是实际使用过成功这个时间是很快的可能就是多那么几毫秒,或者几十毫秒,用户可能感觉不到。这总比不能处理订单,导致系统崩溃要要好的多。

MQ流量削峰示意图

应用解耦,简单理解为解除各个应用的依赖关系,每一个应用都是独立的。比如一个订单系统,下单这个操作,可能还以来库存系统,支付系统,物流系统等,其中任何一个系统出现问题,下单可能就失败了,因为这些系统都是订单系统所必须依赖的。这个时候就要用到MQ消息中间件了,订单系统将订单信息先写到MQ里面,通过MQ通知到物流系统,库存系统,支付系统即可,这样订单只要将信息写进MQ后面的事情就不用关心了,应用也就解耦了。

MQ应用解耦示意图

异步处理,一句话总结可以理解为“不用等我结果,好了告诉你”,比如有甲乙两个系统,如果通过http调用甲系统调用乙系统可能要同步等结果,但是这个事情乙系统要处理好久,一般操作就是乙系统提供一个api接口供甲系统调用查询处理状态,这样就要轮询以固定的时间间隔调用乙系统的api服务,检测处理状态,如果用MQ介入事情就变得圆满了。甲系统调用乙系统后,不需要调用乙系统的api,乙系统处理完毕后会自动通知甲系统结果即可。

MQ异步处理示意图

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据