多活容災MSHA(Multi-Site High Availability)是在阿?巴巴電商業務環境演進出的多活容災架構解決?案。本文通過一個電商業務下單鏈路案例,介紹典型的流水單據型業務場景,如何基于多活容災解決方案(AHAS-MSHA)幫助業務實現多活容災架構。
背景信息
本文示例應用包含以下模塊:
frontend:入口Web應用。負責和用戶交互。
cartservice:購物車應用。記錄用戶的購物車數據,使用自建的Redis。
productservice:商品應用。提供商品、庫存服務,使用RDS MySQL。
checkoutservice:下單應用。將購物車中的商品生成購買訂單,使用RDS MySQL。
技術棧:
SpringBoot。
RPC框架:SpringCloud,注冊中心使用自建的Eureka。
Demo體驗地址:
多活容災控制臺:
登錄AHAS控制臺。
在控制臺左側導航欄選擇多活容災。
在頂部菜單欄,命名空間選擇官方示例命名空間。
案例背景:一次故障的發生
例如本示例的電商業務,包括導購、購物車、交易等業務場景。但在電商業務初期,很多互聯網企業都沒有考慮容災問題,只在單地域進行了部署,部署的電商應用架構1.0如下圖所示,只在杭州單元部署了相關業務。
在讀多寫少型業務場景多活實踐中,已經將導購鏈路進行了異地多讀改造,而該業務后續在一次大促期間,遭遇了一次訂單應用大面積故障,導致大促期間下單業務長時間無法使用,于是下單業務的容災建設也提上了議程。下單業務是典型的流水單據型業務場景,相比導購,是更為復雜的讀寫業務,結合業務場景和業務容災訴求,異地多活是適合此業務的容災建設方案。
異地多活容災架構改造
基于MSHA多活容災解決方案,可以快速的幫助業務進行異地多活容災建設。
下單鏈路強依賴購物車應用,完整的多活容災建設,后續還應將購物車應用也改造為異地多活。
多活改造和MSHA接入包括以下方面:
改造范圍:下單應用和訂單數據庫進行兩地域部署。
MSHA接入:將下單鏈路的應用安裝上Agent,從而無侵入的實現SpringCloud RPC跨單元路由功能和數據防臟寫功能。
管控配置:進入MSHA控制臺進行各層多活資源的配置(接入層域名、URI、SLB、數據層數據同步等)。
改造后的應用架構如下圖所示。
復現故障
改造完成容災架構后,還需驗證容災能力是否符合預期,接下來將歷史故障進行復現,通過制造真實的故障來驗證容災恢復能力。
演練準備。
故障注入。
在多活容災的監控大盤頁面異地雙活區域,查看故障演練前配置的路由規則。
本示例中UserID為0~6652之間的用戶會路由到杭州中心單元,UserID為6653~9999之間的用戶會路由到北京單元。
示例的MSHA商城下單應用鏈路如下圖所示,當UserID為7000的用戶路由到北京單元。
對北京單元的下單應用注入故障。
在AHAS控制臺的左側導航欄選擇 。
在我的空間單擊演練準備中創建的演練,然后單擊演練。
在開始執行演練對話框中單擊確認。
若故障注入成功,UserID為7000的用戶路由到的北京單元會受到影響,下單頁訪問異常,符合預期。
可選:驗證爆炸半徑。
驗證爆炸半徑是否控制在故障單元內:
預期:UserID為2000的用戶路由到杭州單元,不受北京單元故障的影響。
結果:下單正常,符合預期。
切流恢復
驗證故障場景下的容災恢復能力。在北京單元發生故障的情況下,可以使用MSHA切流功能將受影響的用戶流量切換到另外的單元,進行快速業務恢復。
這里區別于傳統的解決思路,不是去排查、處理和修復故障,而是立即使用切流進行恢復,將業務恢復和故障恢復解耦。
容災切換預期:將UserID為7000的用戶切流到杭州單元,切流后該用戶將路由到杭州單元,不受北京單元故障的影響。
登錄AHAS控制臺。
- 在控制臺左側導航欄中單擊多活容災。
在左側導航欄選擇 ,在頂部菜單欄選擇官方示例命名空間。
在多活容災的左側導航欄選擇 。
在異地雙活切流頁面,單擊切流。
在切流詳情頁面的規則調整區域,滑動杭州中心單元的滑塊,使得UserID 7000在杭州中心單元的規則內。
單擊生成預覽,然后在生成區域單擊執行預檢查,在切流檢查區域,單擊確認。
在切流確認對話框中,單擊確定。
在切流任務頁面的當前狀態顯示切流完成,表示切流已成功。
重新在MSHA商城下訂單。
MSHA商城下單正常,符合預期。
通過查看下單請求的實際調用鏈路,UserID為7000的用戶已路由到杭州單元,不受北京單元故障的影響,符合預期。
功能演示
故障注入和切流恢復的功能演示如下。
后續步驟
您還需要進行以下操作: