多活容災致力于幫助客戶構建多活容災架構。架構上通常將業務系統自上而下分為接入層、應用層和數據層三層。配合產品提供的管控和數據面組件,實現多活架構的創建和管控。
MSHA產品架構圖
控制臺
控制臺是用戶側控制臺入口,提供MSFE、HSF、Dubbo、MQ、RDS和DRDS等各類技術架構下的容災配置及容災切換。
業務LDC定義與多活實例創建。
接入層、應用層和數據層的各類技術架構容災配置。
多活架構下的全棧監控。
多活架構下的容災場景管理與切流。
接入層
接入層是機房的流量入口,常見實現是流量網關。MSHA當前提供一個基于Tengine的流量網關實現,簡稱MSFE,需要在租戶側ECS上搭建集群,還有MSE云原生網關支持,其他流量網關產品正在計劃中支持。接入層功能可以概括為以下幾點:
機房級流量路由。多活流量必須經過接入層,以便在故障發生時,通過接入層切換入口流量。
比例分流:接入層支持按比例將流量分流到機房。特殊場景下,可以將機房流量切零,從而實現故障情況下的流量切換。
精準路由:接入層支持根據HTTP請求Header/Cookie/Query String Parameters中攜帶的路由標識,以及配置好的路由規則名單,將流量路由到對應的機房。
由于DNS域名解析的隨機性,接入層的路由糾錯可以保證準確性與實效性。
應用級流量路由:支持按照不同的域名與URI組合,將流量分流到對應的后端應用。
應用層
應用層是對應用服務的抽象概括,包括微服務、消息、定時任務。
微服務,常見的包括EDAS-HSF服務、Dubbo服務、SpringCloud服務,MSHA提供以下核心能力。
跨云服務同步:MshaSync服務端組件支持對多云的注冊中心進行服務信息同步。支持的注冊中心有Nacos、ZK。針對Eureka,建議客戶遷移到Nacos。
同機房優先路由:支持Consumer優先調用同機房內的Provider,從而減少跨機房調用,同時還能將故障的爆炸半徑控制在一個機房內。
故障隔離:當局部Provider出現異常時,支持將異常的Provider進行故障隔離,保證所有機房內的Consumer均不會調用到異常的Provider,實現微服務流量的故障逃逸。
單元化服務尋址:針對異地多活單元化架構,支持按照單元化規則尋址調用Provider。
消息,包括云產品和開源RocketMQ,MSHA提供以下核心能力。
消息同步:支持消息以Topic粒度的跨地域雙向同步。
故障隔離:切零單元格內的SUB端不再進行消息的消費,從而實現消費流量的快速逃逸。
消息按需消費:在消息同步的情況下每個單元有兩份消息,在異地應用雙活架構、異地雙活單元化架構下按一定規則消費消息。
定時任務,包括云消息SchedulerX和開源XXL-Job等,MSHA提供以下核心能力。
故障隔離。切零單元格內的定時任務客戶端不再運行定時任務,從而實現定時任務的快速逃逸。
數據層
數據層是數據庫服務的抽象概括,針對關系型數據庫,包括RDS、DRDS(PolarDB-X1.0)、PolarDB-X2.0、PolarDB O、MongoDB、Elasticsearch、自建MySQL、自建PostgreSQL等,MSHA提供以下核心能力。
數據單向/雙向同步:借助DTS等產品能力進行數據同步,特別是對于單向同步鏈路,支持數據源主備切換過程中的同步鏈路翻轉。
讀寫分離/讀寫不分離:讀寫分離,寫主云讀本地。讀寫不分離,讀寫均在主云。
主備切換:單云故障,支持數據庫跨云主備切換,MshaSDK能夠將應用原本連接A云的數據源,切換為連接到B云的數據源。切換過程中還具備禁寫保護能力,避免產生數據臟寫等數據質量問題。
數據雙活:異地雙活單元化架構下,支持表級別的數據類型定義和禁寫控制,避免雙寫場景下的數據質量問題。