凌晨三點。值班工程師接到通知,畫面上只有六個字——「no upstream available」。但 upstream 明明在那裡。
範例深度文:把第二則挖深(Phase 1 sample)
這是一篇 Phase 1 範例 deep-story,用來驗證 archetype 的視覺密度、SVG widget 的暗深淺雙模渲染、與閱讀節奏。實際 routine 寫的內容會替換掉這段,但結構維持 opener → 三幕 → closer。
幕一:發生了什麼
第二則新聞的事實陳述,配合一個簡單的 SVG timeline 視覺化。下方時間軸示意三個關鍵時刻——T0 commit、T1 deploy、T2 incident。
「我們以為 health-check 會抓到,但 health-check 只看 TCP 通不通——不看 upstream 是不是回 500。」
幕二:為什麼重要
技術背景。配上第二個 SVG widget——這次是一個架構示意,顯示 reverse proxy → health-check → upstream pool 的關係。
一段配置範例:
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080; # 這台 TCP 通,但回 500
}
location / {
proxy_pass http://backend;
# 只看 connect/timeout,沒檢查狀態碼
proxy_next_upstream error timeout;
}
關鍵在那一行 proxy_next_upstream——預設只 retry connect 錯誤和 timeout,不會 retry 500。對應到生產上,那台 misbehaving upstream 就會無止盡地接到流量。
幕三:延伸與思考
影響範圍、產業脈動、延伸閱讀。這是把單一事件拉到 industry pattern 的環節。
這類「health-check 在錯的層級」的問題,並不是哪家公司獨有——只要你的 reverse proxy 預設行為被信任、又沒人去看細項配置,就會撞到。
延伸閱讀:
- 對應今日 roundup:#02 範例新聞二
Take-away:當 health-check 通過但服務還是掛——問題在「通過」的定義太鬆。下次 review reverse proxy 配置時,把 proxy_next_upstream 拉出來看一眼。