原文题目是”Back-of-the-envelope estimation”,直译是信封反面估算的意思,”Back-of-the-envelope estimation”是一个短语,用于形容应用简化的假如和基本原理进行的粗略或疾速计算,通常在信封反面或任何可用的纸上进行。它是一种在不进行详细分析或简单计算的状况下进行粗略预计或近似的办法。
信封反面估算的目标是提供一个大抵数字或对概念的规模或可行性有个大抵的理解,而无需投入大量工夫或资源进行准确计算。它可用于评估一个想法的可行性,评估决策的潜在影响,或疾速比拟不同选项。
尽管信封反面估算可能不足详细分析的精确性,但它们对于疾速决策、启动进一步考察或以扼要易懂的形式传播思维是有价值的。
在零碎设计面试中,你有时会被要求应用信封反面估算来评估零碎容量或性能需求。依据谷歌高级研究员杰夫·迪恩的说法,“信封反面的计算是你利用思维试验和常见性能数字组合创立的估算,以便对哪些设计将满足你的需要有一个好的了解”[1]。
你须要有对可扩展性根底的良好了解,以无效地进行信封反面估算。以下概念应该失去充沛了解:二的力量[2],每个程序员应该晓得的提早数字,以及可用性数字。
欢送关注我的公众号:更AI。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源
二的力量
尽管在解决分布式系统时,数据量可能会变得十分大,但所有的计算都归结为根本的计算。为了失去正确的计算结果,晓得以二的幂来示意的数据量单位至关重要。一个字节是8个比特的序列。一个ASCII字符应用一个字节的内存(8比特)。上面是一个解释数据量单位的表格(表2-1)。
每个程序员都应该晓得的提早数字
谷歌的迪恩博士揭示了2010年典型计算机操作的长度[1]。随着计算机变得更快、更弱小,一些数字曾经过期。然而,这些数字依然应该可能让咱们对不同计算机操作的快慢有个大抵的理解。
正文
ns = 纳秒,μs = 微秒,ms = 毫秒
1 ns = 10^-9 秒
1 μs= 10^-6 秒 = 1,000 ns
1 ms = 10^-3 秒 = 1,000 μs = 1,000,000 ns
一位谷歌软件工程师建设了一个工具来可视化迪恩博士的数字。这个工具也将工夫因素思考在内。图2-1显示了截至2020年的可视化提早数字(图源:参考资料[3])。
通过剖析图2-1中的数字,咱们失去以下论断:
- 内存速度快,但磁盘速度慢。
- 尽可能防止磁盘寻址。
- 简略的压缩算法速度快。
- 如果可能,压缩数据后再通过互联网发送。
- 数据中心通常位于不同地区,发送数据之间须要工夫。
可用性数字
高可用性是一个零碎可能间断运行一个冀望的长时间段的能力。高可用性以百分比掂量,其中100%示意服务没有停机工夫。大多数服务的可用性在99%到100%之间。
服务级别协定(SLA)是服务提供商罕用的术语。这是你(作为服务提供商)与你的客户之间的协定,这个协定正式定义了你的服务将提供的运行工夫程度。云服务提供商Amazon [4],Google [5]和Microsoft [6]将他们的SLA设定在99.9%或以上。运行工夫传统上以九为单位掂量。九的数量越多,体现越好。如表2-3所示,九的数量与预期的零碎停机工夫相干。
示例:估算Twitter的QPS和存储需要
请留神,以下数字仅用于此练习,因为它们并非来自Twitter的实在数字。
假如:
- 有3亿月沉闷用户。
- 50%的用户每天应用Twitter。
- 用户均匀每天公布2条推文。
- 10%的推文蕴含媒体内容。
- 数据存储5年。
估算:
每秒查问数(QPS)估算:
- 每日沉闷用户(DAU)= 300 million * 50% = 1.5亿
- 推文QPS = 1.5亿 * 2 条推文 / 24小时 / 3600秒 = ~3500
- 峰值QPS = 2 * QPS = ~7000
咱们只在这里估算媒体存储。
-
均匀推文大小:
- tweet_id 64字节
- 文本 140字节
- 媒体 1 MB
- 媒体存储:1.5亿 2 10% * 1 MB = 每天30 TB
- 5年媒体存储:30 TB 365 5 = ~55 PB
提醒
信封反面的估算齐全是对于过程的。解决问题比取得后果更重要。面试官可能会测试你的问题解决能力。这里有一些能够遵循的提醒:
- 取整和近似。在面试过程中进行简单的数学运算是艰难的。例如,“99987 / 9.1”的后果是什么?没必要花贵重的工夫去解决简单的数学问题。不须要准确。利用取整和近似。这个除法问题能够简化为:“100,000 / 10”。
- 写下你的假如。写下你的假如以便稍后参考是个好主见。
- 标记你的单位。当你写下“5”时,是指5 KB还是5 MB?你可能会因而混同本人。写下单位,因为“5 MB”有助于打消模糊性。
- 常被问到的信封反面估算:QPS、峰值QPS、存储、缓存、服务器数量等。在为面试做筹备时,你能够练习这些计算。游刃有余。
祝贺你曾经到了这一步!当初给本人一个投诉。干得好!
欢送关注我的公众号:更AI。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源
参考资料
[1] J. Dean. Google Pro Tip: 应用信封反面计算法抉择最佳设计:
http://highscalability.com/blog/2011/1/26/google-pro-tip-use-…
calculations-to-choo.html
[2] 零碎设计入门:https://github.com/donnemartin/system-design-primer
[3] 每个程序员都应该晓得的提早数字:
https://colin-scott.github.io/personal_website/research/inter…
[4] 亚马逊计算服务级别协定:
https://aws.amazon.com/compute/sla/
[5] 计算引擎服务级别协定 (SLA):
https://cloud.google.com/compute/sla
[6] Azure服务的SLA摘要:https://azure.microsoft.com/en-
us/support/legal/sla/summary/