系统设计
简介
系统设计面试:技术+权衡+沟通+实操
功能性要求 vs. 非功能性需求(面试中应平衡两者)
-
功能性要求:系统应该做什么
例:电商网站应该允许用户浏览产品,将其添加到购物车并完成购买
-
非功能性要求:系统应该如何做
例:可拓展性,正确处理用户增长;性能:规定时间内处理交易
大致流程:明确需求->确定优先级->权衡->使用真实案例->平衡
估算
- 负载估算: 预测系统每秒预期的请求数、数据量或用户流量。
- 存储估算: 估计处理系统生成的数据所需的存储量。
- 带宽估算: 确定支持预期流量和数据传输所需的网络带宽。
- 延迟估计: 根据系统的架构和组件预测系统的响应时间和延迟。
- 资源估算: 估计处理负载和维持所需性能水平所需的服务器、CPU 或内存的数量。
延迟类比:
- L1 缓存访问(0.5ns) :相当于从你的口袋里拿出一张卡片。
- 内存访问(100ns) :相当于走到隔壁房间拿东西。
- 磁盘随机访问(10ms) :相当于从城市的另一端驱车取物品。
- 网络延迟(100ms) :相当于从一个国家飞到另一个国家。