dellis
2022/04/04阅读:246主题:默认主题
系统设计 - Chapter 2: 封底估算
【翻译: System Design Interview: An Insider’s Guide】
Chapter 2:封底计算(BACK-OF-THE-ENVELOPE ESTIMATION)
【译者注】:封底计算,英文为back-of-the-envelope calculations (BotEC),这个术语由物理学家恩里科·费米创造,指用简单到可以在手边随便的什么小纸片(比如信封的背面上)进行的计算,对复杂的方程作同一数量级内的近似求解。
在系统设计面试中,有时会要求您使用封底计算来评估系统容量或性能需求。据谷歌高级研究员杰夫·迪恩(Jeff Dean)称,“封底计算将心中模拟实验和常见性能数字结合在一起,之后做出的估计。用这种方式来获取对系统设计良好的直觉。”[1]。
您需要对可伸缩性基础有很好的了解,才能有效地执行封底计算。应该充分理解以下概念:2的幂[2](power of two)、常见的时延数和可用性数量。
2的幂
在处理分布式系统时,数据量可能会变得巨大,但计算是基础的。为了获得正确的计算结果,可以使用2的幂去了解数据量单位。Byte是由8bit组成的序列。ASCII字符使用一个byte的内存(8位)。下表解释了数据量单位(表2-1)。
幂次 | 大致估计值 | 全名 | 缩写名 |
---|---|---|---|
10 | 1 Thousand | 1 Kilobyte | 1 KB |
20 | 1 Milion | 1 Megabyte | 1 MB |
30 | 1 Billion | 1 Gigabyte | 1 GB |
40 | 1 Trilion | 1 Terabyte | 1 TB |
50 | 1 Quadrillion | 1 Petabyte | 1 PB |
程序员必须知道的时延数量
谷歌的博士揭示了2010年典型计算机操作的时间长度[1]。随着计算机变得更快、更强大,一些数字已经过时。然而,这些数字仍然能够让我们了解不同计算机操作的快速性和缓慢性。
操作名称 | 时间 |
---|---|
L1 cache 引用 | 0.5 ns |
分支预测失误 | 5ns |
L2 cache 引用 | 7 ns |
Mutex lock/unlock | 100 ns |
主内存引用 | 100 ns |
使用Zippy压缩1K Byte | 10 μs |
通过1 Gbps网络发送2K字节 | 20 μs |
从内存中按顺序读取1 MB | 250 μs |
同一数据中心内往返 | 500 μs |
磁盘搜索 | 10 ms |
从网络中按顺序读取1MB | 10ms |
从磁盘按顺序读取1 MB | 30 ms |
发送数据包CA(加利福尼亚州)->荷兰->CA | 150ms |
【注】:
-
ns=纳秒,μs=微秒,ms=毫秒 -
ns=10^-9秒 -
1μs=10^-6秒=1000 ns -
1 ms=10^-3秒=1000μs=1000000 ns
谷歌软件工程师开发了一个工具来可视化Dean博士的数字。该工具还考虑了时间因素。图2-1可视化显示了2020年的时延数(图来源:参考资料[3])
通过分析图2-1中的数字,我们得出以下结论:
-
内存很快,但磁盘很慢。 -
尽可能避免磁盘搜索。 -
简单的压缩算法速度快,如果可能,在通过互联网发送数据之前压缩数据。 -
数据中心通常位于不同的区域,在它们之间发送数据需要时间。
可用性(Availability)
高可用性是指系统能够在理想的长时间内持续运作的能力。高可用性是以百分比来衡量的,100%意味着服务没有宕机时间。大多数服务可用性在99%到100%之间。
服务水平协议(SLA)是服务提供商常用的术语。这是服务提供商和客户之间的协议,该协议正式定义了您的服务将提供的正常运行时间级别。云提供商亚马逊[4]、谷歌[5]和微软[6]将服务水平协议(SLA)设定为99.9%或以上。可用性通常以9来衡量,9越多越好。如表2-3所示,9的数量与系统预计宕机时间相关。
可用性 | 平均每天宕机时间 | 平均每年宕机时间 |
---|---|---|
99% | 14.4 分钟 | 3.65天 |
99.9% | 1.44 分钟 | 8.77小时 |
99.99% | 8.64 秒 | 52.6分钟 |
99.999% | 864毫秒 | 5.26分钟 |
99.9999% | 86.4毫秒 | 31.56秒 |
估算twitter的QPS和存储需要
注意以下数字不是twitter真实用户数据,仅仅是一个联系
假设:
-
每月有3亿的活跃用户 -
50%的用户每天使用twitter -
用户每天平均发送两条推文 -
10%的推文有媒体内容(图片、视频) -
数据需要存5年
估算
1)QPS(Query per second)估算:
-
DAU(Daily active user,每日活跃用户): 300million * 50% = 150 million -
Tweets QPS = 150 million * 2 tweets/24小时/3600s = ~3500 -
QPS峰值 = 2* QPS = ~7000
2)媒体存储内容估算:
-
平均推文大小: 推文Id:65 byte 推文正文:140 bytes 媒体:1MB -
媒体大小:150million * 2 * 10% = 30TB/天 -
5年的媒体存储: 30TB * 365 * 5 = ~55PB
提示
封底估算主要是过程, 解决问题比得到结果更重要,面试者主要考察你的问题解决能力,有以下提示
-
四舍五入和近似值。在面试中很难进行复杂的数学运算。例如,“99987/9.1”的结果是什么?没有必要花费宝贵的时间来解决复杂的数学问题。预计不会有精确性。使用四舍五入的数字和近似值。以上问题可以简化为:“100000/10” -
写下你的假设:最好写下你的假设,用于之后参考。 -
给数字添加单位。当你写下“5”时,它是指5KB还是5MB?而写下单位有助于消除歧义。 -
常见的信封背面估算:QPS、QPS峰值、存储、缓存、服务器数量等,平时可以做些这方面的联系,以达到熟能生巧。
参考文献
Reference materials [1] J. Dean.Google Pro Tip: Use Back-Of-The-Envelope-Calculations To Choose The Best Design: http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope- calculations-to-choo.html [2] System design primer: https://github.com/donnemartin/system-design-primer [3] Latency Numbers Every Programmer Should Know: https://colin-scott.github.io/personal_website/research/interactive_latency.html [4] Amazon Compute Service Level Agreement: https://aws.amazon.com/compute/sla/ [5] Compute Engine Service Level Agreement (SLA): https://cloud.google.com/compute/sla [6] SLA summary for Azure services: https://azure.microsoft.com/en- us/support/legal/sla/summary/
作者介绍