PCA 雲端架構師之旅 04 — 定義 SLO 與 SLI
提案裡寫「系統可用性 99.99%」很容易,但這個數字要怎麼量?是首頁能打開、結帳能完成,還是 API 沒回 5xx?若量測對象沒說清楚,目標就很難拿來判斷架構是否夠用。
這一步會把上一篇的 User Story 轉成實際觀測的指標(SLI),再訂出目標值(SLO)。目標訂得越嚴格,通常需要更多備援與維運投入,得和業務需求一起討論。
這是 PCA 雲端架構師之旅 的第四步。上一篇 03 · User Stories。

圖解:SLI 是速度表,告訴你服務實際表現;SLO 是團隊想守住的目標,沒達標的容許量就是 error budget;SLA 才是對客戶寫進合約、違反後可能要賠償的承諾,通常會比內部 SLO 寬鬆。
先把三個長很像的縮寫分清楚
SLI、SLO、SLA 名字很像,先用「量測、目標、合約」分清楚:
| 名詞 | 全名 | 意思 | 範例 |
|---|---|---|---|
| SLI | Service Level Indicator | 實際量測的指標 | P95 首頁回應時間 |
| SLO | Service Level Objective | 對自己的承諾 | P95 < 1.5 秒、成功率 > 99.9% |
| SLA | Service Level Agreement | 對客戶的合約 | 違反賠 X 元、通常寬鬆於 SLO |
| Error Budget | 誤差預算 | 目標範圍內可容許的失敗量 | 30 天、時間型 99.9% 約 43.2 分鐘 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
把三者串起來看:SLI 是實際量到的表現,SLO 是團隊想達到的目標,SLA 則是對客戶的合約承諾。通常會把內部 SLO 訂得比對外 SLA 更嚴,留下處理波動的空間;量到的 SLI 再拿來檢查是否達標。
先對客戶承諾 SLA,事後才定義 SLI 和 SLO,會讓團隊連目前是否達標都說不清楚。比較穩妥的順序是先決定怎麼量、掌握現況,再討論對外承諾。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB U[使用者旅程] --> I[定義 SLI<br/>量什麼、在哪裡量] I --> B[量出基準線] B --> O[訂 SLO 與 error budget] O --> P[建立告警與處置政策] P --> A[設定較寬鬆的 SLA] A --> R[持續用實際 SLI 回饋調整] R --> O
可用性目標提高,設計也要跟著檢查
若用 30 天、以時間計算可用性的 SLO,換算成可容許的中斷時間會是:
- 99.9%(三個 9)= 每月可以掛 43.2 分鐘
- 99.99%(四個 9)= 每月只剩 4.3 分鐘
- 99.999%(五個 9)= 每月 26 秒
每月只容許約 26 秒中斷,人工收到告警後再處理通常來不及。若真的需要五個 9,就要檢查故障能否自動偵測與切換,以及資料層、網路和相依服務是否還有單點。Multi-region active-active 是可能的做法之一,但不是單看目標數字就能決定的架構。
可用性目標越高,通常越需要處理備援、故障切換和相依服務;成本不會照「多一個 9」的比例增加。當需求提出五個 9 時,先確認停機會造成什麼損失、現況最常壞在哪裡,再估算改善方案的成本。
📝 考場提點
遇到很高的可用性要求,先問目標量的是什麼、目前 SLI 表現如何,以及可容忍多少失敗。這些資料能幫你判斷要改善哪個故障點,再決定是否需要跨區域部署;直接增加區域與備援,不一定能處理真正的瓶頸。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB
R[有人要求四個或五個 9] --> M{目前 SLI 已量測?}
M -- 否 --> B[先建立基準與故障分布]
M -- 是 --> I{業務損失大於<br/>新增可靠度成本?}
B --> I
I -- 否 --> N[協商較合理的 SLO]
I -- 是 --> G[找出最主要單點與失敗模式]
G --> U[針對故障模式調整備援<br/>與切換]
U --> V[驗證 SLI 是否達標]
V --> I SLI 要量什麼:四個面向
可以從這四類指標找出真正影響使用者的失敗;不必每個故事都湊滿四項:
- 可用性(Availability) — 成功的請求佔總請求多少。
- 延遲(Latency) — P50 / P95 / P99 回應時間。注意是看分位數,不是看平均;平均會被大量的快請求拉得很好看,把真正卡住的那批使用者藏起來。
- 吞吐(Throughput) — QPS、MBps,批次處理量。
- 正確性(Correctness) — 回傳的資料對不對。這個最容易被忘記,但對金流、帳務類服務反而是最致命的——服務「有回應」不代表「回對」。
延遲只看平均值,可能藏住少數很慢的請求。假設多數請求在 50ms 完成,少數卻等了 8 秒,平均值仍可能看起來不差;P95、P99 能補上尾端體驗。實際要追哪個百分位,得看流量、使用者任務與慢請求的代價。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB
O[使用者期待的成果] --> Q{最怕哪種失敗?}
Q --> A[請求沒有成功<br/>Availability]
Q --> L[回應太慢<br/>Latency<br/>P95/P99]
Q --> T[工作來不及完成<br/>Throughput]
Q --> C[結果錯誤<br/>或資料不一致<br/>Correctness]
A --> M[定義量測邊界與好事件]
L --> M
T --> M
C --> M
M --> S[用實際資料訂 SLO] 
上面剛講的四個面向,在 Cloud Monitoring 裡就長這樣:選取指標那排(可用性、延遲、其他)決定你「量什麼」;前面的吞吐與正確性沒有現成選項,要走「其他(進階)」自訂指標。真正的暗坑是下半那組常被略過的「以要求為依據 vs 以時間範圍為依據」——前者是拿好請求數除以總請求數,後者是把時間切成一格一格、數有多少格達標。同樣訂 99.9%,兩種算法燒 error budget 的速度可能差很多,遇到這兩個詞,先認清講的是哪一種再往下算。
訂 SLO 之前,先問自己幾個問題
訂 SLO 前,先把量測邊界和未達標的處理方式談清楚;下面幾個問題若還答不上來,數字也很難用來做決策:
- 怎麼量? 從 load balancer 的 log 算?前端塞 RUM(real user monitoring,真實使用者監控)抓瀏覽器端的數字?還是看後端 trace?量的位置不同,數字差很多。
- 量到哪為止? 是從使用者瀏覽器一路到後端 API 的全程,還是只算 API 進來到 DB 出去那一段?邊界沒講清楚,SLO 就是各說各話。
- 目標要多高? 內部報表與結帳流程的失敗代價不同,先和使用者確認可接受範圍。
- 沒達標怎麼處理? 先約定告警、事故檢討與發版調整的條件,讓 SLO 能影響實際決策。
- 誰負責? 指定維護量測與回應問題的團隊,避免指標沒有人追蹤。
Error budget(誤差預算)是目標範圍內可容許的失敗量:99.9% 留下 0.1%。若 SLI 依時間計算,30 天約是 43.2 分鐘;若依請求計算,預算則是可失敗的請求數,不能直接換成停機分鐘。

畫面把目標設為 99.9%,評估範圍則是滾動 28 天,不是月曆月。每天重新計算時,前 28 天內的失敗仍會留在視窗裡;估算 error budget 前,要先看清楚使用的是哪種時間範圍與 SLI 算法。
Error budget 可以幫團隊決定發版節奏:餘額充足時維持正常發布;接近用完時,先處理可靠性問題,再評估非必要變更。最好把門檻寫進發版流程,讓討論有共同依據。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart LR
S[持續計算 SLI] --> B{Error budget 狀態}
B -- 充足 --> F[正常發版與功能實驗]
B -- 快耗盡 --> C[提高審查門檻<br/>減少高風險變更]
B -- 已耗盡 --> Z[凍結非必要發版<br/>優先修可靠度]
F --> S
C --> S
Z --> R[完成根因修正與驗證]
R --> S 走一遍範例 — 登雲書店
接著拿上一篇那 5 個 user story 來實際走一次,每個故事挑對應的 SLI / SLO 填出來。
故事 3.1 · 瀏覽暢銷榜
| 項目 | 值 |
|---|---|
| SLI 1(延遲) | Load balancer 量測的 P95 首頁回應時間 |
| SLO 1 | P95 < 1.5 秒,月度達成率 ≥ 99.5% |
| SLI 2(可用性) | 非 5xx 回應 / 總請求 |
| SLO 2 | 可用性 ≥ 99.9%(月度) |
| Error Budget 政策 | 若月度 budget 用超過 50%,暫停新功能發佈 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
故事 3.2 · 下單結帳
| 項目 | 值 |
|---|---|
| SLI 1(可用性) | /api/checkout 成功率 |
| SLO 1 | 99.99%(月度;每 1 萬次結帳請求最多 1 次失敗) |
| SLI 2(延遲) | P95 結帳 API 端到端延遲 |
| SLO 2 | P95 < 6 秒 |
| SLI 3(正確性) | 每筆訂單金流狀態一致性 |
| SLO 3 | 每月金流錯帳率 < 0.001% |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
故事 3.3 · 同步閱讀進度
| 項目 | 值 |
|---|---|
| SLI 1(延遲) | 裝置切換後進度同步完成時間 |
| SLO 1 | P95 < 10 秒 |
| SLI 2(正確性) | 進度衝突解決符合 last-write-wins |
| SLO 2 | 錯誤進度回報率 < 0.1% |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
故事 3.4 · 每日批次上傳庫存
| 項目 | 值 |
|---|---|
| SLI(吞吐) | 單批 200MB 處理時間 |
| SLO | 99% 的批次在 30 分鐘內完成 |
| SLI(延遲) | 批次失敗到寄出通知 email 的時間 |
| SLO | 99.9% 的失敗案件在 5 分鐘內通知 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
故事 3.5 · 查詢昨日銷售
| 項目 | 值 |
|---|---|
| SLI(資料新鮮度) | 前一日資料於 6am 前到位比率 |
| SLO | 月度達成率 ≥ 95% |
| SLI(查詢延遲) | 標準報表查詢 P90 |
| SLO | P90 < 30 秒 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
這裡的 error budget 政策也要依服務分級。結帳預算消耗太快時,先檢查近期變更與故障原因,必要時暫緩高風險發布;內部報表則可用不同門檻。門檻應看消耗速度、剩餘時間和業務影響,不是每個團隊都套 20% 或 50%。
這幾張表刻意給不同目標:結帳、暢銷榜和內部報表的中斷影響不一樣。數字只是案例假設,正式訂 SLO 還得看流量、使用者回饋與歷史故障資料,不能只按服務名稱分級。
目標訂下來後,再找最可能讓服務失敗的地方。結帳可能要處理資料庫與付款依賴,暢銷榜則可評估快取或降級回應;是否需要多區域,要看故障範圍、RTO/RPO 和成本。下一篇談服務邊界時,也會把這些目標帶進去。
幾個常見的 SLO 誤用
第一個,把 SLA 直接當 SLO 用。 供應商的 SLA 說明服務承諾與補償條件;你的 SLO 則應反映使用者體驗和業務需求。兩者量測範圍也可能不同,不能只把 SLA 數字複製過來。若你對客戶另有承諾,還要檢查整條服務鏈能否支撐,而不只看單一雲端產品的 SLA。
第二個,所有服務都訂 99.99%。 結帳和內部報表的停機影響不同,不一定需要相同目標。先按使用者影響與業務風險分級,再決定各服務要投入多少備援成本。
第三個,只量後端、不量前端。 API 的 P95 不能代表使用者等待的全部時間;DNS、連線、CDN 與前端繪製也可能讓頁面變慢。若 SLO 是對使用者體驗的承諾,就要選能涵蓋相應路徑的量測方式。
📝 考場提點
遇到 SLI / SLO 的題目,先在腦中分兩刀。第一刀分「這是在量什麼」:可用性、延遲、吞吐、正確性,題目敘述裡的關鍵字(「回應時間」對延遲、「成功率」對可用性、「錯帳/資料對不對」對正確性)會直接告訴你。第二刀判「這個目標合不合理」——對外金流服務該嚴、內部工具該鬆,看到「全部統一」或「內部報表也要五個 9」這類,就該懷疑目標訂得比需求高。時間上別在單一 SLO 數字上糾結太久,要練的是「重要的服務訂高、次要的訂低」這個取捨原則,而不是背特定百分比。
延伸閱讀
- SRE Book — Chapter 4 Service Level Objectives — 必讀章節。
- SRE Workbook — Implementing SLOs — 把概念落地的工作指南。
- Cloud Monitoring SLO Docs — 在 GCP 上設定 SLO 與 error budget alerting。
- The Art of SLOs by Google Customer Reliability Engineering — 工作坊教材。
下一步:SLO 訂好了,就能照著它把系統拆成微服務(Microservices),讓每個服務都揹著一個清楚的可靠度目標走。
🎯 換你練習
理論讀完,換自己來。到 架構師設計工作坊 · 步驟 4 填入你的 case study,邊寫邊內化。
讀完後,留一個學習紀錄
試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。
文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。