大家好,我是你们的击剑老师。 在上一课中,我们主要解释了什么是系统设计,在本课中,我们将解释一些常见的例程和一些系统设计方法。
现在这是一个系统设计的整体过程,主要分为这些步骤,下面我们一步一步来拆解一下。
首先,第一步称为澄清。 正如我们在上一课中所说,澄清是系统设计中非常重要的一点,所以在这一步中,我们将主要向面试官询问一些基本问题。 对于某些主题也是如此。
比如设计Twitter或者设计Youtube,这种话题是很有问题的,所以我们非常有必要缩小我们需要设计的整体范围。 还有一些其他的常见问题,我们可以稍后总结一下,比如,我们可以问面试官这个项目范围到底是什么,比如这个设计范围是多少。 如果我们只是设计一个非常小的系统,比如一个学校项目,那与设计一个行业就绪的项目是完全不同的方法。
那么我们也可以问,比如说,这个项目主要是针对一个用户的,是针对终端用户,还是针对公司内部的团队,然后不涉及UI,然后不涉及CLI,也就是命令行界面,然后涉及到一些其他的组件。 像这样的问题其实是很有用的,我们后面会重点介绍,在这个阶段的澄清中,我们可以问哪些问题,我们需要强调的是,澄清,其实贯穿于每一步,比如我们在做api设计的时候。
在进行数据库设计和成本估算时,可以进行澄清。 所以我们澄清的第一步就是给你一个时间去了解这个系统,澄清之后我们应该对我们想要设计的东西有一个模糊的概念。
下一步称为需求,这意味着我们去找面试官,了解具体需求是什么。 从这个阶段开始,我们开始在 Google Doc 或我们的特定绘图软件上写下一些真正的需求。 需求有两种类型,一种称为功能需求,另一种称为非功能需求。
这个有趣的功能需求就是说,我们的系统真的提供了这个功能,它真正提供了这个功能,比如一个设计youtube的问题,那么它的工作流程可以分为普通用户上传、普通用户**这个视频。 那其实是两个不同的工作流程,那么这个要求就是至少会有两个不同的工作流程,或者例如,一个酒店预订系统,一个酒店预订系统,这个工作流程可能涉及普通用户预订酒店的功能,以及管理员。 就是这个酒店经理,他可能会修改一些酒店信息,这是两个不同的工人,我们必须弄清楚我们到底需要设计什么,这是功能要求。
非功能性需求等同于隐藏在系统设计背后的指标或特征。 通常是一些特征特征来确保我们的系统能够正常运行。 常见的指标是可操作性、可扩展性、一致性和其他一些指标,例如安全性或某些可靠性,或某些指标。 我们将在以下课程中讨论这些指标之间的一些差异,因此我们不会在这里解释它们。
在需求之后,我们的下一步称为成本估算。 在这一步中,实际上,最主要的是说我们根据一些面试官提供的一些信息,对一些具体的测量和一些数据进行一些计算。 我比较常用的两个数据之一叫做QPS,它是每秒核心数,这意味着在一秒钟内可以有多少请求进入我们的系统,这是为了衡量我们系统的整体压力,看看它的压力是否高,以及我们将来如何扩展系统。 然后还有一种叫做存储,就是看看我们的系统存储了多少数据,比如说,如果我们做一个设计youtube,如果我们的系统要运行十年,这个youtube中存储的视频数量可能是巨大的。 如果他需要存储更多的数据,也会影响到我们后面对整个数据库的选择。
这里有个误区,很多同学都会对这个地方挑毛病,他会很仔细地计算。 作为面试官,我真的不在乎数字,我在乎什么? 我关心的是一个数值层面,也就是说,如果要存储数据,就要存储PB级的数据和兆级的数据,而你选择的数据库是完全不同的,其结果是整个系统的设计可能完全不同。 一个设计完成后,要对整个系统有一个大致的了解,它要我们设计什么系统,以及它各个方面的一些需求。
让我们暂停片刻,回顾一下系统设计过程中的前三个步骤。 第一步是澄清,这需要我们与面试官进行初步沟通,然后大致了解我们需要设计什么样的系统。
第二步是需求分析,这需要我们和面试官进一步沟通,了解系统需要什么样的特性和功能。 然后下一步是成本分析或成本估算,也就是推导出一些数字来帮助我们了解系统。
在下一课中,我将教你如何详细绘制以及如何进行一些 API 或数据库设计,敬请期待!