程序员面试宝典

一站式面试准备平台

返回分类
system-design中级

系统设计基础概念

理解系统设计的核心原则、如何进行容量估算、以及常见架构模式

2026-04-15
阅读时间: 7分钟

系统设计基础概念

系统设计面试不是让你设计 Google,而是考察你的思考框架。面试官想看你如何分解问题、分析权衡

面试考察点

面试官通过这道题想考察:
1. 你是否有系统性的思考框架
2. 你是否能进行容量估算
3. 你是否能权衡利弊
4. 你是否有大规模系统的经验(哪怕是理论上的)

一、系统设计的思考框架

1.1 四步法(面试模板)

面试官追问:"你怎么设计一个系统?"

系统设计四步法:

Step 1: 需求澄清
- 明确功能范围
- 确认用户量级、QPS、数据量
- 确认性能要求(延迟、可用性)

Step 2: 高层设计
- 画出核心组件
- 确定数据流方向
- 识别关键挑战

Step 3: 详细设计
- 深入关键技术点
- 设计数据模型
- 选择存储方案

Step 4: 权衡讨论
- 讨论优缺点
- 备选方案
- 扩展性考虑

1.2 常见问题清单

面试中必须考虑的问题:

1. 用户量级?
   - DAU(日活跃用户)是多少?
   - 峰值并发是多少?
   - 数据规模有多大?

2. 读写比例?
   - 读多写少?用缓存
   - 写多读少?用消息队列
   - 各占一半?

3. 数据特性?
   - 结构化还是非结构化?
   - 需要事务吗?
   - 需要排序/搜索吗?

4. 一致性要求?
   - 强一致还是最终一致?
   - 能容忍多少延迟?

二、容量估算

2.1 为什么要容量估算?

面试官追问:"你怎么估算需要多少服务器?"

容量估算是面试的重要环节:

目的:
1. 确定系统规模
2. 指导架构选择
3. 避免过度设计

估算原则:
- 用估算,不用精确计算
- 2 的幂次法则
- 简单算术即可

2.2 估算示例

估算 Twitter 的存储需求:

假设:
- 3 亿月活用户
- 每天 5 亿条推文
- 每条推文平均 140 字节
- 保留 3 年

计算:
- 每天存储:5 亿 × 140 字节 = 70 GB
- 3 年存储:70 GB × 365 × 3 ≈ 75 TB

这只是原始数据!
加上索引、备份、冗余:
- 索引开销:2-3 倍
- 备份:2-3 份
- 总计:75 TB × 6 ≈ 450 TB

结论:需要分布式存储

2.3 估算公式

常用估算公式:

存储容量 = 用户数 × 行为频率 × 数据大小 × 保留时间

带宽 = 用户数 × 行为频率 × 数据大小

QPS = 用户数 × 行为频率 / 时间

性能换算:
- 2^10 ≈ 10^3(K)
- 2^20 ≈ 10^6(M)
- 2^30 ≈ 10^9(G)

三、核心概念

3.1 扩展性(Scalability)

面试官追问:"什么是水平扩展和垂直扩展?"

垂直扩展(Scale Up):
- 升级单机硬件(更多 CPU、内存、磁盘)
- 简单,但有物理上限
- 存在单点故障

水平扩展(Scale Out):
- 增加更多机器
- 无理论上上限
- 更复杂,需要考虑数据分片

面试加分点:
"垂直扩展是省钱省力的短期方案,
 水平扩展是长期发展方向"

3.2 负载均衡

为什么要负载均衡?
- 分散请求到多台服务器
- 提高系统吞吐量
- 实现高可用

常见负载均衡算法:

1. 轮询(Round Robin)
   - 依次分发请求
   - 简单,但不考虑服务器负载

2. 最少连接(Least Connections)
   - 发给当前连接最少的服务器
   - 适合请求处理时间相近的场景

3. IP 哈希(IP Hash)
   - 相同 IP 的请求发到同一服务器
   - 适合需要会话粘性的场景

3.3 缓存

为什么用缓存?
- 减少数据库压力
- 加快响应速度
- 提高系统吞吐量

缓存层次:
1. 浏览器缓存(CDN)
2. 反向代理缓存
3. 应用缓存(Redis)
4. 数据库缓存

面试能加分的回答:
"缓存的本质是用空间换时间,
 但要注意缓存雪崩、击穿、穿透问题"

四、面试总结

系统设计核心要点

┌─────────────────────────────────────────────────┐
│                  系统设计框架                     │
├─────────────────────────────────────────────────┤
│                                                  │
│  四步法:                                        │
│  1. 需求澄清 → 确定规模和性能要求               │
│  2. 高层设计 → 画出核心组件                     │
│  3. 详细设计 → 深入关键技术                     │
│  4. 权衡讨论 → 讨论优缺点                       │
│                                                  │
│  容量估算:                                       │
│  - 存储、带宽、QPS                              │
│  - 2 的幂次法则                                 │
│                                                  │
│  核心概念:                                       │
│  - 扩展性(水平 vs 垂直)                       │
│  - 负载均衡                                     │
│  - 缓存                                         │
│                                                  │
└─────────────────────────────────────────────────┘

面试能加分的回答

1. 能系统性地思考
   "我会从需求澄清开始,明确规模和性能要求"

2. 能进行容量估算
   "先估算存储和带宽需求,再反推架构"

3. 能权衡利弊
   "这个方案的优势是 X,但缺点是 Y,可以用 Z 来缓解"

相关概念

相关标签