容量規劃

Vibe Prompt

「幫我根據過去 3 個月的流量趨勢預測下個月的資源需求,並建議何時擴容。」

預測方法

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

# 過去 90 天的每日最大 QPS
days = np.arange(90).reshape(-1, 1)
# 模擬成長趨勢 + 季節性
qps = 100 * (1 + days.flatten() / 90) + 20 * np.sin(days.flatten() * 2 * np.pi / 7)

model = LinearRegression()
model.fit(days, qps)

# 預測未來 30 天
future_days = np.arange(90, 120).reshape(-1, 1)
predicted_qps = model.predict(future_days)

print(f"預測第 120 天 QPS: {predicted_qps[-1]:.0f}")
print(f"成長率: {(predicted_qps[-1]/qps[-1] - 1) * 100:.1f}%")

# 擴容建議
target_qps_per_pod = 500
current_pods = int(qps[-1] / target_qps_per_pod) + 1
future_pods = int(predicted_qps[-1] / target_qps_per_pod) + 1
print(f"當前所需 Pod: {current_pods}")
print(f"下月所需 Pod: {future_pods}")
print(f"建議提前 {30 - 7} 天擴容至 {future_pods} 個 Pod")

擴容策略

| 策略 | 適用場景 | |------|---------| | 垂直擴容 | 單體應用,短期 | | 水平擴容 | 微服務,長期 | | 預先擴容 | 可預測流量(促銷活動) | | 自動擴容 | 波動劇烈 | | 排程擴容 | 固定週期(上班日 vs 假日) |


關鍵要點

  • ✅ 容量規劃的核心問題:「何時需要加機器?」
  • ✅ 預測方法:趨勢分析 + 季節性模型 + 業務成長指標
  • ✅ 領先指標:新用戶註冊率、行銷活動排程、產品發表時程
  • ✅ Auto Scaling 是容量規劃的實作工具,不是替代方案
  • ✅ 每年兩次的 Load Test(壓力測試)是 SRE 的必要工作

規劃流程

收集歷史數據 ──▶ 分析成長趨勢 ──▶ 預測未來需求 ──▶ 設定 Threshold
    ▲                                                        │
    └──────────────── 調整預測 ───────────────────────────────┘
                                        │
                                        ▼
                               Auto Scaling 設定
                                        │
                                        ▼
                               Load Test 驗證

預測公式範例

def predict_capacity(current_usage, growth_rate, months_ahead):
    """
    預測未來所需容量
    current_usage: 當前最大使用量 (如 500 req/s)
    growth_rate: 月成長率 (如 0.1 = 10%)
    """
    for m in range(1, months_ahead + 1):
        future = current_usage * (1 + growth_rate) ** m
        required_instances = math.ceil(future / 100)  # 假設每台 100 req/s
        buffer = required_instances * 1.5  # 50% 緩衝
        print(f"第 {m} 個月: {future:.0f} req/s → {required_instances} 台 (緩衝: {int(buffer)} 台)")

容量規劃:預測未來、提前準備

確保系統有足夠資源應付未來流量——但不浪費錢。

預測方法

  • 趨勢分析:用歷史流量預測成長
  • 壓力測試:知道系統最大容量
  • Auto Scaling:根據負載自動增減

下一章預告:混沌工程

主動注入錯誤來測試系統韌性。

容量規劃的實戰方法

How:怎麼做容量規劃?

容量規劃的目標很簡單——在「效能足夠」和「不浪費錢」之間找到平衡。具體的執行步驟如下:

第一步:收集歷史資料

你需要至少 3-6 個月的歷史流量數據。關鍵指標包含:

  • 每日最大 QPS(每秒查詢數):決定服務需要多大規模
  • P95/P99 延遲:流量增加時延遲的變化趨勢
  • 資源使用率:CPU、記憶體、磁碟、網路 I/O
  • 用戶增長率:新註冊、活躍用戶的成長速度
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

# 模擬過去 90 天的每日最大 QPS
days = np.arange(90).reshape(-1, 1)
# 假設每天成長 1%,並有每週週期性波動
qps = 500 * (1 + days.flatten() / 90) + 100 * np.sin(days.flatten() * 2 * np.pi / 7)

model = LinearRegression()
model.fit(days, qps)

# 預測未來 30 天
future = np.arange(90, 120).reshape(-1, 1)
predicted = model.predict(future)

print(f"當前 QPS: {int(qps[-1])}")
print(f"30 天後預測 QPS: {int(predicted[-1])}")
print(f"需提前準備: {int(predicted[-1] / 500 + 1)} 個 Pod")

第二步:設定 Threshold

Threshold(閾值)決定何時觸發擴容:

| 指標 | 警告閾值 | 緊急閾值 | 說明 | |:----|:--------|:--------|:----| | CPU 使用率 | > 60% | > 80% | 持續 5 分鐘 | | 記憶體使用率 | > 70% | > 85% | 持續 5 分鐘 | | QPS 成長率 | > 20%/月 | > 50%/月 | 需要提前擴容 | | P99 延遲 | > 200ms | > 500ms | 用戶體驗受影響 |

第三步:選擇擴容策略

| 策略 | 做法 | 適用場景 | 成本 | |:----|:----|:--------|:----| | 垂直擴容(Scale Up) | 換更大的機器 | 單體應用、資料庫 | 中(有限制) | | 水平擴容(Scale Out) | 加更多機器 | 微服務、無狀態應用 | 低(雲端首選) | | 預先擴容 | 活動前手動擴容 | 雙 11、促銷活動 | 中(需預測) | | Auto Scaling | 根據負載自動增減 | 流量波動大 | 最低 | | 排程擴容 | 上班日/假日不同規模 | 固定週期 | 低 |

Why:為什麼容量規劃這麼重要?

不做事前容量規劃的後果

  • 雙 11 流量暴增 10 倍,網站直接掛掉,每小時損失數百萬
  • 為了以防萬一買了太多的伺服器,每個月浪費 30% 的雲端費用
  • 資料庫磁碟空間用盡,導致整個服務中斷(這是最常見的 production 事故之一)

做事前容量規劃的好處

  • 知道何時該擴容,不用等到出事才應急處理
  • 可以跟財務部門預估下季度的雲端費用
  • 壓力測試可以提前發現系統的瓶頸

What:容量規劃的三大產出

  1. 容量預測報告:未來 3-6 個月的資源需求預估
  2. 擴容 Runbook:標準化的擴容操作步驟
  3. 壓力測試報告:系統的最大容量和瓶頸所在

名詞解釋

| 名詞 | 解釋 | |:----|:----| | QPS | Queries Per Second,每秒查詢數 | | Threshold | 觸發行動的數值門檻 | | Auto Scaling | 自動擴展,根據負載增減資源 | | Load Test | 壓力測試,找出系統的最大容量 | | Bottleneck | 系統中限制整體效能的元件 | | Buffer | 緩衝容量,通常保留 20-50% 的備用資源 |

為什麼要學容量規劃?

容量規劃是 SRE 從「被動救火」進階到「主動預防」的關鍵能力。沒有容量規劃,你只能在系統出問題時應急處理;有了容量規劃,你可以提前知道問題何時會發生、提前準備。

下一章預告:混沌工程

容量規劃處理的是「預期內的成長」。下一章的混沌工程處理的是「預期外的故障」——當系統遇到沒預料到的問題時(伺服器突然掛了、網路突然斷了),你的系統能撐住嗎?混沌工程就是透過主動注入故障來回答這個問題。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!