ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RocketMQ LiteTopic 彻底解决海量用户消息风暴问题

RocketMQ LiteTopic 彻底解决海量用户消息风暴问题 文章目录1. 先说一个让人血压升高的场景2. 这条消息链路天生就是按用户长的2.1 生产侧2.2 消费侧3. 传统 Topic 为什么接不住这活3.1 单用户风暴全组陪跑3.2 自己补等于在 MQ 上再造一套 MQ4. LiteTopic把“用户”变成消息系统的亲儿子5. 用法三行字讲完5.1 发送侧5.2 消费侧5.3 限流侧6. 落地效果稳、简、省6.1 架构简化6.2 稳定性6.3 增长零改造7. 同一个原语两种用法P.S. 推荐一个大神的教程给想要了解或者学习人工智能知识的读者这个教程里内容讲解通俗易懂且风趣幽默对我帮助很大。我想与大家分享这个宝藏教程请点击下方链接查看 传送门https://blog.csdn.net/qq_740133651. 先说一个让人血压升高的场景想象你在百炼资产中心上班。用户在你家平台生成图片、视频产物默认丢进 OSS 临时目录过几天就清理只留一个临时下载链接。临时链接这种东西跟“我就眯五分钟”一样都是骗人的。用户辛辛苦苦生成的大作转眼就没了。于是资产中心来了统一管理用户生成和上传的图片、视频、音频每份产物先过安全检测再持久化落库。说白了就是给用户的作品办“长期居住证”。听起来平平无奇真正要命的在后面。2. 这条消息链路天生就是按用户长的资产中心选了消息驱动架构链路分生产、消费两段。2.1 生产侧模型生成产物后写进 OSS 临时目录然后发一条消息。注意消息里只带资源元数据和 OSS 位置索引不带文件本身。相当于外卖单上写清楚是哪家店的哪道菜但外卖员不背厨房。2.2 消费侧消费端依次干三件事白名单校验、内容安全检测、持久化落库。先查身份证再查是不是违规内容最后才让进门——比小区门卫还严格。这条链路的特征就一句话消息量大、要可靠消费而且消息流天然按用户组织。3. 传统 Topic 为什么接不住这活每个用户的资产相互独立所以要单独审核、单独控节奏。有人一天生成一千张图我们称之为“人间 Midjourney 服务器”他冲量的时候别人不能被拖着走。由此推出三个硬需求用户级隔离、用户级限流、用户级挂起。但传统 Topic 的隔离单元是队列不是用户。问题就出在这儿。3.1 单用户风暴全组陪跑所有用户共享同一组队列。重度用户半夜疯狂出图消费线程被他一个人的消息占满其他用户的资产入库全部排队。这画面像极了春运抢票他一个人占着一整列窗口你握着身份证在后面干瞪眼。限流只能全局一刀切。想单独照顾普通用户不存在的系统连你是谁都不想知道。挂起粒度是整个消费组。想停一个用户等于全小区停电——一家短路整栋楼摸黑。3.2 自己补等于在 MQ 上再造一套 MQ想补齐这三件事你得在 Topic 之上自建用户路由层和用户级限流。这就像在洗衣机里再塞一台洗衣机。你以为你在优化架构其实你在给自己造加班理由。本质一句话业务的并发单元是“用户”传统 Topic 的隔离单元是“队列”。两头错位所有治理都得靠业务代码硬凑像用勺子吃面条——能吃但谁吃谁知道。4. LiteTopic把“用户”变成消息系统的亲儿子LiteTopic 是 RocketMQ 5.x 引入的轻量级队列形态。核心能力三连单 Broker 支撑百万级队列运行时按需创建按 TTL 自动回收同一消费组下不同实例可订阅不同的队列子集。单 Broker 百万级队列是什么概念相当于一个小区物业同时管一百万间房每间房还带独立钥匙。翻译成人话百万用户每人一条专属消息队列想开就开不用就自动销毁跟共享单车的调度逻辑一样只是不收费。在传统 MQ 的经验里“一个用户一个 Topic”近乎禁忌LiteTopic 直接把它变成默认做法。5. 用法三行字讲完5.1 发送侧按用户写入对应 LiteTopic不存在就由 Broker 自动创建。自动创建比你自动续费会员还积极。不用预建队列不用维护清单比你的年终总结还省事。// 按 userId 发送到对应的 LiteTopicStringtopicLiteTopic_userId;producer.send(newMessage(topic,body),timeout);5.2 消费侧一次通配符订阅覆盖全部用户新用户接入零改动。跟办手机卡一样插上就能用。// 一次订阅覆盖所有用户consumer.subscribe(LiteTopic_*,*,messageListener);5.3 限流侧在消费回调里返回挂起指令Broker 在指定时长内只停止该 LiteTopic 的投递。翻译一下这位用户你已经超了先去旁边喝口水缓缓再进来。// 该用户超限先让他冷静 3 秒returnConsumeResult.SUSPEND(3000);整个链路走完业务侧一行路由层代码都没写。这不是省钱这是省命。6. 落地效果稳、简、省6.1 架构简化用户隔离、限流、挂起全由消息系统原生提供零开发成本拿到多租户治理能力。6.2 稳定性用户间故障域隔离。单个重度用户再疯也只是“限流 定向挂起”自动降压不影响整体 SLA。以前是“一颗老鼠屎坏了一锅汤”现在是“老鼠屎自己在锅里罚站”。6.3 增长零改造用户和资产规模增长无需预建队列、无需调整订阅链路随业务自然扩展。规模翻十倍不用改代码改 PPT 就行。7. 同一个原语两种用法百炼网关之前用 LiteTopic 重构过大模型限流那是把它当分布式漏桶资产中心这次拿它做用户级消息治理。同一个原语两种用法最后都指向同一句话当业务的并发单元是“用户”时消息系统的治理单元也应该是“用户”。如果你的业务也是“海量用户 × 轻量消息”的形态别在业务代码里造轮子了。造轮子一时爽维护火葬场。把用户路由和限流层拿掉交给 RocketMQ LiteTopic。P.S. 推荐一个大神的教程给想要了解或者学习人工智能知识的读者这个教程里内容讲解通俗易懂且风趣幽默对我帮助很大。我想与大家分享这个宝藏教程请点击下方链接查看传送门https://blog.csdn.net/qq_74013365
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进