系统设计步骤

1.要求说明

向面试官明确系统需求

2.粗略估计

  • 系统的预期规模
  • 需要多少存储空间
  • 期望使用多少网络带宽

3.系统接口定义

定义系统期望的 API

4.定义数据模型

识别实体,画出数据流图,判断数据应该放在关系数据库中还是非关系数据库中

5.高级设计

画出方框图(架构部署图),确定组件

6.详细设计

深入挖掘两个或三个主要组件;面试官的反馈始终引导我们该对系统的哪些部分进一步讨论。我们应该介绍不同的方法,它们的优缺点,并解释为什么我们会更喜欢一种方法而不是另一种。请记住,没有单一的答案;唯一重要的是考虑不同选项之间的权衡,同时牢记系统约束。

7.识别和解决瓶颈

尝试讨论尽可能多的瓶颈以及缓解它们的不同方法。

  • 我们的系统中是否存在任何单点故障?我们正在做些什么来减轻它?
  • 我们是否有足够的数据副本,以便在我们失去几台服务器的情况下仍然可以为用户提供服务?
  • 类似地,我们是否有足够的不同服务副本在运行,以致少数故障不会导致整个系统关闭?
  • 我们如何监控服务的性能?当关键组件发生故障或性能下降时,我们是否会收到警报?