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