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