系统设计-Ch2-封底计算
封底计算
封底计算,英文为back-of-the-envelope calculations (BotEC),这个术语由物理学家恩里科·费米创造,指用简单到可以在手边随便的什么小纸片(比如信封的背面上)进行的计算,对复杂的方程作同一数量级内的近似求解。
在系统面试中,有时您会被要求评估系统容量或系统性能。
常见数据
二的幂(Power of Two)
为了获得正确的计算,使用2的幂作为数据量单位至关重要:
幂次 | 大致估计值 | 全名 | 缩写名 |
---|---|---|---|
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 |
当然这话并不是绝对的,让我想起了stackoverflow上的一个经典问题,这个问题也在面试中很常问:
为什么转置512x512的矩阵比转置513x513的矩阵慢得多?
延迟数(Latency Numbers)
下表是2010年典型计算机操作的时间长度。随着计算机变得更快、更强大,一些数字已经过时。然而,这些数字仍然能够让我们了解不同计算机操作的快速性和缓慢性。
操作名称 | 时间(ns 纳秒 , us 微秒 ,ms 毫秒 ) |
---|---|
L1 cache reference | 0.5 ns |
分支预测失误 | 5ns |
L2 cache reference | 7 ns |
Mutex lock/unlock | 100 ns |
Main memory reference | 100 ns |
使用Zippy压缩1K Byte | 10,000 ns = 10 μs |
通过1 Gbps网络发送2K字节 | 20,000 ns = 20 μs |
从内存中按顺序读取1 MB | 250,000 ns = 250 μs |
同一数据中心内往返 | 500,000 ns = 500 μs |
磁盘搜索 | 10,000,000 ns = 10 ms |
从网络中按顺序读取1MB | 10,000,000 ns = 10ms |
从磁盘按顺序读取1 MB | 30,000,000 ns =30 ms |
发送数据包(加利福尼亚=>荷兰=>加利福尼亚) | 150,000,000 ns =150ms |
通过分析表中数字,我们得出以下结论:
- 内存很快,但磁盘很慢
- 尽可能避免磁盘搜索
- 简单的压缩算法速度快,尽可能在通过互联网发送数据之前压缩数据
- 数据中心(DC)通常位于不同的区域,在它们之间发送数据需要较长时间
可靠性(Availbility Numbers)
高可用性是指系统能够在理想的长时间内持续运作的能力。高可用性是以百分比来衡量的,100%意味着服务没有宕机时间。大多数服务可用性在99%到100%之间。
可用性 | 平均每天宕机时间 | 平均每年宕机时间 |
---|---|---|
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真实用户数据,仅仅是一个假设:
假设:
- twitter每月有300 million的活跃用户
- 平均50%的用户每天使用twitter
- 平均每个用户每天发送2条推文
- 10%的推文有媒体内容(图片、视频)
- 数据需要存5年
评估:
QPS估算:
- 日活用户(Daily active users) =
300 million * 50% = 150 million
- QPS(Query per second) =
150 million * 2推文 / 24 hours / 3600 seconds = 3500
- QPS峰值(Peek QPS) =
QPS / 50% = 7000
(假设当天有100%的用户使用twitter)
数据存储:
这里只估算媒体存储,并且假设平均每个媒体占用1MB
日均媒体存储 =
150 million * 2 * 10% * 1MB = 30 TB per day
5年媒体存储 =
30TB * 5 * 365 = 55 PB
Ref
本博客所有文章均采用 CC BY-NC-SA 4.0 协议 ,禁止商用,转载请注明出处!