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