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