八股 MQ001——为什么需要使用 MQ?
为什么需要使用 MQ?
异步处理
数据留存
实现解耦
流量削峰
以上是这个问题直观的回答。接下来,我想结合自己的实际工作经验对这些问题进行一些分析。
异步处理
当需要使用生产者-消费者模型来实现异步处理时,会考虑使用 MQ。在生产者-消费者模型中,生产者在完成任务生产与投递之后,便可以继续后续的任务生产与投递,不会需要等待任务处理与结果而阻塞自己。
在实际的风控业务场景中,业务方在下发风控任务之后,可以根据自身业务场景来选择是等待风控结果或者是进行生产消耗。尤其当需要的风控处理逻辑非常复杂与耗时后,业务方通过异步处理避免低效与固化的等待,是最优的选择。
数据留存
MQ 作为数据中间件,也可以承担到一定的数据留存的作用。这里也有两种理解方式:
MQ 针对消费数据会存储一定时间。当消费者消费异常时,可以借用 MQ 存储数据的能力,重置消费偏移,重新消费故障时段对应的消费任务数据。
生产者与消费者可以通过将业务数据写入 MQ 任务,实现数据透传,消费者可以通过解析消费任务获取到生产者提供的数据。这种方式本质上没有对数据做持久化,灵活性更好,而且因为任务彼此隔离,数据也天然隔离。
实现解耦
MQ 基于生产者-消费者模型,自己作为中间件,解耦生产者与消费者。生产者关注自身任务生产逻辑与投递逻辑,消费者关注自身拉取任务与消费逻辑。生产者不需要关注消费者处理逻辑,消费者也不需要关注生产者生产逻辑。双方在规划好的职责范围之内,可以不断优化自身功能。
消费者可以自身水平扩展各种复杂的消费逻辑,这些对生产者是屏蔽的。比如风控场景中不断迭代优化的各种风控模型算法能力。
消费者可以协调资源来动态调整任务消费的速率,这种波动不会影响生产者。
生产者可以根据自身业务场景灵活调整生产逻辑。比如投后场景,生产者下发完风控任务后,不用等待风控结果,便可以继续自身后续其他业务逻辑。当风控任务完成后,再根据结果处理当时任务,这样可以兼顾业务收益与风险。
流量削峰
生产者与消费者面对的对象是不一样的。以风控场景举例,生产者对应的可能是用户创建的物料需求,具有高频快速、潮汐涨落的特点。而消费者对应的各种风控算法模型,具有计算逻辑复杂、处理耗时长的特点。如何让生产者与消费者直连,那么消费者就会因为生产的量级波动产生很大的稳定性问题。而通过引入 MQ,可以利用 MQ 数据留存的特点,在保证链路瓶颈点——消费者稳定前提下,将高峰的消费任务延迟到低峰时交由下游消费。从而达到流量削峰填谷的目的。
版权声明: 本文为 InfoQ 作者【Codyida】的原创文章。
原文链接:【http://xie.infoq.cn/article/9d350b9f9ea36d5b27143c3bf】。文章转载请联系作者。
评论