EDAS微服務應用同城容災最佳實踐

簡介: 大多數業務應用只要做到同城雙活,就可以避免掉大多數數據中心不可用故障。本實踐就是幫助大家高效、低成本地實現自己的業務應用具備同城雙活容災能力。

前言

上雲目前已經是絕大數企業首選的IT基礎設施建設方案,但是雲上仍然存在一些不確定因素(機房硬件故障、網絡故障、斷網/斷電、人爲操作失誤),導致各大雲廠商每年在不同的數據中心都會發生一些故障,所以建設具備容災能力的業務應用是必需的。公共雲上容災解決方案涵蓋同城雙活、跨Region容災和異地多活等容災場景,對公共雲上大多數中長尾客戶來說,更需要的是一種對應用侵入性小甚至透明,但又能保證高可用的容災方案,同城雙活無疑是首選的容災方案,大多數業務應用只要做到同城雙活,就可以避免掉大多數數據中心不可用故障。

本實踐就是幫助大家高效、低成本地實現自己的業務應用具備同城雙活容災能力。通過這篇文章可以基於EDAS高效的實現同城雙活容災,在實現這些容災場景的同時需要其他的阿里產品配合,也會一併介紹對應的解決方案,可以參考下面架構圖:

 

鑑於目前需要做容災的主流架構都已經拆分爲微服務架構,而且微服務架構本身也是一種具備更強容災高可用能力的架構。微服務架構一般由網關(統一接入層)、RPC框架(Dubbo,Spring Cloud)、消息(MQ)、分佈式數據庫、緩存等核心軟件構成,通過EDAS可以高效地實現入口流量切流、RPC路由容災、多可用區部署等能力,參考下圖:

 

方案主要產品介紹

 

EDAS

企業級分佈式應用服務 EDAS(Enterprise Distributed Application Service)是應用全生命週期管理和監控的一站式 PaaS 平臺,支持部署於Kubernetes/ECS,無侵入支持Java/Go/Python/PHP/.NetCore 等多語言應用的發佈運行和服務治理,Java 支持 Spring Cloud、Apache Dubbo 近五年所有版本,多語言應用一鍵開啓 Service Mesh。

雲解析DNS

雲解析 DNS(Domain Name System,簡稱DNS) 一種安全、快速、穩定、可靠的權威DNS解析管理服務。 雲解析DNS爲企業和開發者將易於管理識別的域名轉換爲計算機用於互連通信的數字IP地址,從而將用戶的訪問路由到相應的網站或應用服務器。

負載均衡 SLB

負載均衡SLB(Server Load Balancer)是一種對流量進行按需分發的服務,通過將流量分發到不同的後端服務來擴展應用系統的服務吞吐能力,並且可以消除系統中的單點故障,提升應用系統的可用性。

雲數據庫 RDS

阿里雲關係型數據庫RDS(Relational Database Service)是一種穩定可靠、可彈性伸縮的在線數據庫服務。基於阿里雲分佈式文件系統和SSD盤高性能存儲,RDS支持MySQL、SQL Server、PostgreSQL等引擎,並且提供了容災、備份、恢復、監控、遷移等方面的全套解決方案,徹底解決數據庫運維的煩惱。

 

同城容災各層解決方案

 

應用的多可用區部署

利用EDAS部署應用,可以快速實現將應用節點部署到不同可用區。下面分別從ECS 和K8S兩種託管資源方式進行介紹。

ECS集羣部署

將不同可用區的ECS導入到EDAS,放到同一個集羣中,在應用列表中選擇創建應用:

 

點擊下一步選擇倒入集羣中的不同可用區的ECS節點,完成應用的創建, 既可以完成應用不同可用區節點部署的能力。

 

K8s集羣部署

將創建好的K8s集羣(node 多可用區)導入到EDAS中, 創建應用的時候,在應用高級設置,選擇多可用區部署,完成應用的創建, 即可以完成應用不同可用區節點部署的能力。

 

流量接入層高可用

EDAS部署的應用可以直接掛載多個SLB滿足容災的需求,完全不依賴SLB自身的容災機制(SLB切換邏輯只發生在只有當主可用區整體不可用時,如機房整體斷電、機房出口光纜中斷等,負載均衡纔會切換到備可用區),做到用戶可控制,在一個地域內的多個可用區或多個地域內部署負載均衡實例和EDAS 應用節,然後使用雲解析DNS對訪問進行調度:

 

點擊剛纔第一步多可用區部署的應用列表,進入具體的應用總覽菜單頁面,通過訪問方式給入口應用(網關)配置多個SLB。

 

通過使用全局流量管理構建靈活的DNS解析方案,將上述創建的SLB添加到全局流量地址池中,基於健康檢查結果,配置DNS容災流量切換方案,可以做到在一個可用區不可用時,自動解析到另外一個可用的可用區SLB,做到智能化的接入層流量容災能力處理。

RPC層面高可用

EDAS支持多種微服務RPC框架,比如Dubbo,Spring Cloud,當用戶使用如上RPC框架的時候,當部署的多可用區應用發生可用區不可用的時候,可以利用EDAS微服務治理的離羣摘除能力,自動將不可用可用區的節點摘除下線,等可用區網絡等故障恢復以後,自動將節點加回到應用集羣中,做到智能化的故障處理。

 

上述圖中應用 A 調用的應用 B、應用 C、應用 D 均被策略控制,如果被A調用的應用對應實例返回錯誤率達到下限,異常實例將被摘除不再被A調用(檢測恢復後重新加入被A調用)。

 

首先進入微服務治理選擇對應的RPC框架,比如這裏選擇的 Spring Cloud,選擇離羣摘除菜單,按照以下步驟進行配置:

 

 

其中QPS下限按照EDAS應用的可觀測能力,按照平常的QPS配置下限值。錯誤率在容災場景下配置10%到50%區間。摘除實例<50%,保證集羣的可用性,不引發上下游雪崩。恢復時間和累積探測次數都可以設置默認值,來保證可用區故障恢復後,自動將節點恢復。

 

除了上面提供的離羣摘除功能,EDAS還爲部署的Provider應用提供了開啓同機房優先調用的能力,在發生可用區的故障時,如果開啓同機房優先調用,不會出現跨機房調用,那麼RPC層面的流量就不需要利用離羣摘除等容災能力進行重新的節點流量處理或者隔離,從而保障故障發生時刻,業務完全沒感知。

微服務基礎設施高可用

EDAS在部署應用的時候,背後已經默認提供對應的微服務基礎設施:比如註冊中心,配置中心。這些對客戶不暴露的微服務組件都已經實現同城容災,在發生可用區不可用的情況,可以繼續保證服務的可用性,大大降低了客戶對容災組件的運維複雜度。

數據庫層面高可用

在完成應用部署結構以及RPC層面的流量同城雙活處理後,對於數據可靠性,RDS MySQL提供高可用版本實例,採用一主一備的雙機熱備架構,適合80%以上的用戶場景。主節點故障時,主備節點秒級完成切換,整個切換過程對應用透明;備節點故障時,RDS會自動新建備節點以保障高可用。在創建實例的時候選擇高可用版,部署方案選擇多可用區部署:

 

 

創建多可用區實例時,備機房將創建與主機房相同規格的Replica實例,主備機房的實例數據通過專門的複製通道同步。當主機房出現電力或網絡問題時,Replica實例將升級爲Master實例,底層系統就會自動把請求路由到備機房,從而實現故障切換。

結束語

經過上述方案,我們可以利用阿里雲EDAS 等相關產品,快速低成本的搭建具備同城雙活容災業務應用,保障線上業務在可用區發生不可用時快速實現流量數據切換,從而保證業務可持續性,該方案對公共雲90%以上的用戶都能滿足其容災需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章