阿裡(lǐ)雲開(kāi)源業内首個應用多活項目 AppActive,與社區共建雲原生容災标準
作者:中西(github @zhongxig),AppActive 負責人,來自阿裡(lǐ)雲雲原生高可用架構團隊,從事(shì)容災架構和故障快恢的研發(fā)和開(kāi)源工作。
摘要: 繼高可用架構團隊的 Sentinel、Chaosblade 開(kāi)源後(hòu),第三個重磅高可用産品:應用多活 AppActive 正式開(kāi)源,形成(chéng)高可用的三架馬車,幫助企業構建穩定可靠的企業級生産系統,提高企業面(miàn)對(duì)容災、容錯、容量等問題的穩态系統建設能(néng)力。
1 月 11 日,在上海的雲原生實戰峰會(huì)上,阿裡(lǐ)雲智能(néng)研究員丁宇發(fā)布了“應用多活技術白皮書”,同時(shí)爲了推動業界容災的發(fā)展,建立雲原生業務容災标準,阿裡(lǐ)雲對(duì)外開(kāi)源“應用多活”中間件:AppActive。
什麼(me)是 AppActive
“業務大規模擴展機房資源不可用怎麼(me)辦?機房挂了怎麼(me)辦?業務突然奔潰怎麼(me)辦?台風地震導緻斷電怎麼(me)辦?”
2013 年,當時(shí)淘寶完成(chéng)去 O 沒(méi)多久,雙十一的規模較上年進(jìn)一步飛增。阿裡(lǐ)的工程師正面(miàn)臨著(zhe)上述的這(zhè)一系列問題,一方面(miàn)是機房資源非常緊張,容量不足,另一方面(miàn)是杭州出現罕見的高溫天氣,機房面(miàn)臨斷電的風險。異地多活架構在這(zhè)個背景下孵化出來,它的載體是集團版本的 UnitRouter&UnitBrain 。
随著(zhe)淘寶的業務規模演進(jìn),異地多活也從近距離同城雙機房到遠距離異地雙活,再到三地四單元、多地多活,沉澱了豐富的機房級應用多活經(jīng)驗。
2019 年,阿裡(lǐ)巴巴系統全面(miàn)上雲,異地多活架構也跟著(zhe)上雲的節奏孵化出阿裡(lǐ)雲雲産品 AHAS-MSHA,服務集團和雲上客戶
2022 年 1 月 11 日,AHAS-MSHA 代碼正式開(kāi)源,命名爲 AppActive 。
AppActive 是一個面(miàn)向(xiàng)業務應用構建雲原生高可用多活容災架構的開(kāi)源中間件,它的主要價值:
分鍾級 RTO。 恢複時(shí)間快,阿裡(lǐ)内部生産級别恢複時(shí)間平均在 30s 以内,外部客戶生産系統恢複時(shí)間平均在 1 分鍾。
資源充分利用。 資源不存在閑置的問題,多機房多資源充分利用,避免資源浪費。
切換成(chéng)功率高。 依托于成(chéng)熟的多活技術架構和可視化運維平台,相較于現有容災架構,切換成(chéng)功率高,阿裡(lǐ)内部年切流數千次的成(chéng)功率高達 99.9% 以上。
流量精準控制。 應用多活支持流量自頂到底封閉,依托精準引流能(néng)力將(jiāng)特定業務流量打入對(duì)應機房,企業可基于此優勢能(néng)力孵化全域灰度、重點流量保障等特性。
爲什麼(me)開(kāi)源
通過(guò)服務阿裡(lǐ)集團近 9 年實戰經(jīng)驗及服務雲上客戶 2 年多的商業化叠代積累,AHAS-MSHA 已經(jīng)在涵蓋阿裡(lǐ)的十餘家大型企業的容災場景中落地,使用量在持續增長(cháng),代碼的穩定性和功能(néng)特性也經(jīng)過(guò)充分的檢驗。
2021 年,國(guó)内外多家知名公司、雲平台出現較嚴重服務中斷、宕機事(shì)件。這(zhè)也爲企業敲響警鍾,越來越多的企業把容災建設提上日程。在解決容災問題的同時(shí),爲了保持對(duì)成(chéng)本的控制、支撐未來的多雲架構演進(jìn)和災難容災的确定性,許多企業選擇以多活容災的方式進(jìn)行嘗試。
但是業内對(duì)于多活沒(méi)有統一的認知,對(duì)于“多活”這(zhè)個詞不同企業有不同的定義,很多企業往往以爲已經(jīng)實現了“多活”,可當故障來臨的時(shí)候,才發(fā)現當前系統的故障逃逸能(néng)力非常弱,業務恢複和故障定位無法解耦,拖累了企業生産,造成(chéng)了外部輿情、資金損失等問題;另外,有的企業在了解“多活”之後(hòu),下意識想要企業内部先投入資源進(jìn)行技術預演,但由于缺少經(jīng)驗,往往會(huì)造成(chéng)人力物力等資源的重複浪費。随著(zhe)雲原生技術發(fā)展,越來越多的客戶采用雲原生技術進(jìn)行系統構建。如何在雲原生上構建穩定高可用的系統,是一個核心挑戰。“多活”的認知偏差會(huì)加劇企業在基礎設施成(chéng)本、應用改造成(chéng)本、運維成(chéng)本等成(chéng)本面(miàn)的投入,但存在效率低下、錯用甚至無用或者不用的問題,從而享受不到“多活”帶來的穩定性紅利。因此“多活”需要一個相對(duì)統一的标準與認知,加深使用者對(duì)它的理解和使用,從而提高業務系統的穩定性。
在當前雲原生發(fā)展的現狀和市場認知下,AppActive 的項目負責人中西表示,應用多活的開(kāi)源和解讀,可以初步定義“多活”的标準和實現,幫助開(kāi)發(fā)者形成(chéng)統一的“多活”認知。在企業構建多活架構時(shí),基于應用多活共享已有的成(chéng)熟經(jīng)驗,避免多餘的資源浪費。同時(shí),不同的企業具備不同的業務場景和優勢,反向(xiàng)推動應用多活進(jìn)一步完善和演進(jìn)成(chéng)熟的多活形态及能(néng)力。希望依靠社區的力量,讓“多活”成(chéng)爲一項事(shì)實意義的普惠技術,而不是望而卻步的部分人可用技術,幫助更多的企業和個人構建生産級别的高可用架構。
開(kāi)源的内容
AppActive 标準介紹
在應用多活的标準定義裡(lǐ)有 LRA(同城多活)、UDA(異地多活)、HCA(混合雲多活)和 BFA(業務流量多活),詳細見《應用多活技術白皮書》。在 AppActive v0.1 版本中,我們優先實現 BFA 和 UDA 的基礎能(néng)力,在後(hòu)續版本中完善 BFA 和 UDA 的同時(shí),新增 LRA、HCA 能(néng)力。本文重點介紹 BFA、UDA。
1. 業務流量多活(BFABusiness Flow Active)
BFA,指的是應用多活的最終呈現是業務,多活容災系統具備按照業務特征進(jìn)行生産流量的精細化調配。
AppActive 在 BFA 指标中,支持流量自動糾偏,強路由到指定機房自閉環,屬于流量的精細化調配。
在非法流量打入機房時(shí),機房的各層插件均會(huì)依托于統一的調度規則進(jìn)行處理:
接入層識别錯誤流量,自動糾錯到正确的機房。
服務層識别錯誤流量,自動糾錯到正确的機房。
數據層識别錯誤流量,爲保證數據質量,抛出異常,寫入失敗。
2. 異地多活(UDA,Ultra Distance Active)
UDA,指的是在超遠距離(機房間距超過(guò) 300 公裡(lǐ))時(shí),業務系統仍具備較好(hǎo)的訪問性能(néng)。進(jìn)入容災态時(shí),RTO、RPO 在分鍾級。
AppActive 在 UDA 指标中,支持訪問性能(néng)良好(hǎo)。
在接入層支持流量解析,將(jiāng)請求流量進(jìn)行解析,將(jiāng)流量打入機房的應用機器。基于應用側 Servlet 插件、Dubbo 插件、MySQL 插件的能(néng)力,業務流量請求在單一機房裡(lǐ)面(miàn)自閉環,最終讀寫到本機房的數據庫。
在超遠距離場景下,由于流量封閉在機房内部,因此業務系統仍舊具備較好(hǎo)的訪問性能(néng)。
進(jìn)入容災态的 RPO 由開(kāi)源數據同步組件或商業化同步工具進(jìn)行保障,RTO 在 AppActive 0.1 版本中僅提供初級的流量切換能(néng)力,後(hòu)續版本會(huì)演進(jìn)到生産級别 RTO 保障工具。
AppActive 模塊介紹
AppActive 屬于應用多活的一種(zhǒng)定義和實現,它有數據平面(miàn)和管控平面(miàn)的整體實現。數據平面(miàn)分爲 4 部分,均支持在不變更原有企業使用技術組件基礎上,以插件的形式增加能(néng)力:
接入網關。接入網關作爲業務流量打入機房的第一跳,負責應用多活入口流量的識别和分發(fā),具備機房路由和應用路由兩(liǎng)個核心能(néng)力。
服務層。業務流量在機房内部和跨機房的同步調用方式,一般有 Consumer、Provider、注冊中心等角色,具備流量路由、流量保護、故障隔離三個核心能(néng)力,避免調用錯誤導緻的數據髒寫,加速切流期間的業務恢複。
消息層。業務流量在機房内部和跨機房的異步調用方式,基于消息削峰填谷,一般有 Producer、Consumer、Broker 等角色,具備流量路由、流量保護、故障隔離三個核心能(néng)力,避免消息錯投導緻的數據髒寫,保護切流期間消息不丢。
數據層:涵蓋業務應用數據讀寫、數據存儲和數據同步,其具備流量路由、數據一緻性保護、數據同步三個核心能(néng)力。
管控平面(miàn)核心涵蓋多活容災規則的日常運維和災難場景的流量切換。
當前 AppActive 處于 v0.1 版本,開(kāi)源:
上述的數據平面(miàn)所有層的定義基礎實現。
接入層網關的 Nginx 插件實現。
服務層 Dubbo2.x 插件實現。
數據層開(kāi)源 MySQL 插件實現。
管控平面(miàn)流量切換的基礎能(néng)力。
開(kāi)發(fā)者可基于 v0.1 的能(néng)力,進(jìn)行應用多活的基本功能(néng)運行和驗證。
AppActive 後(hòu)續規劃
豐富接入層、服務層、數據層插件,支持更多技術組件到 AppActive 支持的列表中。
增加消息層的插件實現,支持消息應用多活能(néng)力。
增加其他層在應用多活的标準和實現。
支持 Web 白屏化,follow 應用多活 UDA 的标準,提升 RTO。
遵循應用多活 HCA 标準支持混合雲多活形态。
遵循應用多活 LRA 标準支持同城多活形态
起(qǐ)點
“異地多活”和“單元化”源于阿裡(lǐ),也受到了業界的認可。阿裡(lǐ)也一直希望應用多活的産品生态可以做到标準和開(kāi)放,對(duì)業界做出貢獻。
基于應用多活的标準技術,業務應用在不同的雲廠商之間,不同的基礎設施之間,不同的芯片之間都(dōu)可以實現互通互聯。業務應用在資源充分利用的同時(shí),達到分鍾級甚至秒級的 RTO 指标,真正意義的做到不懼故障。
今天,AppActive 開(kāi)源的第一個版本隻是應用多活領域的一個起(qǐ)點,歡迎大家參與進(jìn)來一起(qǐ)共建應用多活生态。想要了解更多 AppActive,釘釘搜索群号:34222602,加入 AppActive 開(kāi)源讨論群參與讨論吧!
點擊此處,立即前往下載《應用多活技術白皮書》。