写点什么

八股 MQ001——为什么需要使用 MQ?

作者:Codyida
  • 2023-05-04
    广东
  • 本文字数:999 字

    阅读完需:约 3 分钟

为什么需要使用 MQ?

  1. 异步处理

  2. 数据留存

  3. 实现解耦

  4. 流量削峰


以上是这个问题直观的回答。接下来,我想结合自己的实际工作经验对这些问题进行一些分析。

异步处理

当需要使用生产者-消费者模型来实现异步处理时,会考虑使用 MQ。在生产者-消费者模型中,生产者在完成任务生产与投递之后,便可以继续后续的任务生产与投递,不会需要等待任务处理与结果而阻塞自己。


在实际的风控业务场景中,业务方在下发风控任务之后,可以根据自身业务场景来选择是等待风控结果或者是进行生产消耗。尤其当需要的风控处理逻辑非常复杂与耗时后,业务方通过异步处理避免低效与固化的等待,是最优的选择。

数据留存

MQ 作为数据中间件,也可以承担到一定的数据留存的作用。这里也有两种理解方式:


  1. MQ 针对消费数据会存储一定时间。当消费者消费异常时,可以借用 MQ 存储数据的能力,重置消费偏移,重新消费故障时段对应的消费任务数据。

  2. 生产者与消费者可以通过将业务数据写入 MQ 任务,实现数据透传,消费者可以通过解析消费任务获取到生产者提供的数据。这种方式本质上没有对数据做持久化,灵活性更好,而且因为任务彼此隔离,数据也天然隔离。

实现解耦

MQ 基于生产者-消费者模型,自己作为中间件,解耦生产者与消费者。生产者关注自身任务生产逻辑与投递逻辑,消费者关注自身拉取任务与消费逻辑。生产者不需要关注消费者处理逻辑,消费者也不需要关注生产者生产逻辑。双方在规划好的职责范围之内,可以不断优化自身功能。


  1. 消费者可以自身水平扩展各种复杂的消费逻辑,这些对生产者是屏蔽的。比如风控场景中不断迭代优化的各种风控模型算法能力。

  2. 消费者可以协调资源来动态调整任务消费的速率,这种波动不会影响生产者。

  3. 生产者可以根据自身业务场景灵活调整生产逻辑。比如投后场景,生产者下发完风控任务后,不用等待风控结果,便可以继续自身后续其他业务逻辑。当风控任务完成后,再根据结果处理当时任务,这样可以兼顾业务收益与风险。

流量削峰

生产者与消费者面对的对象是不一样的。以风控场景举例,生产者对应的可能是用户创建的物料需求,具有高频快速、潮汐涨落的特点。而消费者对应的各种风控算法模型,具有计算逻辑复杂、处理耗时长的特点。如何让生产者与消费者直连,那么消费者就会因为生产的量级波动产生很大的稳定性问题。而通过引入 MQ,可以利用 MQ 数据留存的特点,在保证链路瓶颈点——消费者稳定前提下,将高峰的消费任务延迟到低峰时交由下游消费。从而达到流量削峰填谷的目的。

发布于: 刚刚阅读数: 2
用户头像

Codyida

关注

还未添加个人签名 2017-12-21 加入

还未添加个人简介

评论

发布
暂无评论
八股MQ001——为什么需要使用MQ?_后端_Codyida_InfoQ写作社区