混合云应用双活容灾实践
作者:遠(yuǎn)跖
前言
越來(lái)越多的企業(yè)在數(shù)字化轉(zhuǎn)型和上云進(jìn)程中選擇混合云的形態(tài)(云+自建 IDC 或云+其他廠商云)來(lái)進(jìn)行容災(zāi)建設(shè),一方面不會(huì)過(guò)度依賴單一云廠商,另一方面還能充分利用已有的線下 IDC 資源。
MSHA 云原生多活容災(zāi)解決方案 [1] ,也發(fā)布了混合云多活容災(zāi)產(chǎn)品能力。本文會(huì)通過(guò)一個(gè)業(yè)務(wù) Demo 案例,介紹混合云容災(zāi)建設(shè)的難點(diǎn),以及如何基于 MSHA 來(lái)快速搭建應(yīng)用雙活架構(gòu)并具備分鐘級(jí)業(yè)務(wù)恢復(fù)能力。
業(yè)務(wù)混合云容災(zāi)實(shí)踐
業(yè)務(wù)背景信息
A 企業(yè)是一個(gè)零售行業(yè)電商交易平臺(tái),業(yè)務(wù)系統(tǒng)部署在自建 IDC 機(jī)房,存在以下痛點(diǎn):
-
業(yè)務(wù)僅在 IDC 單機(jī)房部署,缺少容災(zāi)能力。
-
IDC 容量不足,物理機(jī)器升級(jí)替換周期長(zhǎng),不足以支撐業(yè)務(wù)的快速發(fā)展。
業(yè)務(wù)在快速發(fā)展過(guò)程中,多次遇到的容量不足以及故障問(wèn)題引起了公司高層的重視,決心進(jìn)行容災(zāi)能力建設(shè)。由于自建 IDC 是公司已有資產(chǎn)且穩(wěn)定使用多年,同時(shí)不希望過(guò)度依賴于云,因此期望建立 IDC+云 的混合云形態(tài)容災(zāi)架構(gòu)。
當(dāng)前應(yīng)用部署架構(gòu)
電商交易平臺(tái)包含的應(yīng)用:
-
frontend:Web 應(yīng)用,負(fù)責(zé)和用戶交互。
-
cartservice:購(gòu)物車應(yīng)用,提供購(gòu)物車添加、存儲(chǔ)和查詢服務(wù)。
-
productservice:商品應(yīng)用,提供商品、庫(kù)存服務(wù)。
技術(shù)棧:
-
SpringBoot。
-
RPC 框架:SpringCloud、Dubbo,注冊(cè)中心使用自建的 Nacos、Zookeeper。
-
數(shù)據(jù)庫(kù) Redis 和 MySQL。
混合云容災(zāi)目標(biāo)
業(yè)務(wù)容災(zāi)需求歸納如下:
-
云上云下互容災(zāi),切換 RTO 為分鐘級(jí)。 期望云上云下相互容災(zāi),繼續(xù)發(fā)揮 IDC 的價(jià)值,且不 100% 依賴于云。面對(duì) IDC 或云故障場(chǎng)景,關(guān)鍵時(shí)刻要敢切換、能切換,且切換 RTO 要求小于 10 分鐘。
-
無(wú)數(shù)據(jù)一致性風(fēng)險(xiǎn)。 云上云下的兩個(gè)數(shù)據(jù)中心數(shù)據(jù)強(qiáng)一致,日常態(tài)和容災(zāi)切換過(guò)程中都要避免存在臟寫等數(shù)據(jù)一致性風(fēng)險(xiǎn)。
-
一站式管控。 業(yè)務(wù)容災(zāi)涉及的技術(shù)??蚣芎驮飘a(chǎn)品,需要統(tǒng)一管控、統(tǒng)一運(yùn)維、統(tǒng)一切換,操作收斂在一站式管控平臺(tái),方便故障場(chǎng)景快速白屏化操作,自動(dòng)化執(zhí)行。
-
實(shí)施周期短,改造成本低。 業(yè)務(wù)存在多個(gè)產(chǎn)品線,依賴關(guān)系復(fù)雜、調(diào)用鏈路長(zhǎng),且處于高速發(fā)展頻繁迭代時(shí)期,期望容災(zāi)建設(shè)不會(huì)給業(yè)務(wù)研發(fā)團(tuán)隊(duì)帶來(lái)改造負(fù)擔(dān)。
建設(shè)難點(diǎn)
-
流量管理難度高
-
若采用 DNS 將流量按權(quán)重解析到云上和云下,存在修改 DNS 解析生效時(shí)間長(zhǎng)的問(wèn)題(通常為十分鐘或小時(shí)級(jí),參見?DNS 解析生效時(shí)間 FAQ [2] ),不能滿足容災(zāi)切換小于 10 分鐘的要求。
-
業(yè)務(wù)應(yīng)用所依賴的 Redis 和 MySQL,IDC內(nèi)采用開源自建而云上直接使用云產(chǎn)品,要實(shí)現(xiàn)開源自建+云產(chǎn)品的容災(zāi)切換能力難。
-
容災(zāi)切換數(shù)據(jù)質(zhì)量保障難
-
容災(zāi)切換過(guò)程中,可能因數(shù)據(jù)同步延遲導(dǎo)致讀到舊數(shù)據(jù),以及切換規(guī)則推送到分布式應(yīng)用節(jié)點(diǎn)時(shí)間不一致等原因可能造成云上云下數(shù)據(jù)庫(kù)同時(shí)讀寫而出現(xiàn)臟寫的問(wèn)題,整個(gè)切換過(guò)程數(shù)據(jù)質(zhì)量保障是個(gè)關(guān)鍵點(diǎn),同時(shí)也是難點(diǎn)。
-
無(wú)業(yè)務(wù)代碼侵入難
-
要實(shí)現(xiàn) Redis、MySQL 容災(zāi)切換能力,通常需要業(yè)務(wù)應(yīng)用配合改造,對(duì)業(yè)務(wù)代碼侵入大。
解決方案
結(jié)合業(yè)務(wù)容災(zāi)需求和混合云 IDC+云形態(tài)的特點(diǎn),采用應(yīng)用雙活架構(gòu)能夠較好的滿足業(yè)務(wù)容災(zāi)訴求。
應(yīng)用雙活架構(gòu)
架構(gòu)簡(jiǎn)圖:
架構(gòu)規(guī)范:
-
選擇離 IDC 物理距離<=200km 的云上 Region,網(wǎng)絡(luò)延遲較低(約 5~7ms)。
-
應(yīng)用、中間件云上云下冗余對(duì)稱部署,同時(shí)對(duì)外提供服務(wù)(應(yīng)用雙活)。
-
數(shù)據(jù)庫(kù)異地主備,異步復(fù)制備份。應(yīng)用讀寫同一數(shù)據(jù)中心的數(shù)據(jù)庫(kù),避免考慮一致性問(wèn)題。
詳細(xì)方案
- 應(yīng)用流量雙活
業(yè)務(wù)應(yīng)用云上云下對(duì)稱部署,并基于 MSHA 接入層集群,來(lái)承接入口 HTTP/HTTPS 流量,按照比例或精準(zhǔn)路由規(guī)則云上云下分流。多活控制臺(tái)提供 MSFE 集群界面白屏化的部署、擴(kuò)縮容、監(jiān)控等常規(guī)運(yùn)維能力,以及應(yīng)對(duì)故障場(chǎng)景的分鐘級(jí)切流能力。
- 服務(wù)互通和同單元優(yōu)先調(diào)用
業(yè)務(wù)應(yīng)用需要按業(yè)務(wù)產(chǎn)品線分批上云,過(guò)程中存在下游應(yīng)用僅 IDC 部署的情況。利用 MSHA 注冊(cè)中心同步功能,可實(shí)現(xiàn)云上云下服務(wù)互通,助力業(yè)務(wù)上云。同時(shí)基于 MSHA-Agent 的切面能力,在 Dubbo/SpringCloud 服務(wù)調(diào)用時(shí),Consumer 優(yōu)先調(diào)用同單元內(nèi)的Provider,從而避免跨機(jī)房調(diào)用帶來(lái)的網(wǎng)絡(luò)延遲,減小業(yè)務(wù)請(qǐng)求 RT。
- 數(shù)據(jù)同步&數(shù)據(jù)庫(kù)連接切換
數(shù)據(jù)庫(kù)異地主備部署,云上云下應(yīng)用日常態(tài)均讀寫云上 Redis 和 RDS 數(shù)據(jù)庫(kù),無(wú)需考慮數(shù)據(jù)一致性問(wèn)題。MSHA 控制臺(tái)通過(guò)集成 DTS 同步組件,支持云上云下的數(shù)據(jù)同步(異步復(fù)制)。同時(shí)基于 MSHA-Agent 切面能力,具備應(yīng)用數(shù)據(jù)庫(kù)訪問(wèn)連接的切換能力,云上 Redis 或 RDS 故障則可將讀寫訪問(wèn)連接切換到 IDC 內(nèi)的 Redis 或 MySQL,反之亦然。切換過(guò)程中還具備禁寫保護(hù)能力,避免產(chǎn)生讀到舊數(shù)據(jù)以及臟寫等數(shù)據(jù)質(zhì)量問(wèn)題。
- 一站式管控&無(wú)業(yè)務(wù)代碼侵入
MSHA 控制臺(tái),支持 HTTP、數(shù)據(jù)庫(kù)訪問(wèn)流量的統(tǒng)一管控、統(tǒng)一切換,操作收斂在一站式管控平臺(tái),方便故障場(chǎng)景快速白屏化操作,自動(dòng)化執(zhí)行。同時(shí)針對(duì)業(yè)務(wù)應(yīng)用 MSHA 提供了 Agent 接入方式,無(wú)需業(yè)務(wù)代碼改造即可獲得相關(guān)容災(zāi)切換能力。
改造內(nèi)容
-
應(yīng)用上云
-
選擇跟自建 IDC 較近的阿里云地域,云上完全冗余的部署一套應(yīng)用、中間件和數(shù)據(jù)庫(kù),以便搭建云上云下雙活容災(zāi)架構(gòu)。在這個(gè) Demo 案例中,選擇杭州 Region 作為容災(zāi)單元。
-
網(wǎng)絡(luò)打通:
-
接入 CEN 云企業(yè)網(wǎng),實(shí)現(xiàn)云上云下網(wǎng)絡(luò)互通(詳見多接入方式構(gòu)建企業(yè)級(jí)混合云文檔 [3 ] )。
-
接入集群部署和配置:
-
云上云下部署 MSHA 接入層集群(MSFE),上掛 SLB 用于公網(wǎng)接入以及 MSFE 集群的負(fù)載均衡(參見使用文檔 [4 ] )。
-
錄入域名、URI 和后端應(yīng)用地址,從而具備云上云下分流和分鐘級(jí)切流能力(參見使用文檔 [5 ] )。
-
應(yīng)用:
-
云上分批部署業(yè)務(wù)應(yīng)用。
-
JAVA 應(yīng)用安裝 MSHA-Agent,并使用 Nacos 作為管控命令下發(fā)通道,從而具備微服務(wù)同單元優(yōu)先調(diào)用以及數(shù)據(jù)庫(kù)訪問(wèn)連接切換能力(參見使用文檔 [6 ] )。
-
中間件和數(shù)據(jù)庫(kù):
-
云上部署 MSE 托管 ZK/Nacos 注冊(cè)中心、云數(shù)據(jù)庫(kù) Redis 和 RDS,建議使用跨可用區(qū)部署高可用版本,具備同城雙活容災(zāi)能力。
-
若存在某應(yīng)用僅 IDC 部署的情況,需要配置注冊(cè)中心的服務(wù)同步(參見使用文檔 [7 ] )。
-
配置云數(shù)據(jù)庫(kù) Redis/RDS 和自建 Redis/MySQL 的數(shù)據(jù)同步(參見使用文檔 [8 ] )。
改造后的應(yīng)用部署架構(gòu)
日常場(chǎng)景:IDC+云上同時(shí)承擔(dān)業(yè)務(wù)流量–應(yīng)用雙活
訪問(wèn)電商 Demo 首頁(yè),查看實(shí)際流量調(diào)用鏈:概率性的訪問(wèn)到北京或杭州單元,均讀寫北京單元內(nèi)的數(shù)據(jù)庫(kù)。
容災(zāi)能力
-
RPO:<=1min(依賴于 DTS 同步性能)
-
RTO:<=1min(依賴于 DTS 同步延遲,MSHA 組件實(shí)現(xiàn)秒級(jí)切換。整體 RTO<=1min)
容災(zāi)能力驗(yàn)證
基于 MSHA 完成應(yīng)用雙活架構(gòu)建設(shè)后,還需驗(yàn)證業(yè)務(wù)容災(zāi)能力是否符合預(yù)期。接下來(lái)將制造真實(shí)的故障,來(lái)驗(yàn)證容災(zāi)恢復(fù)能力。
7.1 演練準(zhǔn)備
說(shuō)明: 演練前,基于 MSHA 流量監(jiān)控或其他監(jiān)控產(chǎn)品,確定業(yè)務(wù)穩(wěn)態(tài)的監(jiān)控指標(biāo)(如日常情況 RT<=200ms,錯(cuò)誤率<1%),以便在故障發(fā)生時(shí)判斷故障影響面以及在故障恢復(fù)后判斷業(yè)務(wù)的實(shí)際恢復(fù)情況。
7.2 應(yīng)用故障注入
這里我們使用阿里云故障演練產(chǎn)品,對(duì)阿里云-北京的商品應(yīng)用注入故障。
進(jìn)入?Chaos 故障演練產(chǎn)品控制臺(tái) [9 ] ,頂部選擇切換到相應(yīng)地域,左側(cè)導(dǎo)航欄選擇我的空間。
在我的空間選擇配置好的演練(50% 概率網(wǎng)絡(luò)丟包),然后單擊執(zhí)行演練。
故障注入成功后,打開電商首頁(yè)或進(jìn)行下單,有概率出現(xiàn)訪問(wèn)異常,符合預(yù)期。
7.3 切流恢復(fù)
在北京單元的商品應(yīng)用故障的情況下,可以通過(guò) MSHA 切流功能,將云上入口流量切 0,快速恢復(fù)業(yè)務(wù)。
預(yù)期
100% 流量切換到杭州單元后,業(yè)務(wù)完全恢復(fù),不受北京單元的故障影響。
切流操作
進(jìn)入 MSHA 控制臺(tái),在左側(cè)導(dǎo)航欄選擇切流>異地應(yīng)用雙活切流。
在切流頁(yè)面,對(duì)北京單元點(diǎn)擊一鍵切零。
單擊執(zhí)行預(yù)檢查,在切流檢查區(qū)域,單擊確認(rèn),開始切流。
在切流任務(wù)頁(yè)面的當(dāng)前狀態(tài)顯示切流完成,表示切流已成功。
查看實(shí)際流量調(diào)用鏈:流量始終訪問(wèn)到杭州單元,讀寫北京單元內(nèi)的數(shù)據(jù)庫(kù)。
7.4 數(shù)據(jù)庫(kù)故障注入
從上面調(diào)用鏈可以看出,杭州單元內(nèi)的應(yīng)用仍然訪問(wèn)的是北京單元的 Redis、MySQL 數(shù)據(jù)庫(kù)。我們繼續(xù)使用?Chaos 故障演練 [10 ] 產(chǎn)品對(duì)北京單元的 Redis、MySQL 數(shù)據(jù)庫(kù)注入故障,制造數(shù)據(jù)庫(kù)故障場(chǎng)景。
故障注入成功后,打開電商首頁(yè)或進(jìn)行下單始終訪問(wèn)異常,符合預(yù)期。
7.5 切換數(shù)據(jù)庫(kù)進(jìn)行恢復(fù)
在北京單元的數(shù)據(jù)庫(kù)故障的情況下,可以通過(guò) MSHA 數(shù)據(jù)庫(kù)切換功能,將應(yīng)用訪問(wèn)的 Redis/MySQL 的連接切換至杭州單元的數(shù)據(jù)庫(kù)(切換過(guò)程中會(huì)等待數(shù)據(jù)同步追平,期間會(huì)短暫禁寫)。
預(yù)期
應(yīng)用連接的數(shù)據(jù)庫(kù)切換到杭州后,業(yè)務(wù)完全恢復(fù),不受北京單元的故障影響。
切流操作
2.在數(shù)據(jù)保護(hù)規(guī)則列表中,找到商品、訂單、購(gòu)物車數(shù)據(jù)庫(kù),逐個(gè)點(diǎn)擊主備切換。
總結(jié)
在本篇文章中,我們介紹了 MSHA 多活容災(zāi)助力企業(yè)進(jìn)行混合云應(yīng)用雙活容災(zāi)建設(shè)的實(shí)踐案例,給出了容災(zāi)架構(gòu)建設(shè)實(shí)踐方法,同時(shí)利用 Chaos 故障演練產(chǎn)品注入真實(shí)故障,來(lái)驗(yàn)證故障場(chǎng)景業(yè)務(wù)容災(zāi)能力是否符合預(yù)期。
最后,歡迎大家掃描下方二維碼或搜索群號(hào)(31623894)進(jìn)釘釘群進(jìn)行咨詢和交流,群名稱:多活容災(zāi)(MSHA)交流釘釘群。
相關(guān)閱讀
[1] MSHA 云原生多活容災(zāi)解決方案
https://www.aliyun.com/product/aliware/ahas/msha
[2] DNS 解析生效時(shí)間 FAQ
https://help.aliyun.com/document_detail/39837.html
[3] 多接入方式構(gòu)建企業(yè)級(jí)混合云文檔
https://help.aliyun.com/document_detail/181844.html
[4] 使用文檔
https://help.aliyun.com/document_detail/184980.html
[5] 使用文檔
https://help.aliyun.com/document_detail/328617.html
[6] 使用文檔
https://help.aliyun.com/document_detail/295852.html
[7] 使用文檔
https://help.aliyun.com/document_detail/369539.html
[8] 使用文檔
https://help.aliyun.com/document_detail/184971.html
[9] Chaos 故障演練產(chǎn)品控制臺(tái)
https://common-buy.aliyun.com/?commodityCode=ahas_001#/buy
[10] Chaos 故障演練
https://common-buy.aliyun.com/?commodityCode=ahas_001#/buy
延伸閱讀
? MSHA 多活容災(zāi)解決方案首頁(yè):
??https://www.aliyun.com/product/aliware/ahas/msha??
? MSHA 支持的 4 種容災(zāi)架構(gòu)介紹:
??https://help.aliyun.com/document_detail/338374.html??
? Chaos 故障演練產(chǎn)品首頁(yè):
??https://www.aliyun.com/product/aliware/ahas/chaos??
點(diǎn)擊此處,前往多活容災(zāi) MSHA 官網(wǎng)主頁(yè)了解更多詳情!
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的混合云应用双活容灾实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 全面容器化之后,来电科技如何实现微服务治
- 下一篇: 如何定位并修复 HttpCore5 中的