闲情居|「mq」 消息队列 - 作用与优缺点详细讲解

消息队列的作用消息队列在大流量的环境下主要对系统的核心作用是:解耦、异步、削峰 。
解耦在复杂的业务体系中 , A系统产生的数据可能被其他的系统依赖 。
闲情居|「mq」 消息队列 - 作用与优缺点详细讲解随机业务发生了改变 , 系统A产生的数据也同时需要发送给系统E ,并且 , 系统C不再需要该数据 。
闲情居|「mq」 消息队列 - 作用与优缺点详细讲解系统A经过大量的改动之后 , 达到业务的需求 。但是 , 突然又说 , 需要加入系统F , 同时 , 系统C又需要数据了 , 系统B不需要数据了 。
闲情居|「mq」 消息队列 - 作用与优缺点详细讲解在这种场景中 , 系统A跟其它的系统存在严重的耦合关系 。 系统A时时刻刻都会因为其他的业务系统的业务改生变化时受到严重的影响 。
并且 , 系统A还需要考虑如果下游系统宕机时 , 需不需要重发 , 需不需要消息存储 。
那么 , 如果系统C要重发 , 系统B不要重发 , 系统E说重发可以 , 但是时间要在1分钟内 ,系统F说 , 重发可以 , 但是我不做响应....
在这情况下 , 系统A的维护人员可能更想说的是: 健盘给你 , you can you up.
如何解决?使用MQ来对业务进行解耦 ,系统A产生数据之后 , 发送到MQ里 , 哪个系统需要数据时 , 自己从MQ消费 。
如果新增系统需要数据时 , 也直接从MQ里消费即可 。 如果系统不再需要数据了 , 取消对MQ的消费即可 。
那么 , 系统A就不需要考虑给谁发送数据 , 不需要考虑下游系统是否调用成功等各种情况 。
闲情居|「mq」 消息队列 - 作用与优缺点详细讲解总结通过MQ的pub/sub发布订阅消息模型 , 将系统A与其他的依赖进行依赖解耦 。 系统弱耦合 , 往往代表着高可扩展 。
异步在系统中 , 一次请求可能需要调用其他的业务系统来达到业务的需求 。
闲情居|「mq」 消息队列 - 作用与优缺点详细讲解系统A需要调用系统B和系统C来完成对应的业务需要 , 总用时 = 550ms + 350ms + 3ms = 903ms , 接近1S的用时 , 对用户体验极差 , 几乎无法接受 。
因为一般在互联网企业中 , 对于用户操作来说 , 一般要求每个请求的响应都必须在200ms以内完成 , 给用户带来较好的体验感官 。
所以 , 在这种系统A调用其他 , 只需要保证系统调用成功而不依赖于其他系统的调用响应结果的业务数据情况时 , 使用MQ进行业务的异步化 , 是非常重要的 。
闲情居|「mq」 消息队列 - 作用与优缺点详细讲解【闲情居|「mq」 消息队列 - 作用与优缺点详细讲解】系统A将2条消息发送到MQ用时只需要3ms的话 , 则系统A 接受一个请求返回响应给用户 , 整个请求总用时 = 3ms + 3ms = 6ms 。 对于用户而言 , 感官上就是: 哇!这个网站做得真好 , 真快!
(PS:实际上 , 用时会比这个高 。 因为涉及到TCP连接、网络传输等时间消耗)
总结对系统响应有强制要求 , 而业务复杂时 , 都应该考虑如何将业务拆分 , 异步处理 , 提升系统的响应能力 。
削峰在各种不同的业务系统中 , 在特定的一个时间段 , 往往都会有一个流量的暴增时间段 。 比如:在每天的02:00到11:00 , 系统风平浪静 , 每秒的并发量(TPS)可能就50+个 。 但是在11:00~14:00区间 , 每秒的并发请求量会最高峰会突然暴增到2W+(之前笔者负责的一个系统就存在这样的越高的 , 高低差异) , 然后再慢慢的恢复风平浪静的情况 。


推荐阅读