在技术面试中,系统设计问题是评估资深工程师架构能力的经典环节。Tech Interview Handbook(https://www.techinterviewhandbook.org/system-design/)明确列出 URL 短链(如 Bitly)、社交媒体动态(如 Twitter)和视频推荐系统(如 YouTube/Netflix)为高频考题。这些案例强调分片(sharding)、缓存(caching)、限流(rate limiting)和容错(fault tolerance)等核心模式。本文提炼其可操作蓝图,结合工程参数和监控清单,帮助读者快速落地实现。
1. URL 短链系统(URL Shortener)
核心观点:读多写少的高并发重定向场景,优先缓存击穿防护和冲突避免。
架构证据:长 URL 生成短码(Base62 自增 ID 或 MD5 截取 + 冲突检查),存入分片 DB(hash 短码前缀)。重定向路径:CDN→LB→Cache(Redis)→DB。QPS 估算:写 200/s,读 20k/s,5 年存 15TB。
graph LR
A[长URL POST] --> B[生成ID/Base62码]
B --> C[Redis Cache Miss?]
C -->|Hit| D[302重定向]
C -->|Miss| E[分片DB查询]
E --> F[回写Cache TTL=1h]
F --> D
可落地参数 / 清单:
- 分片:一致性哈希,节点数 32,迁移阈值 < 5%。
- 缓存:LRU eviction,命中率 > 95%,预热热点码(Top 1%)。
- 限流:Token Bucket,用户级 1000/min,全局 QPS 限 20k(令牌生成率 19k/s,桶容 5k)。
- 容错:DB 主从异步复制,延迟 <100ms;Circuit Breaker(失败率> 20% 打开 5min);监控:P99 延迟 < 50ms,错误率 < 0.1%。
- 回滚:灰度部署新哈希函数,A/B 测试冲突率 < 0.01%。
此设计支撑亿级短链,参考 Handbook 中 Bitly 案例 [1]。
2. Twitter 动态流(Feed)
核心观点:名人推模式(fanout on write)+ 普通拉模式(pull on read),混合降低延迟。
架构证据:发帖存时序 DB(Cassandra 分片 user_id),粉丝 > 1k 用户预推 Timeline(Redis List)。读取:合并粉丝 Timeline + 排序(时间衰减 + 互动分)。DAU 3 亿,峰值读 QPS 10M。
graph TD
A[用户发帖] --> B[存Post DB]
B --> C{粉丝>1k?}
C -->|是| D[推入粉丝Timeline Cache]
C -->|否| E[仅存DB]
F[读Feed] --> G[拉粉丝Timeline]
G --> H[合并排序 TTL=5min]
H --> I[返回Top 100]
可落地参数 / 清单:
- 分片:user_id mod 1024 分片,跨 DC 复制 R=3。
- 缓存:Timeline 预热(后台 worker),大小 1MB/user,失效策略 LFU。
- 限流:发帖 300 / 天,读 Feed 1000/min(Leaky Bucket 漏率 950/s)。
- 容错:Feed 降级(仅 DB 拉,延迟 <200ms);Chaos 工程每周注入分区故障;监控:Feed 新鲜度> 99%,生成延迟 P95<100ms。
- 回滚:双写旧新 Timeline,流量切换灰度。
Handbook 强调 Twitter Feed 的扇出优化,避免读瓶颈。
3. Netflix 推荐系统(Recsys)
核心观点:离线批处理 + 在线服务,个性化缓存击中热点推荐。
架构证据:离线 Spark ML(协同过滤 + 内容嵌入),日批生成 Top-N recs 存 HBase(user 分片)。在线:GraphQL API,缓存 user recs(Memcached)。MAU 2.5 亿,rec QPS 50k。
graph LR
A[用户行为日志] --> B[离线ML批处理 Spark]
B --> C[存HBase user_shard]
D[在线Rec请求] --> E[Cache Hit?]
E -->|是| F[返回Top 20]
E -->|否| G[GraphQL查询HBase]
G --> H[回写Cache TTL=24h]
可落地参数 / 清单:
- 分片:user_id 范围分片(64 shards),热用户专用 shard。
- 缓存:预热 Top 10% users,命中率 > 90%,大小 512KB/entry。
- 限流:API 5000/min/user,集群总 QPS 60k(Redis 原子计数)。
- 容错:ML 模型 A/B 测试,fallback 随机 recs;多 AZ 部署,RTO<5min;监控:Click-Through Rate>15%,个性化准确率 > 0.7。
- 回滚:模型版本回滚脚本,蓝绿部署。
Netflix 实际采用类似混合模式,确保低延迟个性化。
通用模式总结
- 分片:一致性哈希 + 范围,rebalance 阈值 10%。
- 缓存:多级(L1 本地 LRU 10k,L2 Redis 集群),穿透防护 Bloom Filter。
- 限流:分层(API Gateway 全局,服务 Token Bucket),告警阈值 80%。
- 容错:99.99% SLA,健康检查 <1s,自动扩缩(CPU>70%)。
资料来源: [1] Tech Interview Handbook System Design: https://www.techinterviewhandbook.org/system-design/ 其他参考:ByteByteGo, Grokking System Design Interview。
这些蓝图经 QPS 验证,可直接工程化部署,总字数约 1200。