可靠性與風險管理#

可靠性(Reliability)不是越高越好,而是一個需要刻意取捨的工程決策。本章談的是「該追求多少可靠性」這個策略問題——如何在成本、開發速度與使用者體驗之間,找到一個經得起檢驗的平衡點。具體的 SLI/SLO 量化方法見 13 SLI/SLO/Error Budget,監控訊號的採集與展示見 09 可觀測性

為何不追求 100% 可靠性#

把「永不當機」當成目標,是最常見也最昂貴的誤區。原因有三:

  • 邊際成本陡增:從 99% 提升到 99.9% 也許只需多加一台備援;但從 99.99% 提升到 99.999%,往往需要跨區多活、全鏈路冗餘、專職團隊全年無休待命,成本呈指數級上升。
  • 使用者感知不到差異:使用者的端到端體驗,受限於鏈路上最不可靠的一環——家用 Wi-Fi、手機訊號、ISP、瀏覽器。當這些環節的可靠性只有 99% 時,把後端服務從 99.99% 提升到 99.999% 對使用者而言毫無分別。
  • 背景錯誤率(background error rate):網際網路本身就有一定比例的封包遺失與連線失敗。當服務的可靠性已經高於使用者所處網路環境的背景錯誤率時,再投入資源已無實質意義。

可靠性的目標應該由「使用者實際能感知並在意的體驗」反推,而不是由工程師的完美主義決定。超出使用者感知門檻的可靠性,是純粹的浪費。

成本與可靠性的權衡曲線#

可靠性的投入與回報並非線性。下圖示意「每多一個 9」所需的成本與其帶來的使用者價值:

成本 / 價值
  ▲
  │                                    成本 ┄┄┄┄┄┄►╱
  │                                       ╱
  │                                     ╱
  │                                  ╱
  │                              ╱
  │                         ╱
  │                  ╱╱
  │           ╱╱
  │      ╱╱            使用者感知價值 ┄┄┄┄┄┄┄┄┄┄┄┄
  │   ╱╱        ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
  │ ╱╱  ┄┄┄┄┄┄┄
  └────┬──────┬──────┬──────┬──────┬───────────►
      90%    99%   99.9%  99.99% 99.999%   可用率
            │←─甜蜜點─→│      │←──浪費區──→│
  • 甜蜜點:在曲線交叉前的區段,每多一個 9 帶來的使用者價值遠大於成本,值得投資。
  • 浪費區:當成本曲線陡然上揚、而價值曲線早已趨於平緩時,繼續加碼就是把工程資源燒在使用者察覺不到的地方。

多出來的可靠性不是免費的「保險」——它直接擠壓了開發新功能的工程時間。過度可靠的服務,等於用「沒人在意的穩定」換掉了「使用者真正想要的功能」。

不同服務的風險容忍度#

不是所有服務都該套用同一條可用率目標。風險容忍度(risk tolerance)取決於服務的性質、使用者群與失效的後果。一個粗略的二分法:

維度消費者服務(Consumer)基礎設施服務(Infrastructure)
典型例子網站、App、推薦系統儲存、佇列、共用資料庫、認證
失效影響範圍單一功能 / 部分使用者大量上游服務同時受害
可用率目標中高(如 99.9%)高(如 99.99% 以上)
延遲敏感度視功能而定通常極高(拖慢全體下游)
一致性要求常可接受最終一致常需強一致
取捨傾向偏向開發速度與功能迭代偏向穩定與可預測性

基礎設施服務的可靠性會「乘載」在所有依賴它的服務上:一個被一百個服務依賴的資料庫,其抖動會被放大一百倍。因此基礎設施的可靠性門檻天然要比末端的消費者服務更高。

可靠性決策表#

面對「該設多高的目標」時,可用以下維度逐項評估,再彙整成一個可被質疑、可被討論的決策:

決策維度關鍵提問偏向「更高可靠性」偏向「更快迭代」
失效後果失效會造成什麼損失?金流、安全、資料遺失體驗略降、可重試
使用者期待使用者預期它總是可用嗎?是(如登入、支付)否(如非核心推薦)
可恢復性失效後多快能恢復、能否重試?難恢復、不可重試易恢復、可重試
競品標準同類服務的市場期待是多少?競品都很穩市場容忍度高
收入關聯不可用是否直接損失營收?直接掛鉤營收關聯薄弱
背景錯誤率目標是否已高於使用者網路環境的背景錯誤率?尚未達到早已超過(再加無意義)

決策的產出應該是一個明確的數字(如「99.9%」)與其依據,而不是一句「越穩越好」。這個數字接著就成為 SLO 的輸入。

小結#

  • 可靠性是要花錢買的工程決策,目標應由使用者可感知的價值反推,而非工程完美主義。
  • 「每多一個 9」的成本指數級上升,務必認清甜蜜點與浪費區的分界。
  • 消費者服務與基礎設施服務的風險容忍度天差地遠,不可一概而論。
  • 用結構化的決策表把「該多可靠」變成一個可討論、可質疑的明確數字,再交給 SLO 落地。