EDAS微服务应用同城容灾最佳实践
作者:神魚,阿里云解決方案架構(gòu)師
前言
上云目前已經(jīng)是絕大數(shù)企業(yè)首選的IT基礎(chǔ)設(shè)施建設(shè)方案,但是云上仍然存在一些不確定因素(機(jī)房硬件故障、網(wǎng)絡(luò)故障、斷網(wǎng)/斷電、人為操作失誤),導(dǎo)致各大云廠商每年在不同的數(shù)據(jù)中心都會(huì)發(fā)生一些故障,所以建設(shè)具備容災(zāi)能力的業(yè)務(wù)應(yīng)用是必需的。公共云上容災(zāi)解決方案涵蓋同城雙活、跨Region容災(zāi)和異地多活等容災(zāi)場(chǎng)景,對(duì)公共云上大多數(shù)中長(zhǎng)尾客戶來(lái)說(shuō),更需要的是一種對(duì)應(yīng)用侵入性小甚至透明,但又能保證高可用的容災(zāi)方案,同城雙活無(wú)疑是首選的容災(zāi)方案,大多數(shù)業(yè)務(wù)應(yīng)用只要做到同城雙活,就可以避免掉大多數(shù)數(shù)據(jù)中心不可用故障。
本實(shí)踐就是幫助大家高效、低成本地實(shí)現(xiàn)自己的業(yè)務(wù)應(yīng)用具備同城雙活容災(zāi)能力。通過(guò)這篇文章可以基于EDAS高效的實(shí)現(xiàn)同城雙活容災(zāi),在實(shí)現(xiàn)這些容災(zāi)場(chǎng)景的同時(shí)需要其他的阿里產(chǎn)品配合,也會(huì)一并介紹對(duì)應(yīng)的解決方案,可以參考下面架構(gòu)圖:
鑒于目前需要做容災(zāi)的主流架構(gòu)都已經(jīng)拆分為微服務(wù)架構(gòu),而且微服務(wù)架構(gòu)本身也是一種具備更強(qiáng)容災(zāi)高可用能力的架構(gòu)。微服務(wù)架構(gòu)一般由網(wǎng)關(guān)(統(tǒng)一接入層)、RPC框架(Dubbo,Spring Cloud)、消息(MQ)、分布式數(shù)據(jù)庫(kù)、緩存等核心軟件構(gòu)成,通過(guò)EDAS可以高效地實(shí)現(xiàn)入口流量切流、RPC路由容災(zāi)、多可用區(qū)部署等能力,參考下圖:
方案主要產(chǎn)品介紹
EDAS
企業(yè)級(jí)分布式應(yīng)用服務(wù) EDAS(Enterprise Distributed Application Service)是應(yīng)用全生命周期管理和監(jiān)控的一站式 PaaS 平臺(tái),支持部署于Kubernetes/ECS,無(wú)侵入支持Java/Go/Python/PHP/.NetCore 等多語(yǔ)言應(yīng)用的發(fā)布運(yùn)行和服務(wù)治理,Java 支持 Spring Cloud、Apache Dubbo 近五年所有版本,多語(yǔ)言應(yīng)用一鍵開啟 Service Mesh。
云解析DNS
云解析 DNS(Domain Name System,簡(jiǎn)稱DNS) 一種安全、快速、穩(wěn)定、可靠的權(quán)威DNS解析管理服務(wù)。 云解析DNS為企業(yè)和開發(fā)者將易于管理識(shí)別的域名轉(zhuǎn)換為計(jì)算機(jī)用于互連通信的數(shù)字IP地址,從而將用戶的訪問(wèn)路由到相應(yīng)的網(wǎng)站或應(yīng)用服務(wù)器。
負(fù)載均衡 SLB
負(fù)載均衡SLB(Server Load Balancer)是一種對(duì)流量進(jìn)行按需分發(fā)的服務(wù),通過(guò)將流量分發(fā)到不同的后端服務(wù)來(lái)擴(kuò)展應(yīng)用系統(tǒng)的服務(wù)吞吐能力,并且可以消除系統(tǒng)中的單點(diǎn)故障,提升應(yīng)用系統(tǒng)的可用性。
云數(shù)據(jù)庫(kù) RDS
阿里云關(guān)系型數(shù)據(jù)庫(kù)RDS(Relational Database Service)是一種穩(wěn)定可靠、可彈性伸縮的在線數(shù)據(jù)庫(kù)服務(wù)。基于阿里云分布式文件系統(tǒng)和SSD盤高性能存儲(chǔ),RDS支持MySQL、SQL Server、PostgreSQL等引擎,并且提供了容災(zāi)、備份、恢復(fù)、監(jiān)控、遷移等方面的全套解決方案,徹底解決數(shù)據(jù)庫(kù)運(yùn)維的煩惱。
同城容災(zāi)各層解決方案
應(yīng)用的多可用區(qū)部署
利用EDAS部署應(yīng)用,可以快速實(shí)現(xiàn)將應(yīng)用節(jié)點(diǎn)部署到不同可用區(qū)。下面分別從ECS 和K8S兩種托管資源方式進(jìn)行介紹。
ECS集群部署
將不同可用區(qū)的ECS導(dǎo)入到EDAS,放到同一個(gè)集群中,在應(yīng)用列表中選擇創(chuàng)建應(yīng)用:
點(diǎn)擊下一步選擇倒入集群中的不同可用區(qū)的ECS節(jié)點(diǎn),完成應(yīng)用的創(chuàng)建, 既可以完成應(yīng)用不同可用區(qū)節(jié)點(diǎn)部署的能力。 ?
?
K8s集群部署
將創(chuàng)建好的K8s集群(node 多可用區(qū))導(dǎo)入到EDAS中, 創(chuàng)建應(yīng)用的時(shí)候,在應(yīng)用高級(jí)設(shè)置,選擇多可用區(qū)部署,完成應(yīng)用的創(chuàng)建, 即可以完成應(yīng)用不同可用區(qū)節(jié)點(diǎn)部署的能力。
流量接入層高可用
EDAS部署的應(yīng)用可以直接掛載多個(gè)SLB滿足容災(zāi)的需求,完全不依賴SLB自身的容災(zāi)機(jī)制(SLB切換邏輯只發(fā)生在只有當(dāng)主可用區(qū)整體不可用時(shí),如機(jī)房整體斷電、機(jī)房出口光纜中斷等,負(fù)載均衡才會(huì)切換到備可用區(qū)),做到用戶可控制,在一個(gè)地域內(nèi)的多個(gè)可用區(qū)或多個(gè)地域內(nèi)部署負(fù)載均衡實(shí)例和EDAS 應(yīng)用節(jié),然后使用云解析DNS對(duì)訪問(wèn)進(jìn)行調(diào)度:
點(diǎn)擊剛才第一步多可用區(qū)部署的應(yīng)用列表,進(jìn)入具體的應(yīng)用總覽菜單頁(yè)面,通過(guò)訪問(wèn)方式給入口應(yīng)用(網(wǎng)關(guān))配置多個(gè)SLB。
?
通過(guò)使用全局流量管理構(gòu)建靈活的DNS解析方案,將上述創(chuàng)建的SLB添加到全局流量地址池中,基于健康檢查結(jié)果,配置DNS容災(zāi)流量切換方案,可以做到在一個(gè)可用區(qū)不可用時(shí),自動(dòng)解析到另外一個(gè)可用的可用區(qū)SLB,做到智能化的接入層流量容災(zāi)能力處理。
RPC層面高可用
EDAS支持多種微服務(wù)RPC框架,比如Dubbo,Spring Cloud,當(dāng)用戶使用如上RPC框架的時(shí)候,當(dāng)部署的多可用區(qū)應(yīng)用發(fā)生可用區(qū)不可用的時(shí)候,可以利用EDAS微服務(wù)治理的離群摘除能力,自動(dòng)將不可用可用區(qū)的節(jié)點(diǎn)摘除下線,等可用區(qū)網(wǎng)絡(luò)等故障恢復(fù)以后,自動(dòng)將節(jié)點(diǎn)加回到應(yīng)用集群中,做到智能化的故障處理。
上述圖中應(yīng)用 A 調(diào)用的應(yīng)用 B、應(yīng)用 C、應(yīng)用 D 均被策略控制,如果被A調(diào)用的應(yīng)用對(duì)應(yīng)實(shí)例返回錯(cuò)誤率達(dá)到下限,異常實(shí)例將被摘除不再被A調(diào)用(檢測(cè)恢復(fù)后重新加入被A調(diào)用)。
首先進(jìn)入微服務(wù)治理選擇對(duì)應(yīng)的RPC框架,比如這里選擇的 Spring Cloud,選擇離群摘除菜單,按照以下步驟進(jìn)行配置:
?
?
?
其中QPS下限按照EDAS應(yīng)用的可觀測(cè)能力,按照平常的QPS配置下限值。錯(cuò)誤率在容災(zāi)場(chǎng)景下配置10%到50%區(qū)間。摘除實(shí)例<50%,保證集群的可用性,不引發(fā)上下游雪崩。恢復(fù)時(shí)間和累積探測(cè)次數(shù)都可以設(shè)置默認(rèn)值,來(lái)保證可用區(qū)故障恢復(fù)后,自動(dòng)將節(jié)點(diǎn)恢復(fù)。
除了上面提供的離群摘除功能,EDAS還為部署的Provider應(yīng)用提供了開啟同機(jī)房?jī)?yōu)先調(diào)用的能力,在發(fā)生可用區(qū)的故障時(shí),如果開啟同機(jī)房?jī)?yōu)先調(diào)用,不會(huì)出現(xiàn)跨機(jī)房調(diào)用,那么RPC層面的流量就不需要利用離群摘除等容災(zāi)能力進(jìn)行重新的節(jié)點(diǎn)流量處理或者隔離,從而保障故障發(fā)生時(shí)刻,業(yè)務(wù)完全沒感知。
微服務(wù)基礎(chǔ)設(shè)施高可用
EDAS在部署應(yīng)用的時(shí)候,背后已經(jīng)默認(rèn)提供對(duì)應(yīng)的微服務(wù)基礎(chǔ)設(shè)施:比如注冊(cè)中心,配置中心。這些對(duì)客戶不暴露的微服務(wù)組件都已經(jīng)實(shí)現(xiàn)同城容災(zāi),在發(fā)生可用區(qū)不可用的情況,可以繼續(xù)保證服務(wù)的可用性,大大降低了客戶對(duì)容災(zāi)組件的運(yùn)維復(fù)雜度。
數(shù)據(jù)庫(kù)層面高可用
在完成應(yīng)用部署結(jié)構(gòu)以及RPC層面的流量同城雙活處理后,對(duì)于數(shù)據(jù)可靠性,RDS MySQL提供高可用版本實(shí)例,采用一主一備的雙機(jī)熱備架構(gòu),適合80%以上的用戶場(chǎng)景。主節(jié)點(diǎn)故障時(shí),主備節(jié)點(diǎn)秒級(jí)完成切換,整個(gè)切換過(guò)程對(duì)應(yīng)用透明;備節(jié)點(diǎn)故障時(shí),RDS會(huì)自動(dòng)新建備節(jié)點(diǎn)以保障高可用。在創(chuàng)建實(shí)例的時(shí)候選擇高可用版,部署方案選擇多可用區(qū)部署:
備注: 如果現(xiàn)有高可用版本實(shí)例為單可用區(qū),可以參考遷移可用區(qū),將單可用區(qū)轉(zhuǎn)移成高可用區(qū)。
如果對(duì)數(shù)據(jù)可靠性有更強(qiáng)的業(yè)務(wù)場(chǎng)景,RDS提供異地災(zāi)備實(shí)例,幫助用戶提升數(shù)據(jù)可靠性,該方案依賴數(shù)據(jù)傳輸服務(wù)產(chǎn)品(DTS)實(shí)現(xiàn)主實(shí)例和異地災(zāi)備實(shí)例之間的實(shí)時(shí)同步,同時(shí)需要新購(gòu)災(zāi)備實(shí)例,采用該方案,需要一定的成本,具體操作步驟參考異地災(zāi)備實(shí)例:
主實(shí)例和災(zāi)備實(shí)例均搭建主備高可用架構(gòu),當(dāng)主實(shí)例所在區(qū)域發(fā)生突發(fā)性自然災(zāi)害等狀況,主實(shí)例(Master)和備實(shí)例(Slave)均無(wú)法連接時(shí),可將異地災(zāi)備實(shí)例切換為主實(shí)例,可以借助應(yīng)用配置管理產(chǎn)品 將數(shù)據(jù)庫(kù)連接地址推送給應(yīng)用端,通過(guò)EDAS 重啟相關(guān)應(yīng)用,即可快速恢復(fù)應(yīng)用的業(yè)務(wù)訪問(wèn)。
緩存層面高可用
本方案討論的最佳實(shí)踐以應(yīng)用場(chǎng)景最為廣泛的云數(shù)據(jù)庫(kù)Redis為主,云數(shù)據(jù)庫(kù)Redis產(chǎn)品創(chuàng)建的時(shí)候已經(jīng)默認(rèn)提供跨雙機(jī)房的同城容災(zāi)架構(gòu),在創(chuàng)建云數(shù)據(jù)庫(kù) Redis版實(shí)例時(shí),選擇支持同城容災(zāi)的可用區(qū),如下圖:
創(chuàng)建多可用區(qū)實(shí)例時(shí),備機(jī)房將創(chuàng)建與主機(jī)房相同規(guī)格的Replica實(shí)例,主備機(jī)房的實(shí)例數(shù)據(jù)通過(guò)專門的復(fù)制通道同步。當(dāng)主機(jī)房出現(xiàn)電力或網(wǎng)絡(luò)問(wèn)題時(shí),Replica實(shí)例將升級(jí)為Master實(shí)例,底層系統(tǒng)就會(huì)自動(dòng)把請(qǐng)求路由到備機(jī)房,從而實(shí)現(xiàn)故障切換。
結(jié)束語(yǔ)
經(jīng)過(guò)上述方案,我們可以利用阿里云EDAS 等相關(guān)產(chǎn)品,快速低成本的搭建具備同城雙活容災(zāi)業(yè)務(wù)應(yīng)用,保障線上業(yè)務(wù)在可用區(qū)發(fā)生不可用時(shí)快速實(shí)現(xiàn)流量數(shù)據(jù)切換,從而保證業(yè)務(wù)可持續(xù)性,該方案對(duì)公共云90%以上的用戶都能滿足其容災(zāi)需求。
除了同城雙活容災(zāi),阿里云還提供了阿里巴巴電商環(huán)境演進(jìn)出來(lái)的多活容災(zāi)架構(gòu)解決?案,基于靈活的規(guī)則調(diào)度、跨域跨云管控、數(shù)據(jù)保護(hù)等能力,保障故障場(chǎng)景下的業(yè)務(wù)快速恢復(fù),滿足對(duì)高可用穩(wěn)定性有更苛刻要求的客戶,有該需求的客戶可以參考官方文檔多活容災(zāi)介紹 。
原文鏈接:https://developer.aliyun.com/article/781642?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的EDAS微服务应用同城容灾最佳实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 云话题 | 你女朋友在买买买时,程序员小
- 下一篇: ARMS为深绘智能系统保驾护航