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會自動新建備節點以保障高可用。在創建實例的時候選擇高可用版,部署方案選擇多可用區部署:
備注: 如果現有高可用版本實例為單可用區,可以參考遷移可用區,將單可用區轉移成高可用區。
如果對數據可靠性有更強的業務場景,RDS提供異地災備實例,幫助用戶提升數據可靠性,該方案依賴數據傳輸服務產品(DTS)實現主實例和異地災備實例之間的實時同步,同時需要新購災備實例,采用該方案,需要一定的成本,具體操作步驟參考異地災備實例:
主實例和災備實例均搭建主備高可用架構,當主實例所在區域發生突發性自然災害等狀況,主實例(Master)和備實例(Slave)均無法連接時,可將異地災備實例切換為主實例,可以借助應用配置管理產品 將數據庫連接地址推送給應用端,通過EDAS 重啟相關應用,即可快速恢復應用的業務訪問。
緩存層面高可用
本方案討論的最佳實踐以應用場景最為廣泛的云數據庫Redis為主,云數據庫Redis產品創建的時候已經默認提供跨雙機房的同城容災架構,在創建云數據庫 Redis版實例時,選擇支持同城容災的可用區,如下圖:
創建多可用區實例時,備機房將創建與主機房相同規格的Replica實例,主備機房的實例數據通過專門的復制通道同步。當主機房出現電力或網絡問題時,Replica實例將升級為Master實例,底層系統就會自動把請求路由到備機房,從而實現故障切換。
結束語
經過上述方案,我們可以利用阿里云EDAS 等相關產品,快速低成本的搭建具備同城雙活容災業務應用,保障線上業務在可用區發生不可用時快速實現流量數據切換,從而保證業務可持續性,該方案對公共云90%以上的用戶都能滿足其容災需求。
除了同城雙活容災,阿里云還提供了阿里巴巴電商環境演進出來的多活容災架構解決?案,基于靈活的規則調度、跨域跨云管控、數據保護等能力,保障故障場景下的業務快速恢復,滿足對高可用穩定性有更苛刻要求的客戶,有該需求的客戶可以參考官方文檔多活容災介紹 。
原文鏈接:https://developer.aliyun.com/article/781642?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的EDAS微服务应用同城容灾最佳实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云话题 | 你女朋友在买买买时,程序员小
- 下一篇: “云原生”为什么对云计算生态充满吸引力?