系统设计步骤
1.要求说明
向面试官明确系统需求
2.粗略估计
- 系统的预期规模
- 需要多少存储空间
- 期望使用多少网络带宽
3.系统接口定义
定义系统期望的 API
4.定义数据模型
识别实体,画出数据流图,判断数据应该放在关系数据库中还是非关系数据库中
5.高级设计
画出方框图(架构部署图),确定组件
6.详细设计
深入挖掘两个或三个主要组件;面试官的反馈始终引导我们该对系统的哪些部分进一步讨论。我们应该介绍不同的方法,它们的优缺点,并解释为什么我们会更喜欢一种方法而不是另一种。请记住,没有单一的答案;唯一重要的是考虑不同选项之间的权衡,同时牢记系统约束。
7.识别和解决瓶颈
尝试讨论尽可能多的瓶颈以及缓解它们的不同方法。
- 我们的系统中是否存在任何单点故障?我们正在做些什么来减轻它?
- 我们是否有足够的数据副本,以便在我们失去几台服务器的情况下仍然可以为用户提供服务?
- 类似地,我们是否有足够的不同服务副本在运行,以致少数故障不会导致整个系统关闭?
- 我们如何监控服务的性能?当关键组件发生故障或性能下降时,我们是否会收到警报?