系统设计::粗略评估
粗略评估
在系统设计面试中,有时你会被要求用粗略评估系统容量或性能要求。根据 Google 高级研究员 Jeff Dean 的说法,“粗略计算是你使用思想实验和常见的性能数字的组合来创建的估计,以很好地感觉到哪些设计可以满足你的要求”
你需要对可扩展性的基础知识有一个很好的感觉,以便有效地进行粗略计算。你需要好地理解以下概念:二的幂,每个程序员都应该知道的延迟数字,以及可用性数字。
2 的幂
尽管在处理分布式系统时,数据量可能变得巨大,但计算都可以归结为基础知识。为了获得正确的计算结果,关键是要知道使用 2 的幂的数据量单位。一个字节是一个 8 位的序列。一个 ASCII 字符使用一个字节的内存(8 比特)。下面是一个解释数据量单位的表格
Power | Approximate value | Full name | Short name |
---|---|---|---|
10 | 1 Thousand | 1 Kilobyte | 1 KB |
20 | 1 Million | 1 Megabyte | 1 MB |
30 | 1 Billion | 1 Gigabyte | 1 GB |
40 | 1 Trillion | 1 Terabyte | 1 TB |
50 | 1 Quadrillion | 1 Petabyte | 1 PB |
每个程序都应该知道的延迟数字
来自谷歌的 Dr.Dean 展示了 2010 年典型计算机操作的时间长度。随着计算机变得更快、更强大,有些数字已经过时了。然而,这些数字应该仍然能够让我们了解不同计算机操作的快慢。
Operation name | Time |
---|---|
L1 cache reference | 0.5 ns |
Branch mispredict | 5 ns |
L2 cache reference | 7 ns |
Mutex lock/unlock | 100 ns |
Main memory reference | 100 ns |
Compress 1K bytes with Zippy | 10,000 ns = 10 us |
Send 2K bytes over 1 Gbps network | 20,000 ns = 20 us |
Read 1 MB sequentially from memory | 250,000 ns = 250 us |
Round trip within the same datacenter | 500,000 ns = 500 us |
Disk seek | 10,000,000 ns = 10 ms |
Read 1 MB sequentially from the network | 10,000,000 ns = 10 ms |
Read 1 MB sequentially from disk | 30,000,000 ns = 30 ms |
Send packet CA (California) -> Netherlands-> CA | 150,000,000 ns = 150 ms |
一位谷歌软件工程师建立了一个工具,将 Dr.Dean 的数字可视化。该工具还将时间因素考虑在内。下图显示了截至 2020 年的可视化延迟数字
- 内存很快,但磁盘很慢。
- 如果可能的话,要避免磁盘搜索。
- 简单的压缩算法是快速的。
- 如果可能的话,在通过互联网发送数据之前先进行压缩。
- 数据中心通常在不同地区,在它们之间发送数据需要时间。
可用性
高可用性是指一个系统在一个理想的长时期内持续运行的能力。高可用性是以百分比来衡量的,100%意味着一个服务没有停机时间。大多数服务在 99%和 100%之间。
服务水平协议(SLA)是服务提供者的一个常用术语。这是你(服务提供商)和你的客户之间的协议,这个协议正式定义了你的服务将提供的正常运行时间水平。云服务提供商亚马逊、谷歌和微软将其 SLA 设定为 99.9% 或以上。正常运行时间传统上是以 9 的个数为单位衡量的。9 个数多,越好。如下表所示,9 的个数与预期系统停机时间相关。
Availability % | Downtime per day | Downtime per year |
---|---|---|
99% | 14.40 minutes | 3.65 days |
99.9% | 1.44 minutes | 8.77 hours |
99.99% | 8.64 seconds | 52.60 minutes |
99.999% | 864.00 milliseconds | 5.26 minutes |
99.9999% | 86.40 milliseconds | 31.56 seconds |
例子:评估 Twitter 的 QPS 和存储需求
请注意,以下数字仅用于本练习,因为它们不是 Twitter 的真实数字。
- 假设。
- 每月有 3 亿活跃用户。
- 50%的用户每天使用 Twitter。
- 用户平均每天发布 2 条推文。
- 10%的推文包含媒体。
- 数据存储时间为 5 年。估算。
- 每秒查询次数(QPS)估计。
- 日活跃用户(DAU)=3 亿*50%=1.5 亿
- 推文 QPS = 1.5 亿 * 2 条推文/24 小时/3600 秒 = ~3500
- Peek QPS = 2 * QPS = ~7000
- 我们在此只估算媒体存储量。
- 平均推文大小。
- tweet_id 64 bytes
- 文本 140 字节
- 媒体 1 MB
- 媒体存储。1.5 亿210%*1MB=30TB/天
- 5 年的媒体存储。30 TB * 365 * 5 = ~55 PB
- 平均推文大小。
技巧
粗略估计是关于过程的。解决问题比获得结果更重要。面试官可能会测试你解决问题的能力。这里有几个技巧可以借鉴。
- 四舍五入和近似。在面试中很难进行复杂的数学运算。例如,“99987 / 9.1 “的结果是什么?没有必要花费宝贵的时间来解决复杂的数学问题。精度不被期待。使用整数和近似值对你有利。这个除法问题可以简化如下。“100,000 / 10”.
- 写下你的假设。写下你的假设是个好主意,以便以后参考。
- 标记你的单位。当你写下 “5 “时,它是指 5KB 还是 5MB?你可能会因此而迷惑自己。写下单位,因为 “5 MB “有助于消除歧义。
- 常见的粗略估算法。QPS,峰值 QPS,存储,缓存,服务器的数量,等等。你可以在准备面试的时候练习这些计算方法。实践出真知。
恭喜你走到这一步! 现在给自己拍拍背吧。干得好!