系统设计-Ch2-封底计算

封底计算

封底计算,英文为back-of-the-envelope calculations (BotEC),这个术语由物理学家恩里科·费米创造,指用简单到可以在手边随便的什么小纸片(比如信封的背面上)进行的计算,对复杂的方程作同一数量级内的近似求解。

在系统面试中,有时您会被要求评估系统容量或系统性能。

常见数据

二的幂(Power of Two)

为了获得正确的计算,使用2的幂作为数据量单位至关重要:

幂次大致估计值全名缩写名
101 Thousand1 Kilobyte1 KB
201 Milion1 Megabyte1 MB
301 Billion1 Gigabyte1 GB
401 Trilion1 Terabyte1 TB
501 Quadrillion1 Petabyte1 PB

当然这话并不是绝对的,让我想起了stackoverflow上的一个经典问题,这个问题也在面试中很常问:
为什么转置512x512的矩阵比转置513x513的矩阵慢得多?

延迟数(Latency Numbers)

下表是2010年典型计算机操作的时间长度。随着计算机变得更快、更强大,一些数字已经过时。然而,这些数字仍然能够让我们了解不同计算机操作的快速性和缓慢性。

操作名称时间(ns 纳秒us 微秒ms 毫秒
L1 cache reference0.5 ns
分支预测失误5ns
L2 cache reference7 ns
Mutex lock/unlock100 ns
Main memory reference100 ns
使用Zippy压缩1K Byte10,000 ns = 10 μs
通过1 Gbps网络发送2K字节20,000 ns = 20 μs
从内存中按顺序读取1 MB250,000 ns = 250 μs
同一数据中心内往返500,000 ns = 500 μs
磁盘搜索10,000,000 ns = 10 ms
从网络中按顺序读取1MB10,000,000 ns = 10ms
从磁盘按顺序读取1 MB30,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

https://stackoverflow.com/questions/11413855/why-is-transposing-a-matrix-of-512x512-much-slower-than-transposing-a-matrix-of