GH GambleHub

Chaos Engineering:系統的可持續性

Chaos Engineering: 系統的可持續性

1)為什麼混沌工程

目的是通過實驗而不是單詞和圖表來證明原型體系結構的穩定性。我們故意制造受控故障,以便:
  • 檢驗有關系統行為的假設並驗證SLO;
  • 發現隱藏的SPOF,不正確的taymout/retrai,級聯效應;
  • 訓練團隊:遊戲日,運行手冊,通訊;
  • 形成「默認可持續性」而不是「希望更好」的文化。

重要的是:Chaos Engineering ≠「打破一切」。這是一種科學方法:steady-state →假設→實驗→結論→改進。

2)實驗的基本周期

1.Steady-state(基線): 哪個SLI穩定?(例如,99歲的≤500 ms的成功。95%).

2.假設: 如果失去一個AZ,p95將增加<10%,並且≥99可用性。9%.

3.實驗:有計劃的folt,帶有有限的blast radius和停止標準。
4.觀察:度量/跟蹤器/logi,burn-rate SLO,商業SLI(例如成功存款)。
5.改進:捕獲發現,更改時間限制/路由,更新運行手冊。
6.自動化/倒退:我們在時間表中重復,我們在CI/CD和遊戲日日歷中添加。

3)安全欄桿(安全第一)

Blast radius:從狹窄開始-單個pod/實例/路線/namespace。
Guardrails:在SLO燃燒率(快速/緩慢),後退限制,QPS限制,事件預算上。

停止條件: 「如果error-rate> X%或p99> Y ms N分鐘-立即停止和滾回。」

窗口:通話工作時間,通知的攤牌,冷凍版本。
通訊:IC/Tech lead/Comms,清晰的渠道(戰爭室),消息模板。

4)失敗類別和假設思想

網絡:延遲/jitter/損失,部分端口下降,服務/PSP之間的「翻轉」通信。
編譯器/節點:進程殺死、CPU過熱、文件描述符用盡、連接池狹窄。

存儲和DB: 光盤後端的增長,lag復制,停止一個陰影/領導,分裂腦.

依賴性:外部API降級,提供商限制,5xx/429激增。

變更管理: 發行失敗,幻燈片不好,部分滾動.

外圍:CDN降級,DNS/Anycast漂移,WAF/機器人保護失敗。
區域/AZ:完全損失或「部分」事件(稍微更糟且不可預測)。

5)工具和技術

Kubernetes: Chaos Mesh, Litmus, PowerfulSeal, kube-monkey.

雲:AWS Fault Injection Simulator (FIS),雲端的Fault Domains。
網絡/代理:Toxiproxy (TCP毒藥),tc/netem, iptables, Envoy fault (delay/abort), Istio fault injection。
過程/節點:「stress-ng」,cgroups/CPU-throttle,disk fill。
流量路由:GSLB/DNS重量,用於假冒檢查的金絲雀/藍綠色切換。

6)腳本示例(Kubernetes)

6.1 路線上延遲/abort (Istio VirtualService)

yaml apiVersion: networking. istio. io/v1alpha3 kind: VirtualService metadata: { name: api-chaos }
spec:
hosts: ["api. internal"]
http:
- route: [{ destination: { host: api-svc } }]
fault:
delay: { percentage: { value: 5 }, fixedDelay: 500ms }
abort: { percentage: { value: 1 }, httpStatus: 503 }

假設: 客戶端taymauts/retrai和CB將保持p95 <300 ms和error-rate <0。5%.

6.2 Pod Kill (Chaos Mesh)

yaml apiVersion: chaos-mesh. org/v1alpha1 kind: PodChaos metadata: { name: kill-one-api }
spec:
action: pod-kill mode: one selector:
namespaces: ["prod"]
labelSelectors: { "app": "api" }
duration: "2m"

假設:平衡器和HPA可補償單個實例的損失,而不需要p99> 20%的增長。

6.3網絡混亂(延遲到數據庫)

yaml apiVersion: chaos-mesh. org/v1alpha1 kind: NetworkChaos metadata: { name: db-latency }
spec:
action: delay mode: all selector: { namespaces: ["prod"], labelSelectors: {"app":"payments"} }
delay: { latency: "120ms", jitter: "30ms", correlation: "25" }
direction: to target:
selector: { namespaces: ["prod"], labelSelectors: {"role":"db"} }
mode: all duration: "5m"

假設:池/taymout/緩存將減少影響;p95付款將保留≤ SLO。

6.4磁盤填充

yaml apiVersion: chaos-mesh. org/v1alpha1 kind: IOChaos metadata: { name: disk-fill-logs }
spec:
action: fill mode: one selector: { labelSelectors: {"app":"ingest"} }
volumePath: /var/log size: "2Gi"
duration: "10m"

假設:在路線退化之前,定位/配額/異位數的輪換將起作用。

7)K8s外實驗

7.1 Toxiproxy(本地/集成)

bash toxiproxy-cli create psp --listen 127. 0. 0. 1:9999 --upstream psp. prod:443 toxiproxy-cli toxic add psp -t latency -a latency=200 -a jitter=50 toxiproxy-cli toxic add psp -t timeout -a timeout=1000

7.2 Envoy HTTP故障(周長/mesh)

yaml fault:
delay: { fixed_delay: 0. 3s, percentage: { numerator: 10, denominator: HUNDRED } }
abort: { http_status: 503, percentage: { numerator: 1, denominator: HUNDRED } }

7.3 AWS FIS(想法示例)

Auto Scaling Group的「殺死」N% EC2實驗,人為地提高EBS-latency,並在單個AZ中禁用NAT-GW。
根據CloudWatch SLO度量標準的內置停止標準。

8)混亂期間的觀察度量

SLO/SLI: fraction of good requests, p95/p99, burn-rate.

RED模型沿著關鍵路線(Rate, Errors, Duration)。
池:等待p95連接,utilization。
DB:lag復制品,鎖定,漂移p95查詢。
網絡:retransmits,RTT,dscp/ecn行為。
業務SLI:交易成功(存款/支票),回報/錯誤百分比。
跟蹤:選擇性跟蹤(exemplars),發布註釋的相關性。

9)與SLO/Error-budget的集成

在錯誤預算內規劃實驗:混亂不應「擾亂」季度目標。
Burn-rate alerta作為自動殺手開關。
報告:「多少預算被燒毀」,「steady-state的哪些缺點」。

10)遊戲日(練習)

劇本:簡短的傳說(例如「東地區丟失」),註射步驟,SLO目標,角色,時間。
評分:RTO/RPO實際,通信質量,運行簿正確性。
復古:有所有者和時間表的改進列表,更新文檔/dashbords。

11)自動化和CI/CD

Smoke-chaos:每次發布時都會進行短暫的堆叠測試(例如,每條路線1 pod-kill+200毫秒延遲)。
每晚/每周:報告較重的場景(5-15分鐘)。
促銷門:如果p95/錯誤>金絲雀的閾值是自動回滾。
實驗目錄存儲庫(YAML+runbook+SLO-thresholds)。

12)反模式

「打破無欄桿」:沒有停止標準,沒有呼叫→真正事件的風險。
一次性促銷而不是過程。
沒有腳步狀態的混亂:目前尚不清楚什麼可以算作成功/失敗。
註射延遲時,多余的回火→ DDoS。
忽略業務SLI:付款/訂單失敗時的「technar」成功。
缺乏後期分析和改進的所有者。

13)實施清單(0-45天)

0-10天

定義steady-state SLI(定制+業務)。
選擇工具(Chaos Mesh/Litmus/Toxiproxy/FIS)。
描述欄桿:爆炸射線,停止標準,窗口,角色。

11-25天

啟動第一個實驗:pod-kill, 100-200毫秒延遲至關鍵的apstream, drop 1%數據包。
自定義burn-rate alerta,將kill-switch與停止條件相關聯。
舉辦第一個遊戲日,收集復古和小說。

26-45天

添加AZ/依賴級別腳本(外部PSP, DD-lag)。
自動化舞臺上的夜間混亂;準備「季節性」腳本。
實驗目錄和指導/SRE的定期報告。

14)成熟度量

≥80%的關鍵路線具有描述的實驗和步進狀態度量。
自動殺手開關在超過p99/error-rate閾值時觸發。
每季度-AZ/區域級別的遊戲日;≥1次/多月-目標依賴情景。
MTTR在改進周期後下降,「釋放↔事件」相關性降低。
實際故障中「意外」跌落的比例→趨於零。
Dashbords以KPI(burn-rate,恢復時間,成功的DR活動比例)的形式顯示「彈性」。

15) guardrails和stop觸發器的示例

停止: 'http_req_failed> 1%'3分鐘,'p99> 1000 ms' 3窗口,'deposit_success <99。5%`.

降低爆炸射線:自動回滾清單,恢復GSLB重量,禁用故障註射。
停止命令:單個按鈕/腳本,並設置原因。

16)文化和過程

混亂是SRE節奏的一部分,不是「極端」。
透明的報告、漏洞識別、糾正措施。
呼叫培訓,與客戶/合作夥伴進行通信模擬。
與SLA/SLO和預算掛鉤:混亂應該增加而不是破壞可靠性。

17)結論

Chaos Engineering將「九號希望」轉變為可證明的可持續性。制定步進狀態,放下欄桿,打破小而可控的欄桿,觀察SLO和商業SLI,捕捉並自動化改進。然後,真正的失敗將成為事件驅動的:可預測的RTO,受保護的錯誤預算以及團隊在不驚慌的情況下行動的意願。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。