異地多活場景下的數據庫方案
方案背景隨著云計算的蓬勃發展,越來越多信息系統選擇部署在云計算環境下,因此基于云產品為信息系統的服務能力和數據質量提供保障尤為重要。為了防止災難性的故障如火災、洪水、地震、區域電力中斷或者人為破壞等對信息系統造成不可挽回的破壞,需要構建容災系統來保障信息系統的可用性和安全性。
2007年,國務院信息化辦公室聯合銀行、電力、民航、鐵路、證券等八大重點行業,制定發布了國家標準GB/T20988-2007《信息系統災難恢復規范》,明確規定了容災能力的6個等級要求。企業在構建容災系統時往往會參考國標等級,或者以此作為合規要求。然而,大部分傳統容災方案如同城容災、同城雙活、異地容災、兩地三中心等很難達到國標5-6級要求,同時還存在成本浪費,災備單元健壯性不足等問題。
異地多活是新一代的容災解決方案,在保證業務持續高可用的同時還能實現成本優化、地域級水平擴展、持續高可用等能力,本文會著重介紹阿里云主流數據庫產品在異地多活場景下的解決方案。
方案架構異地多活從業務視角來看是通過對業務做自頂向下的流量隔離來實現的,按照某一個分流維度對業務流量進行劃分,并路由到不同的地域。整個部署架構分多個地域,每個地域稱之為一個單元,其中某個單元又承擔著整個多活架構的邏輯中心角色,提供一些中心化的服務能力(如sequence_分發,強一致讀服務等)。每個單元內的業務架構分為接入層、服務層、數據層:
- 接入層
業務流量通過租戶側DNS解析后按照權重分配到不同單元的接入層,進入接入層后,通過解析請求header/cookie中的分流標,對比自定義的分流規則,判斷請求是否歸屬本單元,若歸屬本單元則走到本單元的服務層。否則流量需要轉發到對端單元,根據不同的內網連通性可以走upstream或304跳轉。
- 服務層
服務層部署的是業務應用系統,包括中間件等。如果使用了阿里云的中間件如CSB、RPC框架、MQ等,可以通過相應產品的多活接入能力實現在服務層的流量路由和糾錯。針對RPC服務,在多活場景中分為:單元化服務、中心化服務、普通服務三類:
- 單元化服務:每個單元內完全自治的服務,是多活場景下的主要服務類型,會對流量進行單元歸屬判斷,并進行流量糾錯。
- 中心化服務:強依賴中心單元的服務,流量都會被轉發到中心單元,通過中心單元的服務訪問中心單元的數據層。
- 普通服務:不做任何改造的服務,在本單元內進行服務調用,并訪問本單元的數據層。
支持多活能力的主要服務類型是單元化服務,但是當業務系統比較復雜時,可能難以實現所有業務模塊均按某一個維度劃分,或者某些業務服務必須要單點部署以避免分布式部署的一致性問題,此時可由中心化服務和普通服務提供相應能力支持。
- 數據層
數據層解決數據庫跨地域的部署與同步問題,并在災難發生時對流量切換動作提供相應的數據質量保護策略。針對上層業務不同的服務類型提供UNIT和COPY兩種數據同步策略:
UNIT類型:每個單元部署獨立的數據庫系統,單元之間通過DTS進行數據【雙向】實時同步,保持每個單元都有全量數據,每個單元均可進行讀寫操作,讀寫流量會根據業務定制的分流策略進行單元寫保護,這種同步策略用于支持服務層的單元化服務類型,是多活場景的核心同步策略。
COPY類型:每個單元部署獨立的數據庫系統,單元之間通過DTS進行數據【單向】實時同步,保持每個單元都有全量數據,中心單元可進行讀寫,非中心單元只提供讀服務。這種同步策略用于支持中心化服務和普通服務,中心化服務路由回中心執行,普通服務可在單元內進行讀。
- 容災能力要求高
異地多活可以達到國標6級的容災能力,適合對容災方面有較高要求的業務、業務流量比較敏感的業務或業務的某些核心系統。
- 流量要求精細化管理
異地多活支持多種流量管理策略,適合對流量管理有復雜需求的業務如按地域就近接入,按用戶信息分配指定數據中心等。
- 業務快速發展
異地多活實現業務按照單元級別(數據中心級別)實施水平擴展,業務定義好一個單元的服務部署配比后,可以以此為鏡像快速部署多個分布全國的單元,實現容量快速擴充。
- 業務讀多寫少
讀多寫少業務可以從業務行為上天然的規避數據異步復制的各類問題,并且業務接入多活的改造成本也較低,是比較適合實施異地多活的業務場景。
方案價值
- 業務即容災
傳統異地災備或兩地三中心的異地災備中心常態不提供服務,當發生地域級災難時難以保證異地災備中心的可用性,存在切換成功率低的問題,異地多活架構下各個地域數據中心不區分角色,全部常態承載業務流量,時刻保證業務系統健壯,各個數據中心既是業務體系也是容災系統。
- 業務連續性保障
異地多活架構下各個數據中心常態承接業務流量,故障發生時只需調撥入口流量即可實現容災切換,實現分鐘級的容災切換。同時隨著參與多活建設的數據中心數量增加,參與調撥流量的比例會相應減少,未參與調撥的業務流量可以實現對容災切換的“0”感知。
- 業務高速發展支撐
業務高速發展,受限于單個地域的有限資源,尤其是數據層存在單點性能瓶頸,除異地多活以外的全部容災架構都只能在主生產中心執行寫操作。地域多活實現業務級的流量閉環,各個數據中心均可讀寫,具備水平擴展能力以及跨地域的快速擴建能力。
- 流量有效隔離
異地多活本質上是提供了一種自頂向下的流量隔離能力,業務具備在數據中心級別完全隔離的能力,各個數據中心承載的流量大小可靈活調配,在最小隔離數據中心內(例如承載1%流量),業務可靈活進行風險可控的技術演進,例如基礎設施升級、新技術驗證等。
- 成本有效控制
在考慮單個地域發生地域級災難的場景下,不論兩地三中心還是異地災備都需要在災備中心部署可承載100%流量的系統資源,加上生產中心即達到200%的成本冗余。異地多活通過跨城多數據中心部署,有效分攤各個數據中心成本,實現成本小于200%冗余。
成功案例之聯通新客服
案例背景聯通新客服系統承擔著聯通全國的客服業務,對持續高可用能力有極高要求,同時也是聯通向全站高可用演進的起點,其業務特點以TP業務為主。
案例架構客戶基于此方案,整合RDS、PolarDB-X 1.0、DTS、MSHA產品能力,實現了整個新客服系統7個業務中心的多活能力。
- RDS、PolarDB-X 1.0承載業務數據并對接多活管控系統。
- DTS實現數據的跨城實時同步和狀態上報。
- MSHA實現多活流量管控和容災切換動作。
- 聯通新客服系統的接入中心、外呼中心、業務支撐等7個業務實現按地域多活分流。
- 實現多次容災演練,對多個省份進行切流,秒級完成切換,數據0丟失。
- 客戶部署了兩單元,常態兩個單元均承載業務流量,充分利用兩單元的資源。