在高度監管的金融支付環境中,系統的穩定性直接等同於金錢與信任。許多企業在採用雲端原生架構後,傾向於使用混沌工程(Chaos Engineering,一種透過主動在系統中注入故障來驗證系統韌性的方法)來確保可靠性。然而,針對一般無狀態網頁應用設計的混沌工程劇本,在處理支付系統時往往會失效,甚至造成不可挽回的財務損失。
根據 InfoQ 分享的企業實踐經驗,金融支付系統與一般服務最大的不同在於交易的狀態性。在一般服務中,注入延遲後回滾即可;但在支付系統中,一筆交易可能處於「已授權但未扣款」或「已扣款但未結算」的模糊狀態。若在實驗過程中強行停止,這些處於中間狀態的交易將需要大量人工干預,甚至觸發合規性違規。因此,在金融環境中實施混沌工程,不能僅僅是「隨機殺掉一個容器」,而必須建立一套嚴謹的合規流程與分級實施路徑。
針對 Amazon ECS(Elastic Container Service,AWS 提供的容器編排服務)的部署,實務中發現了許多通用工具容易忽略的失效模式。首先是任務替換(Task Replacement)期間的競態條件。當 ECS 在部署或健康檢查失敗時替換任務,新任務在完全準備好(如從 Parameter Store 加載配置或建立資料庫連接池)之前,可能就已經開始接收流量。如果健康檢查端點僅返回 200 OK 而未驗證業務就緒狀態,流量將被導向尚未準備好的任務,導致短暫的交易失敗。
其次是服務發現(Service Discovery)的 DNS 快取問題。ECS 透過 Route 53 進行服務發現,但即便設定了 60 秒的 TTL(Time to Live,域名解析紀錄的有效期),實際的失效切換時間可能會更長。這是因為 JVM 的內部 DNS 快取與 VPC 解析器快取共同作用,導致客戶端在任務停止後仍持續將請求發送到失效的 IP。在每秒 400 筆交易(TPS)的系統中,僅 30 秒的快取延遲就可能導致數萬筆交易失敗。
此外,使用 Spot 實例(AWS 提供的低成本可中斷實例)來處理結算批次作業具有極高風險。由於結算作業通常涉及大量數據的原子性操作,若在執行中途遭遇 Spot 中斷通知,可能會導致部分交易已提交至清算所但本地狀態未更新,造成數據不一致。這類具有明確財務狀態的關鍵工作負載,應直接部署在 On-Demand(按需)實例上,而非追求成本優化。
為了在符合 PCI DSS 和 SOC 2 等金融監管標準的前提下運行實驗,建議將混沌實驗視為正式的變更請求(Change Request)。這要求團隊在實驗前必須完成三件事:定義穩態(Steady State),即明確定義健康的指標(如授權成功率 > 99.5%);界定爆炸半徑(Blast Radius),根據交易風險而非實例數量來選擇目標;以及制定書面回滾條件,一旦觸發特定閾值立即自動恢復。
建議的實施路徑應分為四個階段。第一階段是在完全鏡像生產環境的 Staging 環境中,使用合成流量進行故障注入。第二階段轉向生產環境中「非交易路徑」的服務(如報表、審計日誌),以建立組織的操作慣性。第三階段在低流量時段對「次要交易路徑」服務(如備援路由)進行測試。最後第四階段才在具備自動回滾能力的條件下,對核心授權與扣款服務進行實驗。
透過這些實踐,團隊通常會發現三個共性問題。第一是逾時配置(Timeout)錯誤,內部調用逾時往往短於下游服務的 P99 延遲,導致正常負載下也出現不必要的失敗。第二是重試機制(Retry Logic)的放大效應,在下游服務緩慢時,過激的重試策略會導致資料庫連接數激增,形成重試風暴。第三是健康檢查(Health Checks)的欺騙性,健康檢查僅能證明容器在運行,無法證明其能正確處理交易。
最令人意外的發現通常來自可用區(Availability Zone, AZ)失效模擬。在某些配置下,ECS 可能會陷入「啟動-停止」循環,不斷嘗試在已損壞的 AZ 中啟動任務而無法滿足期望數量。這揭示了缺乏 AZ 感知放置策略(Placement Strategy)的風險。解決方案是啟用可用區再平衡(Availability Zone Rebalancing)功能,確保服務能自動將容量重新分佈至健康的可用區。
對於剛起步的團隊,建議從三個簡單實驗開始:在部署期間量測授權成功率是否下降、注入延遲以觀察資料庫連接池耗盡時的響應(是靜默逾時還是明確報錯)、以及測試服務發現的實際切換時間。
然而,混沌工程並非所有團隊的最適投資。如果系統缺乏可觀測性(Observability),無法即時獲知交易成功率或延遲分位數,實驗將毫無意義。同樣,若團隊缺乏成熟的事故響應流程或系統變更過快,混沌工程產出的結果將在被修復前就已過時。在實施之前,應先確保負載測試、集成測試與部署自動化等基礎設施已完備。
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。