Back of the Envelope Estimation

Back of the Envelope Estimation #

概述 #

在系統設計面試中,我們經常需要快速估算系統的容量與效能需求。這種「信封背面估算」(Back-of-the-envelope Estimation) 能幫助我們在短時間內評估系統的可行性。


基礎知識 #

1. 2 的冪次 (Power of Two) #

由於電腦採用二進位設計,我們習慣用 2 的冪次來表達數據規模:

次方約略值全名縮寫
101,0001 Kilobyte1 KB
201,000,0001 Megabyte1 MB
301,000,000,0001 Gigabyte1 GB
401,000,000,000,0001 Terabyte1 TB
501,000,000,000,000,0001 Petabyte1 PB

提示:1 byte = 8 bits,1 個 ASCII 字元占用 1 byte

2. 常見操作的時間延遲 #

了解各項操作的執行時間,有助於判斷系統瓶頸:

操作所需時間
L1 快取參照0.5 ns
分支預測錯誤5 ns
L2 快取參照7 ns
Mutex lock/unlock100 ns
主記憶體參照100 ns
壓縮 1 KB 資料 (Zippy)10 µs
透過網路傳送 2 KB 資料20 µs
從記憶體讀取 1 MB 資料250 µs
資料中心間往返延遲500 µs
硬碟隨機讀取10 ms
從硬碟讀取 1 MB 資料30 ms
資料封包跨洲際往返150 ms

關鍵要點

  • 記憶體存取速度遠快於硬碟(約 100,000 倍)
  • 盡量避免硬碟隨機讀取
  • 壓縮演算法執行快速,傳輸前壓縮資料可節省時間
  • 跨資料中心通訊成本高昂

3. 可用性 (Availability) #

可用性衡量系統正常運作的時間比例,通常以「幾個 9」來表示:

可用性 (%)每天停機時間每月停機時間每年停機時間
99%14.40 分鐘7.31 小時3.65 天
99.9%1.44 分鐘43.83 分鐘8.77 小時
99.99%8.64 秒4.38 分鐘52.60 分鐘
99.999%864 毫秒26.30 秒5.26 分鐘
99.9999%86.40 毫秒2.63 秒31.56 秒

實戰範例:估算 Twitter 的 QPS 與儲存需求 #

前提假設 #

  • 每月活躍使用者:3 億
  • 每日活躍使用者比例:50%
  • 使用者平均每日發文:2 則
  • 含多媒體的推文比例:10%
  • 資料保存期限:5 年

QPS 估算 (Queries Per Second) #

計算每日活躍使用者 (DAU)

DAU = 300M × 50% = 150M

推文 QPS

推文 QPS = 150M × 2 推文 / 86,400 秒 ≈ 3,500

峰值 QPS(通常取平均值的 2 倍):

峰值 QPS ≈ 7,000

儲存需求估算 #

單則推文大小

  • 推文 ID:64 bytes
  • 推文內容:140 bytes
  • 多媒體(圖片/影片):平均 1 MB

每日儲存需求

每日儲存 = 150M × 2 × 10% × 1 MB = 30 TB

五年儲存需求

五年儲存 = 30 TB × 365 × 5 ≈ 55 PB

估算技巧與最佳實踐 #

核心原則 #

  1. 善用約略值
    計算不需過於精準,使用 10^3 近似 2^10 可加快計算速度

  2. 明確記錄假設
    將假設條件寫下來,避免遺忘,也方便與面試官確認

  3. 標註單位
    數字後務必加上單位(KB、MB、秒、QPS 等),避免混淆

  4. 由上而下思考
    先從大方向估算,再逐步細化

  5. 熟記常見指標

    • QPS / TPS
    • 峰值流量(通常是平均值的 2-10 倍)
    • 儲存容量
    • 頻寬需求
    • 快取命中率

常見估算場景 #

  • 使用者活躍度:DAU、MAU、在線時長
  • 流量估算:QPS、TPS、峰值流量
  • 儲存估算:資料大小、成長率、保存期限
  • 頻寬估算:上傳/下載速率、CDN 流量
  • 伺服器數量:基於 QPS 和單機處理能力

小結 #

Back-of-the-envelope estimation 是系統設計面試的基本功,透過合理的假設與快速計算,我們能在幾分鐘內評估系統的規模與挑戰。記住:精確度不是重點,合理性與思考過程才是關鍵