系统设计方法论
一个面试现场的崩溃
候选人小王被问到:"设计一个短链系统。"
他深吸一口气,直接开始画架构图,嘴里念念有词: "用 Redis 做缓存...用 MySQL 存数据...用消息队列做异步处理..."
画了 5 分钟,面试官打断他:"你还没告诉我为什么要用 Redis,也没告诉我需要支持多少并发。"
小王愣住了。
他开始东拼西凑:"嗯...10万 QPS?Redis 应该够了..."
面试官继续追问:"Redis 挂了怎么办?数据怎么保证不丢?"
小王的额头开始冒汗。
这个场景暴露了系统设计面试中最常见的问题:没有方法论,想到哪说到哪。
系统设计不是"背方案",而是一套分析和决策的方法。
二、系统设计四步法🔴
2.1 第一步:需求澄清(Scope Definition)
核心问题:这个系统要做什么?不做什么?
必须问清楚的问题(以短链系统为例):
2.2 第二步:高层设计(High-Level Design)
核心问题:系统有哪些组件?它们如何交互?
以短链系统为例:
2.3 第三步:核心细节设计(Detailed Design)
核心问题:每个组件的内部实现是什么?
2.4 第四步:权衡与扩展(Trade-offs and Scalability)
核心问题:这个设计有什么局限?如何改进?
三、功能优先级框架🔴
3.1 MVP vs 完整系统
面试中的核心问题:先做 MVP,还是直接设计完整系统?
推荐策略:先 MVP,面试官满意后再扩展。
3.2 YAGNI 原则
You Aren't Gonna Need It:不要为可能永远不会来的需求提前付出代价。
四、常见权衡模式🟡
4.1 CAP 理论权衡
4.2 一致性级别选择
4.3 延迟 vs 吞吐量
【架构权衡】 没有免费的午餐。选择低延迟意味着更多的资源投入(如 L1/L2/L3 多级缓存),选择高吞吐意味着更长的处理周期(如批量处理)。系统设计的关键是找到业务需求和工程成本的最佳平衡点。
五、数据估算框架🔴
5.1 容量估算
短链系统估算示例:
5.2 资源规划
六、面试常见陷阱🟡
6.1 陷阱一:不澄清需求就动手
6.2 陷阱二:过早优化
6.3 陷阱三:忽视可扩展性
6.4 陷阱四:不讨论失败场景
面试官最喜欢追问:"如果 Redis 挂了怎么办?"