Lesson 0013 · 系统设计 · Phase 4 实战 · 综合案例
大案例 III:视频平台(YouTube 类)
与你的 Mission 的关系
短链(L8)练的是「读多写少」,秒杀(L12)练的是「瞬时洪峰」,视频平台练第三种:存储与带宽密集——它教会你「这类系统的架构重心在离线管线,而不在在线接口」。同时它是 Netflix/字节/快手系公司的核心业务模型。转码管线的资料以 Netflix 的工程实践与 HLS 标准[1][2]为主。
§1 · Step 1澄清需求
| 类别 | 关键约束 |
|---|---|
| 功能(MVP) | ① 上传视频;② 观看(流畅、可调清晰度);③ 点赞/评论/分享。不做:直播、在线剪辑、推荐算法细节(可提扩展) |
| 非功能 | 读写比夸张(观看:上传 ≈ 200:1);起播延迟 <2s、卡顿率是核心体验指标;上传可以慢,观看不能卡 |
| 规模假设 | 500 万 DAU;每天新上传 5 万条;平均单条 10 分钟 |
§2 · Step 2估算:数字暴露架构重心
| 指标 | 计算 | 架构暗示 |
|---|---|---|
| 原始存储 | 5 万条/天 × 100MB(10分钟 1080p 量级) ≈ 5 TB/天 | 还没转码就 5TB/天 |
| 转码放大 | 每种视频转 4–6 档清晰度(240p–4K)→ 总量 ×4 ≈ 20 TB/天,一年 ~7 PB | 冷热分层存储:热片 SSD/NVMe,长尾机械盘/归档(L2 的价格-速度谱系) |
| 观看带宽 | 500 万 DAU × 30 分钟 × 3Mbps ≈ 6.75 Tb/s 出站 | 自建出口毫无可能 → CDN 是可行性前提,不是优化(L3) |
| 写 QPS | 5 万 ÷ 86400 ≈ 0.6/s 上传,观看元数据读 ~3.5 万/s | 在线接口的压力其实不大——压力全在离线管线 |
本案例的元认知
三道案例课的三种重心:短链 = 在线读路径;秒杀 = 在线写洪峰;视频 = 离线数据处理管线。面试时先判断题目属于哪类,整个设计的架子就立住了。
§3 · Step 3高层设计:两条链路
上传链路(异步管线,用户不用等)
上传 → 对象存储(原始片)→ 发「新视频」事件(MQ, L7)
→ 立刻返回「处理中」
→ 转码集群消费:拆片 → 每档清晰度编码 → 切 HLS 分片
→ 产物写回对象存储 + 元数据入库 → 视频可看
- 转码是离线批任务:队列解耦上传与处理,算力不足就是队列排长——用 lag 监控扩容 worker(L7);
- HLS/DASH 切片:视频切成 2–10 秒的小分片 + 多码率索引文件,播放器按网速自适应码率(adaptive bitrate)动态换档[2];
- 按片优化:Netflix 的 Per-Title Encoding——动画和足球赛的最优码率曲线完全不同,按内容调参能省 20%+ 带宽[1]。
观看链路(在线读路径)
播放 → 元数据服务(标题/地址/弹幕:DB + 缓存)
→ CDN 边缘取分片(热点片预推送,Push 模式,L3)
→ 播放器自适应码率,按需 Range 拉取
点赞/评论 → 计数走异步聚合(近似值即可,L9 最终一致)
§4 · Step 4深入与权衡
| 深挖点 | 讨论 |
|---|---|
| 爆款预判 | 新视频上传即知热度吗?不知道 → 全量推 CDN 太贵。解法:首小时边缘按需回源(Pull)+ 监测到热度斜率后升级为 Push 预推——两段式,权衡的是带宽成本 vs 首批用户的起播延迟 |
| 计数问题 | 热门视频的点赞数每秒上万次更新 → 同步写 DB 是灾难。异步聚合 + 近似计数(Redis 原子累加,定时刷盘)。1,234,567 还是 1,234,589 没人知道也没人在乎——精确度按需购买(L9) |
| 转码失败 | 长任务必失败(节点抢占/坏盘)。管线幂等(同一视频重复处理结果一致,L7)+ 失败重试 + 死信人工介入;用户侧显示「处理中,最长 X 分钟」 |
| 多 CDN 策略 | 单一 CDN = 单点(L10 熔断思想的上游版)。业界常态是 2–3 家 CDN 按成本/质量动态调度——供应商冗余也是冗余 |
§5 · 随堂检测
§6 · 检索练习(本课最重要 25 分钟)
盖住全部内容,白板推演:设计「短视频 App(抖音类)」:300 万 DAU、每天 20 万条上传、人均刷 40 条。注意:短视频会引入你的哪些新权衡(时长短 → 分片策略?刷新 feed → 上滑预加载?)。
对照清单(自查 7 项)
① 读写比与存储/带宽两个量级估算 ② CDN 定性为可行性前提 ③ 上传-转码-观看两条链路分开画 ④ MQ 解耦转码 + lag 扩容 ⑤ HLS 多码率 + 自适应 ⑥ 冷热分层存储 ⑦ 近似计数 + 降级预案。短视频额外亮点:预加载下一屏、爆款快速 Push。
§7 · 本周行动
行动任务(约 20 分钟)
往 YouTube/B 站上传一个几分钟的视频,全程截图处理进度:几档清晰度?哪个先可用(为什么 360p 总是先出来——转码顺序的商业考量)?HDR/高帧率为什么最后?——把观察对应回本课管线图。
§8 · 延伸资源
- 首选精读:Netflix Tech Blog《Per-Title Encode Optimization》——转码策略的工业标杆[1]
- HLS 协议(RFC 8216):切片与索引文件的原生定义,读 Overview 即可[2]
- 历史纵深:Google MapReduce 论文——离线管线的祖师爷,理解「为什么转码天然适合批处理」[3]
- 下一课 → Lesson 0014 模拟面试 I
💬 你的上传侦探笔记、或短视频版推演,都可以贴给我点评。