疫情期,APP 崩了怎么辦?阿里工程師公開高可用架構(gòu)筆記
阿里妹導(dǎo)讀:在這場(chǎng)抗擊新型冠狀肺炎的戰(zhàn)役中,普通人能做些什么呢?可能「宅」是現(xiàn)在大多數(shù)人能作出的重要貢獻(xiàn)之一。在這些深「宅」時(shí)光里,用手機(jī)或電腦打打游戲、追追劇成了很多人暫時(shí)忘掉現(xiàn)實(shí)的「良藥」。可是!正要上分的游戲突然崩了,正演到關(guān)鍵的劇情突然掛掉,最近“某某 app 崩了”帶著廣大網(wǎng)友都能領(lǐng)悟的痛頻上熱搜。網(wǎng)友紛紛呼喚程序員小哥哥快上班,其實(shí)疫情期間線上流量激增,很多線上應(yīng)用都面臨著巨大挑戰(zhàn)……要解決高流量和突發(fā)流量這種業(yè)務(wù)沖擊下,線上應(yīng)用頻繁崩潰的問題,首先需要審視企業(yè)目前 IT 架構(gòu)是否能支撐未來的業(yè)務(wù)發(fā)展。
阿里巴巴在多年 雙11 高并發(fā),高可用和高客戶體驗(yàn)要求背景下積累了相應(yīng)的技術(shù)體系,并賦能羅輯思維等客戶,幫助他們落地全鏈路壓測(cè)。本文整理自高用戶、突發(fā)高流量場(chǎng)景下的真實(shí)案例,公布阿里在高可用架構(gòu)建設(shè)過程中的實(shí)踐筆記,期待幫助更多企業(yè)從容應(yīng)對(duì)接下來的高流量場(chǎng)景。
你的應(yīng)用為什么崩了?
非常復(fù)雜的服務(wù)端
在我們的日常生活中因?yàn)?app 側(cè)相對(duì)穩(wěn)定,“崩”一般發(fā)生在看不見摸不著的“服務(wù)端”(或者叫云端),而這個(gè)服務(wù)端有多復(fù)雜?
以一個(gè)較為成熟的云上架構(gòu)為例,光是阿里云中構(gòu)建一個(gè)在線服務(wù)可以用到的云計(jì)算基礎(chǔ)、安全和企業(yè)應(yīng)用三個(gè)分類的云產(chǎn)品數(shù)量就達(dá)到幾乎 200 款。而我們從客戶端(App/PC)到達(dá)服務(wù)端會(huì)涉及到的關(guān)鍵節(jié)點(diǎn)就有 CDN、動(dòng)態(tài)加速、高防、應(yīng)用防火墻、4/7 層負(fù)載均衡、前后端服務(wù)集、緩存、數(shù)據(jù)庫(kù)存儲(chǔ)、中間件、基礎(chǔ)設(shè)施層等等,整個(gè)鏈路都面臨著不確定性,比如負(fù)載均衡中影響流量的產(chǎn)品規(guī)格就有 5 個(gè),后端服務(wù)的服務(wù)規(guī)?;瘑栴}更是復(fù)雜和難以評(píng)估檢驗(yàn),這其中任何一個(gè)節(jié)點(diǎn)出問題都會(huì)導(dǎo)致服務(wù)不可用,給最終用戶一個(gè)“崩”的感覺。同樣的問題在專有云、混合云和自建 IDC 都有。
如何能有效的全面檢驗(yàn)服務(wù)端吞吐能力、發(fā)現(xiàn)所有問題甚至是做好容量規(guī)劃,具備對(duì)峰值的流控調(diào)度能力是所有企業(yè)都需要思考和應(yīng)對(duì)的。
沒有提前規(guī)劃的服務(wù)能力
如果應(yīng)用沒有對(duì)自己的服務(wù)能力進(jìn)行提前規(guī)劃,沒有提前做好關(guān)鍵節(jié)點(diǎn)的規(guī)劃,對(duì)線上的應(yīng)急措施如彈性擴(kuò)容,線上防護(hù),熔斷降級(jí)等都不具備,在面對(duì)業(yè)務(wù)突發(fā)時(shí),就很難保證核心接口能夠穩(wěn)定對(duì)外服務(wù)。一旦,出現(xiàn)應(yīng)用“崩了”的情況下,很多企業(yè)無法采取正確的手段,匆匆擴(kuò)容非但不能解決問題,反而帶來更多不可預(yù)期的問題,導(dǎo)致“崩了”進(jìn)一步的惡化。
除去因問題發(fā)現(xiàn)、容量規(guī)劃、流控和熔斷降級(jí)引起的“崩”外,運(yùn)維態(tài)的隱患問題如故障影響面、配置一致性、監(jiān)控和根因分析相關(guān)工具、復(fù)雜的人員組織的高可用程度等,如果沒有足夠的演練和驗(yàn)證方案,一樣會(huì)在關(guān)鍵時(shí)刻讓你的應(yīng)用出現(xiàn)“崩”的情況。
阿里巴巴工程師的高可用架構(gòu)建設(shè)筆記
下面我們將阿里巴巴工程師在高可用架構(gòu)建設(shè)實(shí)踐中,積累的真實(shí)經(jīng)驗(yàn)以筆記的形式分享給大家。
架構(gòu)設(shè)計(jì)
首先要實(shí)現(xiàn)架構(gòu)可視化。利用 AHAS 的架構(gòu)感知可以全面了解云上系統(tǒng)架構(gòu),以可視化的方式直觀呈現(xiàn)云資源、容器和應(yīng)用間分層依賴關(guān)系。服務(wù)器、存儲(chǔ)、網(wǎng)絡(luò)是現(xiàn)代云平臺(tái)的基礎(chǔ)設(shè)施。隨著上云戰(zhàn)略的推進(jìn),越來越多的企業(yè)將業(yè)務(wù)、服務(wù)、系統(tǒng)構(gòu)建在云平臺(tái)上。
開源軟件和云服務(wù)的多樣性,開發(fā)語言的異構(gòu)性,以及企業(yè) IT 團(tuán)隊(duì)的組織和能力差異,都提高了標(biāo)準(zhǔn)化的復(fù)雜性。架構(gòu)感知功能應(yīng)運(yùn)而生,通過采集和分析操作系統(tǒng)及第三方標(biāo)準(zhǔn)接口,捕捉進(jìn)程級(jí)的調(diào)用關(guān)系,并使用特征庫(kù)算法識(shí)別進(jìn)程所使用的技術(shù)組件,最后在服務(wù)器、容器和進(jìn)程這三個(gè)維度上以可視化的方式展示應(yīng)用架構(gòu),給用戶一張全面清晰的云上架構(gòu)地圖。圍繞這張基礎(chǔ)的視圖,會(huì)持續(xù)衍生出云資源、容器和應(yīng)用架構(gòu)多維度的架構(gòu)視圖,還有搬站、重構(gòu)梳理和資產(chǎn)管理等場(chǎng)景化的視圖,真正做到CMDB可視化,驅(qū)動(dòng)問題發(fā)現(xiàn)助推業(yè)務(wù)增長(zhǎng),釋放云上的更多維度的紅利。
而關(guān)于強(qiáng)弱依賴治理,因?yàn)閺?qiáng)依賴本身意味著一榮俱榮,一損俱損。結(jié)合 AHAS SDK 的引入和預(yù)埋,一旦當(dāng)平臺(tái)最大吞吐能力到達(dá)瓶頸時(shí),除了入口或者web類應(yīng)用的業(yè)務(wù)峰值流量限流可以起到第一層的保護(hù)作用外,還可以將預(yù)先標(biāo)記為弱依賴的服務(wù)平滑下線,從而達(dá)到節(jié)省更多資源保障核心計(jì)算能力的目的,同時(shí)還可以去除非核心對(duì)核心服務(wù)的影響,最終通過合理高效的服務(wù)降級(jí)最大程度獲得業(yè)務(wù)和成本的平衡。而使用了AHAS SDK之后在編碼時(shí),只需要關(guān)心如何定義資源,即哪些方法/代碼塊需要保護(hù),而不需要關(guān)注如何保護(hù)這個(gè)資源。然后通過添加規(guī)則來保護(hù)資源,規(guī)則添加即時(shí)生效。
容量規(guī)劃
外網(wǎng)仿真壓測(cè):首先可以通過 PTS 高效快速構(gòu)建同模型和量級(jí)的業(yè)務(wù)流量,對(duì)于開源主流的 JMeter 腳本可以直接 100%兼容,對(duì)于沒有現(xiàn)成腳本的情況可以使用PTS自研的可視化交互進(jìn)行0編碼編排,編排完成后從公網(wǎng)的各地域運(yùn)營(yíng)商發(fā)起,真實(shí)模擬特定業(yè)務(wù)場(chǎng)景下的外網(wǎng)流量,從而全面驗(yàn)證和探測(cè)云上或云下整體架構(gòu)(從網(wǎng)絡(luò)接入到應(yīng)用服務(wù)內(nèi)再到存儲(chǔ)層和基礎(chǔ)設(shè)施)的瓶頸和問題。
全鏈路壓測(cè):更進(jìn)一步的,如果在生產(chǎn)環(huán)境想直接精準(zhǔn)衡量業(yè)務(wù)容量的情況,可以通過 PTS 相關(guān)解決方案使生產(chǎn)環(huán)境具備壓測(cè)流量識(shí)別和路由到指定影子存儲(chǔ)區(qū)域的能力,結(jié)合相關(guān)影子存儲(chǔ)區(qū)域的準(zhǔn)備,然后做到同樣規(guī)?;A(chǔ)數(shù)據(jù)上的業(yè)務(wù)流量壓測(cè)同樣的生產(chǎn)環(huán)境,最終達(dá)到精準(zhǔn)衡量線上生產(chǎn)環(huán)境的能力,當(dāng)然,對(duì)于壓測(cè)流水?dāng)?shù)據(jù)由于已經(jīng)隔離開,所以可以方便安全的清理和維護(hù)。
業(yè)務(wù)監(jiān)控
面對(duì)復(fù)雜的應(yīng)用環(huán)境和高速增長(zhǎng)的業(yè)務(wù),ARMS 能幫助用戶快速構(gòu)建各種環(huán)境下完整的監(jiān)控體系,實(shí)現(xiàn)從頁面到數(shù)據(jù)庫(kù)、從應(yīng)用性能到基礎(chǔ)架構(gòu)資源、從 IT 到業(yè)務(wù)的端到端監(jiān)控。減少故障排查時(shí)間,降低跨部門溝通成本,最終降低因?yàn)楣收虾腕w驗(yàn)差給企業(yè)帶來的損失。
線上管控
于運(yùn)行態(tài)或已有應(yīng)用可以通過 AHAS 探針形態(tài)(除AHAS SDK外更輕的方案)在不修改代碼的情況下進(jìn)行業(yè)務(wù)洪峰的流量強(qiáng)力控制、消息場(chǎng)景的削峰填谷,而對(duì)于結(jié)構(gòu)復(fù)雜的可以將系統(tǒng)內(nèi)或外不穩(wěn)定的因素迅速降級(jí)讓業(yè)務(wù)保持穩(wěn)定,同時(shí)還有單機(jī)過載保護(hù)(根據(jù) RT 動(dòng)態(tài)調(diào)節(jié)入口流量)的兜底能力,甚至很多時(shí)候系統(tǒng)來不及壓測(cè)或者不知道配置什么規(guī)則的時(shí)候單機(jī)智能過載保護(hù)是個(gè)很好的功能和方法。以上都在運(yùn)行態(tài)和運(yùn)維側(cè)即可完成引入和控制。對(duì)于線上配置項(xiàng)和業(yè)務(wù)屬性值通過 AHAS 開關(guān)模塊的輕量級(jí)方案進(jìn)行安全和統(tǒng)一管控,這部分能力即將開放,敬請(qǐng)期待。
日常巡檢
風(fēng)險(xiǎn)的提前暴露,通過 Advisor 智能顧問對(duì)云上主要云資源進(jìn)行全面的巡檢和風(fēng)險(xiǎn)識(shí)別,規(guī)則都來自于阿里云一線TAM同學(xué)面向客戶的技術(shù)體系積累及阿里生態(tài)內(nèi) SRE 最佳實(shí)踐的融合?;谇笆龅募軜?gòu)地圖和用戶的輸入,可進(jìn)行更深層次的應(yīng)用/業(yè)務(wù)架構(gòu)層面的巡檢和建議。
常態(tài)化演練
AHAS 的故障演練模塊遵循混沌工程實(shí)驗(yàn)原理并融合了阿里巴巴內(nèi)部實(shí)踐的經(jīng)驗(yàn),基于此用戶可以建立流程完整而且可視化程度很高的故障演練體系,可方便的對(duì)基礎(chǔ)資源、應(yīng)用服務(wù)、容器服務(wù)和云平臺(tái)4層進(jìn)行超多維度的編排和定制,同時(shí)產(chǎn)品還提供了豐富的成熟故障經(jīng)驗(yàn)庫(kù)。從而幫助用戶實(shí)現(xiàn)包括架構(gòu)、業(yè)務(wù)、人員的全面高可用提升。故障演練在依賴治理、業(yè)務(wù)連續(xù)性提升和故障修復(fù)驗(yàn)證等場(chǎng)景中都有巨大作用。
工具一覽表
1、應(yīng)用高可用服務(wù) AHAS
專注于提高應(yīng)用高可用能力的云工具產(chǎn)品,提供應(yīng)用架構(gòu)自動(dòng)探測(cè),故障注入式高可用能力評(píng)測(cè)和一鍵流控降級(jí)等功能,可以快速低成本的提升應(yīng)用可用性。
https://www.aliyun.com/product/ahas
2、性能測(cè)試 PTS
面向所有技術(shù)背景人員的云化測(cè)試工具。有別于傳統(tǒng)工具的繁復(fù),PTS以互聯(lián)網(wǎng)化的交互,提供性能測(cè)試、API調(diào)試和監(jiān)測(cè)等多種能力。自研和適配開源的功能都可以輕松模擬任意體量的用戶訪問業(yè)務(wù)的場(chǎng)景,任務(wù)隨時(shí)發(fā)起,免去繁瑣的搭建和維護(hù)成本。更是緊密結(jié)合監(jiān)控、流控等兄弟產(chǎn)品提供一站式高可用能力,高效檢驗(yàn)和管理業(yè)務(wù)性能。
https://www.aliyun.com/product/pts
3、智能顧問Advisor
智能顧問 Advisor 根據(jù)用戶情況,結(jié)合阿里云長(zhǎng)期以來的客戶側(cè)最佳實(shí)踐,基于TAM(Technical Account Management)服務(wù)體系的核心基礎(chǔ)能力,全方位地為用戶提供云資源、應(yīng)用架構(gòu)、業(yè)務(wù)性能及安全上的診斷和優(yōu)化建議?,F(xiàn)在,越來越多的阿里云云原生客戶可以通過 Advisor 便捷地享受專業(yè)的 TAM基 礎(chǔ)服務(wù),更好地用好云。同時(shí),我們也會(huì)圍繞 Advisor 為有相關(guān)需求的客戶提供專項(xiàng)深度的 TAM 服務(wù)。
https://www.aliyun.com/product/advisor
4、企業(yè)級(jí)高可用架構(gòu)解決方案
脫胎于阿里巴巴電商業(yè)務(wù)下的高可用技術(shù)體系經(jīng)過所有的雙11流量洪峰考驗(yàn)、日常穩(wěn)定性考驗(yàn),已經(jīng)服務(wù)于阿里全生態(tài)并開始服務(wù)外部的企業(yè)客戶,解決方案為企業(yè)提供的包括營(yíng)銷活動(dòng)支撐、整體成本控制(全鏈路壓測(cè)、容量規(guī)劃、流量控制、調(diào)度)、應(yīng)急應(yīng)對(duì)能力(開關(guān)和預(yù)案)、容災(zāi)逃逸能力(架構(gòu)感知、故障演練、異地多活、單元化)。
https://www.aliyun.com/solution/ehasl
5、混沌測(cè)試工具 ChaosBlade
ChaosBlade 是一款遵循混沌工程實(shí)驗(yàn)原理,建立在阿里巴巴近十年故障測(cè)試和演練實(shí)踐基礎(chǔ)上,并結(jié)合了集團(tuán)各業(yè)務(wù)的最佳創(chuàng)意和實(shí)踐,提供豐富故障場(chǎng)景實(shí)現(xiàn),幫助分布式系統(tǒng)提升容錯(cuò)性和可恢復(fù)性的混沌工程工具。
https://github.com/chaosblade-io/chaosblade
6、輕量級(jí)流量控制框架 sentinel
以流量為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度來幫助您保護(hù)服務(wù)的穩(wěn)定性。
https://github.com/alibaba/Sentinel/wiki