Monzo是英國的一家僅提供移動端服務的數字銀行。近日,該銀行的活期賬戶支付和預付信用卡系統出現了服務中斷。Monzo工程部門負責人Oliver Beattie交由Monzo社區論壇來提供服務中斷的事后分析。
在最初架構設計的時候,Monzo就將在全球范圍內提供服務作為核心前提之一。久而久之,這使得他們開發了數以百計的微服務。
這些微服務被打包進Docker容器,使用Kubernetes部署到AWS上。服務的編排是由etcd完成的,kubernetes就是用它來識別服務的部署位置以及每個服務的狀態。服務間的路由和負載均衡是使用linkerd實現的。
服務中斷既影響了預付信用卡,又影響了活期賬戶持有者。造成此次服務中斷的原因有多個。
首先,Kubernetes的一個Bug會導致請求在集群重新配置后超時。在服務實際中斷導致這些超時出現之前一周,他們進行了集群重新配置,使linkerd接收不到Kubernetes的更新。
再者,當服務中斷發生時,他們的一個直接反應是重啟所有的linkerd實例,這暴露出了一個問題,Monzo使用的Kubernetes和linkerd版本不兼容,情況變得更加糟糕,從服務中斷變成了整個平臺的故障。Monzo社區論壇的相關主題里也列出了事件的完整時間表。
從這樣一次服務中斷里可以汲取一些有價值的教訓。除了修復Bug、檢查不同庫的版本兼容性及其他問題外,Monzo認識到了改進內部或外部通信中斷的處理措施的必要性。
此外,另一個教訓是認識到了報警、控制面板、對應用程序的每一層進行健康檢查從而及早發現人為錯誤及其他錯誤的重要性。總而言之,重要的是,以后要采取一切措施防止服務中斷,既能解決問題,又能就正在發生的事清晰地溝通,這樣,將來就可以構建起更好的保障措施。
查看英文原文:Monzo Outage Post Mortem