场景解剖三:千万长连接推送系统
2026/8/24大约 3 分钟
亿级规模系统系列 · 阶段 7 · 亿级场景实战 · 第 41/49 篇 · 🚧 占位待学
上一篇:《场景解剖二:Feed 流》
下一篇:《场景解剖四:秒杀系统(全链路总复习)》
学习大纲:《QPS 过万与亿级消息系统设计学习总纲》
状态:待学习。 本文为占位文档:知识点清单、实验与验收标准已就绪,正文待按「先学习、先实验、再撰写」补全。
对应总纲单元:阶段 7 · 单元 7.3
一、本文要解决的问题
怎么把一条公告在 10 秒内送到 1 亿台手机?这是接入层线程模型(阶段 1)与推拉投递(阶段 3)的极限压力测试:千万在线的连接怎么摊到机器上、单机百万连接的内存怎么压、推送风暴怎么限速分批——还有手机厂商通道这条「借来的路」。
二、知识点清单
- 接入层架构:SLB(长连接的四层分发)→ 接入网关集群(每机几十万连接,阶段 1 的 Netty 模型)→ 路由层(uid → 接入节点)
- 单机容量模型:百万连接的内存账(每连接 buffer × 连接数)、fd 与端口限制、心跳与空闲清理
- 推送链路:业务方 → 推送服务(查路由、拆批次)→ 接入节点 → 设备;到达率与在线率的度量口径
- 厂商通道整合:APNs / FCM / 国内厂商推送的必要性(App 被杀后自建通道不可达),通道选择与降级策略
- 推送风暴治理:全量推送拆批(每秒 N 万)、按优先级排队、错峰;「10 秒送达 1 亿」的分批数学
- 心跳与省电的平衡:心跳间隔与 NAT 超时、智能心跳
三、动手实验(学习时必须真跑)
- Netty 实现接入网关 + Redis 路由表(uid → 节点),模拟客户端建 1 万长连接(衔接阶段 1 实验)
- 全量推送 1 万连接:测推送风暴下的网关内存、GC 与耗时;实现分批推送(每批 1000,间隔 100ms)对比
- 统计到达率:客户端 ack 回执计数,验证可靠性(未达的走补拉)
四、验收标准(全部通过才进入下一篇)
五、写作提示(补正文时遵守)
- 开篇问题驱动;结构走「是什么 → 为什么 → 怎么做 → 背景知识」
- 所有代码、命令、输出必须先在本机跑通再写入,不得杜撰
- 版本口径以总纲环境清单为准(Spring Boot 3.x / MySQL 8.0 / Redis 8.x / RocketMQ 5.3.x / Kafka 4.3 / ShardingSphere 5.5.3)
- 涉及版本敏感结论时标注出处与时间
本篇完成后,把文首导航块的「🚧 占位待学」去掉,并在总纲处打卡。