系统设计面试
从单机到分布式,从原理到实战,掌握系统设计面试的答题框架。
面试答题框架(4S 法)
- Scenario(场景):明确功能范围、用户量级、读写比例
- Service(服务):拆分功能模块,定义接口
- Storage(存储):选型数据库、缓存、消息队列
- Scale(扩展):应对高并发、大数据量的优化策略
经典案例
| 系统 | 核心挑战 | 关键技术 |
|---|---|---|
| URL 短链服务 | 哈希冲突、读写放大 | 哈希 + 发号器 + 缓存 |
| 秒杀系统 | 超卖、流量突增 | 缓存预热、队列削峰、乐观锁 |
| 即时通讯 | 实时推送、消息顺序 | WebSocket、消息ID、读扩散 |
| 社交 Feed | 推拉模式、关注关系 | Timeline、写扩散、缓存 |
| 分布式 ID | 唯一性、趋势递增 | Snowflake、号段模式 |
| 限流器 | 流量控制、公平性 | 令牌桶、滑动窗口、Redis Lua |
| 分布式缓存 | 高可用、一致性 | Redis Cluster、穿透/击穿/雪崩 |
| 消息队列 | 可靠性、顺序性、高吞吐 | Kafka、幂等性、ACK |
| 搜索引擎 | 相关性排序、实时索引 | 倒排索引、BM25、ES |
| 支付系统 | 精确性、幂等、分布式事务 | 状态机、TCC、本地消息表 |
| 推荐系统 | 个性化、实时性、冷启动 | 协同过滤、双塔模型、四阶段漏斗 |
| 订票系统 | 库存精确性、座位锁、超卖 | Redis Lua、分段库存、状态机 |
| 协作编辑 | 并发冲突、实时同步、离线 | CRDT、OT、WebSocket |
| 通知系统 | 多渠道、防打扰、可靠性 | 渠道分发、限流去重、消息队列、幂等重试 |
已收录案例
高并发场景
- Base62 编码、分布式发号器、Redis 缓存、Bloom Filter 防重复、Lua 原子操作
- Redis Lua 原子库存扣减、令牌桶限流、Kafka 削峰、分布式锁
- 计数器/滑动窗口/漏桶/令牌桶四种算法对比
- Redis + Lua 分布式限流实现
实时系统
- WebSocket 网关管理、Snowflake 消息 ID、QoS 投递保证、推拉结合、多端同步
- Push/Pull/Hybrid 模型、Redis Sorted Set 收件箱、Edge Rank 排序、冷数据归档
基础设施
- UUID → 号段模式 → Snowflake → Leaf 的演进
- 时钟回拨解决、worker ID 分配策略
- Cache-Aside/Read-Through/Write-Behind 三大模式
- 缓存穿透(布隆过滤器)、击穿(互斥锁)、雪崩(随机 TTL + 高可用)
- Redis Cluster 哈希槽分片
- Kafka 核心原理:Partition、Consumer Group、Offset、零拷贝
- 消息可靠性:ACK + 手动提交 + 幂等性
- Kafka vs RabbitMQ 选型对比
搜索与金融
- 倒排索引、分词、查询处理流程
- BM25 / TF-IDF 相关性算法
- Elasticsearch 原理、分布式搜索架构
- 支付状态机、幂等性设计(Token / 唯一键)
- 分布式事务:TCC、Saga、本地消息表
- 渠道路由、对账体系、风控分层
AI 与个性化
- 推荐系统
- 四阶段漏斗:召回 → 粗排 → 精排 → 重排
- 协同过滤(Item-CF)、双塔模型、向量召回(ANN)
- 排序模型:DeepFM、DIN、MMoE
- 冷启动、多样性(MMR)、实时推荐架构
业务系统
- 座位锁定与超时释放机制
- Redis Lua 原子锁座 + 数据库唯一约束防超卖
- 分段库存处理热点场次
- 支付闭环:本地消息表 + 补偿机制
- 冲突解决:CRDT(RGA)vs OT
- 实时同步:WebSocket + 操作广播
- 光标同步、版本历史、权限控制
- Tombstone 压缩与性能优化
- 多渠道分发:App 推送(APNs/FCM)、站内信、短信、邮件
- 消息模板渲染、渠道路由与优先级队列
- 单用户限流、内容去重、客户端聚合防打扰
- 可靠性投递:幂等消费、指数退避重试、死信队列
存储、监控与增长
- 对象存储与分布式文件系统的边界、元数据与数据分离
- 大文件分块、副本与纠删码的取舍
- 多段上传与断点续传、冷热分层与生命周期
- 一致性模型:强一致 vs 最终一致对应用的影响
- 上传 → 转码 → 切片 → 分发的完整流水线
- HLS/DASH 切片与自适应码率(ABR)
- CDN 分发与回源策略、边缘缓存命中率
- 弹幕与互动的实时通道、存储与带宽成本模型
- 地理空间索引:Geohash / Quadtree / S2 对比
- 位置上报的写入放大与批量聚合
- 在线状态与心跳、查询半径与排序策略
- 隐私保护与位置精度模糊化
- 指标采集:拉模型 vs 推模型、采集频率与开销
- 时序存储与降采样、聚合查询与保留策略
- 告警规则引擎、抑制与静默、分组收敛
- 通知分发与值班轮转、可观测性三支柱协同
- Redis 锁与 Redlock 的争议、单点与主从切换风险
- ZooKeeper/etcd 租约与临时顺序节点
- fencing token:让过期持有者无法造成破坏
- 续租、故障恢复、性能对比与常见误用清单
- 广告检索与召回、定向与用户画像
- 竞价机制与预算控制(pacing)、频次控制
- 计费与归因模型、点击率预估特征
- 反作弊与效果衡量、冷启动与探索
设计原则速查
CAP 定理
| 组合 | 代表系统 | 场景 |
|---|---|---|
| CP | Zookeeper、etcd | 配置中心、服务发现 |
| AP | Cassandra、Eureka | 高可用场景 |
| CA | 传统 RDBMS(单机) | 非分布式 |
扩展性指标
| 指标 | 说明 | 优化方向 |
|---|---|---|
| QPS | 每秒查询数 | 缓存、CDN、读写分离 |
| TPS | 每秒事务数 | 消息队列削峰、拆分事务 |
| P99 延迟 | 99% 请求延迟 | 异步化、本地缓存 |
| 可用性 | 99.9% / 99.99% | 冗余、故障转移 |
每篇案例包含:需求分析、架构演进、数据模型、核心算法、性能考量。