#reliability

中斷的成本:不是時間,是被切碎 工作 ramp-up 中斷 ① 被切碎的一天 完整深度工作 ≈ 幾乎沒有(全是碎片) ② 把中斷收成一塊 不被打斷的深度工作(一整段) 中斷時段 同樣的中斷總量 → 深度工作 = 一整段 中斷的成本不是它花的時間,是把剩下的時間切碎到做不了深度工作

維運中斷:殺死生產力的不是工作量,是被切碎的時間

· tech · 約 3 分鐘 · 📚 Google SRE 讀書筆記 #17

On-call 那篇講「怎麼設計告警、誰值班」,Toil 那篇講「用 50% 護欄別讓維運吃光工程時間」。但這兩條之間,漏了一個每天都在發生、卻很少被當成問題來管的東西:中斷(interrupts)—…

#sre#reliability

PRR:上線前的一道關 開發 把服務做出來 功能 OK ≠ 可上線 PRR 生產就緒審查 ① SLO 定義了嗎 ② 監控 + 告警(黃金訊號) ③ 壓測 / 容量 / load shedding ④ 發布能不能快速 rollback ⑤ 依賴掛了會怎樣(降級) ⑥ runbook:半夜照著能做 過關 沒過 SRE 接手 共同扛 pager 退回補齊 pager 先留在開發手上 SRE 不接「不可運維」的服務——PRR 把可靠度變成上線的硬門檻

生產就緒審查(PRR):SRE 憑什麼接手一個服務

· tech · 約 4 分鐘 · 📚 Google SRE 讀書筆記 #16

前面十五篇,講的幾乎都是「服務已經在線上了,怎麼讓它更可靠」——SLO、監控、postmortem、降級。但有一個更前面的問題一直沒問:一個新服務,憑什麼可以上線、憑什麼值得 SRE 接手扛 page…

#sre#reliability

你的節點 送出請求,等待… ① 請求在網路上丟了對方根本沒收到 ② 對方當掉了真的死了 ③ 對方只是很慢(過載、GC 暫停中)等一下它會處理——甚至正在處理 ④ 對方做完了,但「回應」在路上丟了動作已經發生,你卻以為沒有 在你這端: 四種一模一樣 = 沒有回應 timeout 到了,只代表「你決定不等了」,不代表「你知道發生了什麼」

分散式系統的麻煩:不可靠的網路、不可信的時鐘,與半死不活的節點

· tech · 約 4 分鐘 · 📚 Designing Data-Intensive Applications 讀書筆記 #8

上一篇結尾埋了個鉤子:當系統跨到多台機器,連「鎖」和「驗證」本身都變得不可靠。這章就是那個「不可靠」的總清算——也是我認為全書最該精讀的一章。核心一句話:單機世界是確定性的,要嘛全好、要嘛全壞;分散式…

#distributed-systems#book-notes#reliability

非冪等:INSERT 附加 第 1 次:INSERT 6/18 → 中途失敗 重試:又 INSERT 6/18 一次 6/18 資料重複兩份 ✗重試把一次故障放大成資料污染 冪等:覆寫分區 第 1 次:覆寫 6/18 分區 → 失敗 重試:再覆寫 6/18 分區一次 6/18 分區一致 ✓跑幾次結果都一樣,重試安全

Airflow 可靠性實戰:冪等、重試、SLA 與告警

· tech · 約 5 分鐘 · 📚 Airflow 學習筆記 #7

前面幾篇教你把 DAG 寫出來、排對區間。但 Production 的 DAG 是會在半夜出事的——來源系統延遲、網路抖一下、下游資料庫重啟。這篇講怎麼讓 DAG 扛得住失敗、能自己救、真救不了會大聲…

#airflow#data-engineering#reliability

單機 cron 很簡單,「可靠的」cron 很難 cron(單機)時間到就跑,超簡單 ✗ 機器一掛 → 排程全停(SPOF) 要它掛了也能跑 副本(leader) 副本 / 待命 副本 / 待命 共識日誌(Paxos)記錄:哪些任務跑過了 一台掛 → 重選 leader,狀態從共識還原 → 不重跑、不漏跑 把最單純的 cron 變可靠,底層就得用上分散式共識

可靠的 cron:最單純的定時任務,一分散就變難

· tech · 約 4 分鐘 · 📚 Google SRE 讀書筆記 #15

cron 大概是最單純的一種基礎設施:時間到,跑一個任務。單機上寫過 crontab 的人都覺得它理所當然。但只要加上兩個字——「可靠」(那台機器掛了,任務還是得照跑),它就從最簡單的東西,一夕變成一…

#sre#reliability

一台倒下 → 流量轉移壓垮下一台 → 骨牌式全滅 Server A先過載 → 倒 ✗ Server B接手 A 流量 → 也倒 ✗ Server C全壓過來 → 倒 ✗ 而 retry storm(重試風暴)火上加油: 請求失敗 / 變慢 客戶端重試 總負載更高 正回饋:越失敗 → 越重試 → 越失敗(自我放大)

連鎖失效與過載:別讓一台倒下拖垮全部

· tech · 約 3 分鐘 · 📚 Google SRE 讀書筆記 #10

第一篇說可靠度的目標是「出錯也能運作」。但有一種故障特別難纏,因為它會自我放大:一個小問題引發骨牌,幾分鐘內把整個系統拖垮——這就是連鎖失效(cascading failure)。它最可怕的地方,是系…

#sre#reliability

E2E Integration Unit ↑ 少、慢、脆(像使用者走完整路徑) 元件兜起來(service + DB…) ↓ 多、快、穩(測單一函式) 倒過來(一堆 E2E、少 unit)= 反模式:慢、flaky、出事還難定位到哪層

為可靠度測試:測試不是證明沒 bug,是讓你敢快

· tech · 約 3 分鐘 · 📚 Google SRE 讀書筆記 #9

這篇講一個常被當成「開發的事」、其實是可靠度基石的東西:測試。關鍵觀念先講:可靠度不是靠「不改」得來的——你一定得改(修 bug、加功能、換設定),而每次改動都是一場賭。測試的意義,就是把這場賭變成有…

#sre#reliability

是不是 toil?看這六個特徵 手動 —— 要人一步步動手做 重複 —— 做過很多次、之後還會再做 可自動化 —— 機器能做,只是還沒有人去寫 無長期價值 —— 做完,系統並沒有變得更好 隨規模線性成長 —— 服務變大,它就跟著變多 被動反應 —— 被觸發才做,不是主動規劃出來的 符合越多 → 越是 toil。注意:開會、規劃、寫文件是 overhead,不算 toil

消除 Toil:把重複的維運當成待消滅的 bug

· tech · 約 4 分鐘 · 📚 Google SRE 讀書筆記 #3

第一篇說 SRE 的內核是「維運可以被工程化」。這篇講的 toil,就是那個要被工程化掉的東西。很多人以為 toil 就是「辛苦的工作」,其實不是——它是一類有明確特徵的工作,而且如果你不主動砍它,它…

#sre#reliability

99.0% 100% SLA 99.5% 對外合約·違反賠錢 SLO 99.9% 內部目標(拚這個) 違約區 沒達標(但還沒違約) 健康區 ← SLI 99.95% 實際量到的 安全 buffer:內部先痛,別讓客戶先痛 門檻鬆緊:SLA(鬆) < SLO(嚴) ≤ SLI(健康時的實測)

SLI / SLO / SLA:一個量測、一個目標、一個合約

· tech · 約 4 分鐘 · 📚 Google SRE 讀書筆記 #2

上一篇說 error budget = 1 − SLO。但 SLO 是什麼?它跟另外兩個幾乎人人混用的縮寫——SLI、SLA——又差在哪?這三個字分不清,可靠度就無從談起。一句話先記住:SLI 是你「…

#sre#reliability

可靠度目標訂在 99.9%,不是 100% 剩下的 0.1% 不是遺憾,是可以花的「預算」 Error Budget = 1 − SLO 服務成功 ≥ 99.9%(SLO 目標) 失敗 ≤ 0.1% (刻意放大顯示) ≈ 一個月約 43 分鐘可壞 追到 100%:成本爆炸、邊際效益趨近零——使用者還分不出 99.9% 和 100% (他手上的網路、手機、Wi-Fi 本來就沒那麼可靠)

SRE 是什麼?從 Error Budget 講起

· tech · 約 4 分鐘 · 📚 Google SRE 讀書筆記 #1

「SRE」這個詞很紅,但很常被誤解成「高級一點的維運」或「會寫程式的 SysAdmin」。讀完 Google 這本書我的體會是:它的靈魂根本不在職稱,而在一個轉念 + 一個機制——「100% 可靠不是…

#sre#reliability

Producer acks? Broker 複本 / ISR Consumer commit 時機 ① 丟失 / 重複 ② 機器掛了會不會丟 ③ 重做 / 跳過

Kafka 的投遞保證:acks、ISR 與 at-least-once / exactly-once

· tech · 約 8 分鐘 · 📚 Kafka 學習筆記 #3

第二篇講完事件「怎麼擺、誰來讀」,留了一個更尖銳的問題:崩潰重啟後,一筆事件到底會被重複處理、還是漏掉?這篇把 Kafka 的可靠性講透 —— acks、複本與 ISR、commit 時機,以及 at…

#kafka#data-engineering#reliability