在NALSD面试中应该考虑的问题

我在前面描述了一次典型的编码采访 。 除了编码之外,几乎总是存在关于系统设计的问题。 (大型)系统设计。 就SRE的采访而言,这是更有趣(对我而言)的野兽-NALSD。 非抽象的大型系统设计。 SWE和SRE之间的主要区别正是这些字母“ NA”。

有什么区别,以及如何为此做准备? 让我们来看一个例子。 举例来说,我们将讲一些非常重要的内容,没人会要求进行真正的采访(在Google中):)

例如-让我们设计一个库。 对于纸质书,通常是一本。 下面的整个文本用一个小时的时间撰写而成,大致显示了您可以做什么和重要的事情。 因此,请原谅我的困惑,但我认为是这样(因此存在)。

NALSD问题:设计一个公共图书馆。


首先,我们对负载的特性感兴趣,或者我们自己做一个合理的假设。 由于这是有关可伸缩系统的问题,因此这是至少一百万人口的城市。 值得考虑的选项-一栋大型建筑物或地区图书馆,再加上存储。 在我看来,后者更合理。 特别是如果不是城市,而是城市。

因此,我们现在将重点放在一个城市的系统上(有些保留,我们可以在更高级别上应用类似的机制来扩展到许多城市)。 因此,这座城市有100万人。 为了方便估计,我们将数字四舍五入-假设有100万读者。 读者可以随时独立阅读。 因此,我们可以将其视为一个简单的泊松过程。 但是通常情况下,“进行中”的计数通常很困难,因此,请采取另一种简化步骤,只需要1%的读者每天便想读一本书。 总计,为了进行进一步的计算,我们每天需要处理10,000本书。

我们的任务是在每天超过一百万本的城市中提供每天发行10,000本书的可能性(顺便说一句,将来在其他任何一天退还10,000本书)。 在这一点上,单一图书馆或地区的问题已经消失了(顺便说一句,要使整整百万读者成为潜在的读者,他们必须能够在合理的时间内到达图书馆,否则必定会因超时而使取书的愿望减少)。 因此,我们需要评估每个本地图书馆的容量。 考虑到人口密度和可及性,这样做是正确的,但是由于这不会对系统本身产生很大影响,因此,为简化计算,我们假设将它们均匀放置。 但这并不意味着我们可以共享它们。 显然,在城市中将10,000个图书馆和一本书平均分配在这里是没有意义的,因此您需要了解什么才有意义。 我们离开到下面的水平。

因此,一个图书馆。 为了使之有意义,大多数来访者必须找到他们需要的书。 这意味着我们将需要记录和预测最流行的查询,并准备好这些书。 然后,我们需要保持分类原则。 随便说一句,我要说的是,本地图书馆应该至少有1000项,其中最顶部是多个副本,顶部应该多一些,末尾要少一些。 我们图书馆的平均书籍阅读时间为3天到2周(实际上,特征取决于书籍,此处需要单独分析),我们认为它等于平均星期数并继续前进。 就是说,丢失的书大约有一个星期,因此需要将顶尖的书存放一个星期(然后它们才能从退货中恢复)。

假设平均通货膨胀系数为6。因此,存储容量从6,000本书开始。 少表示这只是一个很小的顶部,在某些情况下仍可以提供帮助(例如,在儿童游乐室附近的超级市场中有“暮光之城”的小岛),但我们暂时将其留在外面。

在“平衡”状态下,它们返回并花费大约一天的时间(加上或减去散点),但是我们仍然需要能够接受增加的峰值返回次数(例如,由于外部同步(例如假期或时尚改变))。 没错-模拟。 但是现在,我们现在将三分之一用作缓冲区。 我们总共支持6,000本书可供发行,另外还有2,000本书的储备金。

因此,我们需要一个可以存储8000本书的单元。 每日补给非常昂贵,这意味着需要一两个星期。 两周内,有6,000本书,但回报率存在偏差,每天大约300本书。 在开放之时,我们可以对全部8000本书进行评分,以便在第一本归还之前创建发行量最初的2000本。 2000年,共3天=每天约600本书,加上缓冲=每天800本书。

让我们估算带宽和存储限制。 一本书平均需要2厘米的线性空间,即8000本书-160米。 垂直旋转40米,旋转4次。 我们分成5米的机架,得到8个机架,每个机架4个5米长。 一位图书管理员(或机器人图书管理员)将能够使用两个架子工作,提取一本书将需要5秒钟才能到达书架,取出或放书需要5秒钟,倒退需要5秒钟,总共需要15秒钟。 4名馆员将每分钟最多为我们提供约15本书,即每小时从仓库中获取900本书。

我们增加了处理请求的时间(10s),搜索(5s),进入接收和发行系统(2s)=>每小时400本书。 因此,高峰期的存储量可以每小时接受400本书,因此在2个工作小时内每天可获得800本书。

现在我们考虑其他特征:为了每小时由4个人分发400本书,我们需要在处理窗口前面的队列中将100个人容纳在等候室中,以免这些人在入口和出口处造成拥挤。 也就是说,入口组每小时必须在两个方向上通过400人。 事实证明,主要限制因素甚至不是存储空间,而是大厅和入口组的容量。

这意味着将可以通过更精确的计算找到最佳的储藏室和储藏室比率。

因此,在整理出单位之后,我们返回上一级。 我们估计图书馆每天的总负载约为10,000本书,我们算出一个单元为每天800本书,也就是说,我们需要12.5本书。 通过在城市周围进行地理分布,每个阅读器都可以到达一个或两个替代单位(在城市边界),甚至3-4个(内部),这使您可以稍微缓解交通高峰和/或对特定位置的需求增加。

我们还知道,任何时候图书馆都可以关闭(火灾,卫生检查,对冰箱的把手进行涂漆或其他处理),而且随着图书馆数量的增加,两个图书馆可能会掉下来,所以我们需要一个备用的图书馆每5-6个单位。 总共15个单元必须确保所需的性能,前提是它们保持仓库中估计的库存。

为了保持估计的库存量,我们将需要每周或每两周更新一次(我们认为高于两周),以更新大约一半的分类以遵循趋势,依此类推。 这意味着每个单位每两周需要运输和出口4,000本书。 每次导入和导出时,都必须从存储库中删除这些相同的4,000本书,然后再将其中的其他书籍放入其中。 每小时更新400本书,最大负荷下需要10个小时才能更新产品种类。 看来,这仍然还算不错,但是再次,随着大量的装载,许多事情会进展得更快,但是,保持产品分类所需的时间比与人群合作多了5倍。

平均书本(2厘米* 20厘米* 30厘米)约为1.5升,即4000本书= 6立方米。 它很容易放入瞪羚。 一立方米纸的重量为600公斤,即6立方米的纸张为3.6吨。 瞪羚的承载能力为半吨,因此将需要三只瞪羚。 再加上一个备份。 我们有15个单位,每2周更新一次,但我们的分布已达到极限,我们必须添加另一个瞪羚。

而且我们没有时间考虑这些瞪羚的运输地点和地点,因此,供应商的仓库以及与之失去关联的书籍的卸货点就出现在图表上...

时间到了。 NALSD问题有什么异常之处? 可伸缩性必须在任何大型系统设计中都可以。 最主要的是具体性

我在上面做了很多假设和假设,但是所有后续估计都是基于先前的估计。 对于数字,我也尝试给出“如何正确评估”,但是,忘记做起来很容易,累了就忘记了。 从内存中保留一些数字仍然很容易,没有任何解释...但是由于设计是具体的,如果任何假设被证明是错误的,则可以对其进行修复并在以后进行重新叙述。

现在我还记得,在接受估计的采访中,我采用了一个600磁盘的IOPS,这仅仅是因为我最近优化并隐含了一个阵列,其中_array_产生了600 IOPS……受访者当时对我有些惊讶-600 IOPS到磁盘? :D

在面试中,面试官可以纠正您的任何假设。 或添加某种限制(您不知道,没有考虑,没有要求,或者只是动态更改传统知识)。 同时,由于您仅使用特定数字进行操作,因此这只是数字的微不足道的更新。

如果假设的调整导致系统的重新设计,那么这要么是设计错误,要么是不正确的调整,或者是超出系统的适用范围,这在现实生活中也不是罕见的情况。 重要的是不要错过这些时刻,并在设计阶段和进行任何调整时评估接收到的数字的真实性。

作为SRE,我们必须考虑在实际硬件的实际限制下扩展实际系统。 也许有一种出色的算法可以为大量的内存交换大量的时间成本。但是,在实际情况下,您仍然不能在一个处理器内核上放置1PB的RAM。 因此,如果我们有1PB的RAM,那么至少有1万个处理器。 或二十。 或三十。 而且,我们必须在给定条件下,从现在到现在,寻找最优的而不是全局的。

您不需要记住确切的数字,但是您必须对顺序有所了解:相同的IOPS,HDD大约有一百,而SSD则有数十万。 但是,成千上万的HDD成本与TB的SSD成本之比为三分之四。 这还不包括线束-机架中的位置,它们的刀片,交换机上的端口以及其他在计费达到PB时不再占一分钱的东西。

现在向后靠在椅子上,放松一下,尝试设计一个通过订阅提供新鲜鸡蛋的系统。

如果希望与讲英语的同事分享,则可以选择英语 (以及英语中心 )。

Source: https://habr.com/ru/post/zh-CN435898/


All Articles