系统设计面试入门

2025年 阅读约 13 分钟 面试指南 · 系统设计

系统设计面试入门指南,涵盖系统设计方法论、负载均衡、CDN、数据库分片等核心概念,附经典设计题思路。

一句话总结

系统设计面试考察架构思维,核心考点:设计方法论(需求→高层→深入→权衡)、负载均衡(L4/L7+算法)、多级缓存(浏览器→CDN→Nginx→Redis→DB)、数据库分片(垂直/水平+一致性哈希)。记住关键数字:磁盘10ms、SSD 0.1ms、同机房0.5ms、跨区域150ms。

设计方法论

系统设计四步法:

1. 需求澄清:明确功能范围、用户规模、性能要求。不要急于设计,先问清楚。

2. 高层设计:画出系统架构图,确定核心组件(客户端→API网关→服务→数据库)。

3. 深入设计:选择具体技术方案,讨论存储、缓存、消息队列等。

4. 权衡分析:讨论方案的优缺点、瓶颈和扩展性。

关键数字:1秒=1000ms,磁盘寻道10ms,SSD读0.1ms,网络同机房0.5ms,跨区域150ms。

负载均衡

四层 vs 七层负载均衡:

四层(L4):基于IP和端口转发,如LVS。性能高,功能简单。

七层(L7):基于HTTP协议转发,如Nginx。支持路径路由、Header改写等。

负载均衡算法:
1. 轮询(Round Robin)
2. 加权轮询
3. 最少连接数
4. 一致性哈希

CDN与缓存

CDN(内容分发网络):将静态资源缓存到离用户最近的边缘节点,减少延迟。

多级缓存架构:
1. 浏览器缓存:强缓存(Cache-Control)+ 协商缓存(ETag/Last-Modified)
2. CDN缓存:边缘节点缓存
3. 反向代理缓存:Nginx缓存
4. 应用缓存:本地缓存(Guava/Caffeine)+ 分布式缓存(Redis)
5. 数据库缓存:Buffer Pool

数据库分片

垂直分片:按业务拆分数据库,如用户库、订单库、商品库。

水平分片:同一表的数据按规则分布到多个库。

分片策略:
1. Range分片:按ID范围,易出现热点
2. Hash分片:按ID哈希,分布均匀但扩容困难
3. 一致性哈希:扩容只需迁移少量数据

分片后的问题:跨库JOIN、分布式事务、全局ID生成(雪花算法)、数据迁移。

实战场景

场景:设计一个短链系统(TinyURL)

# 需求估算 # DAU 100万,每人每天创建1条短链 → 100万条/天 # 读多写少(读:写 ≈ 100:1)→ 1亿次读/天 ≈ 1157 QPS # 短码生成:自增ID → Base62编码 # 62^6 = 568亿,6位短码足够 def encode(id): chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" result = [] while id > 0: result.append(chars[id % 62]) id //= 62 return ''.join(reversed(result)) # 架构:用户 → CDN → Nginx → 短链服务 → Redis(缓存) → MySQL # 302临时重定向,可统计点击量