掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
年年有大促,大家對于大促穩(wěn)定性保障這個詞都不陌生,業(yè)務(wù)場景盡管各不相同,“套路”往往殊路同歸,全鏈路壓測、容量評估、限流、緊急預(yù)案等,來來去去總少不了那么幾板斧。

創(chuàng)新互聯(lián)建站是專業(yè)的崇仁網(wǎng)站建設(shè)公司,崇仁接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行崇仁網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
跳出這些“套路”,回到問題的本質(zhì),我們?yōu)槭裁匆凑者@些策略來做?
除了口口相傳的歷史經(jīng)驗,我們還能做些什么?又有什么理論依據(jù)?
首先回答另一個問題,怎樣的系統(tǒng)算是穩(wěn)定的?
Google SRE中(SRE三部曲[1])有一個層級模型來描述系統(tǒng)可靠性基礎(chǔ)和高層次需求(Dickerson's Hierarchy of Service Reliability),如下圖:
該模型由Google SRE工程師Mikey Dickerson在2013年提出,將系統(tǒng)穩(wěn)定性需求按照基礎(chǔ)程度進行了不同層次的體系化區(qū)分,形成穩(wěn)定性標準金字塔模型。
金字塔的底座是監(jiān)控(Monitoring),這是一個系統(tǒng)對于穩(wěn)定性最基礎(chǔ)的要求,缺少監(jiān)控的系統(tǒng),如同蒙上眼睛狂奔的野馬,無從談及可控性,更遑論穩(wěn)定性。更上層是應(yīng)急響應(yīng)(Incident Response),從一個問題被監(jiān)控發(fā)現(xiàn)到最終解決,這期間的耗時直接取決于應(yīng)急響應(yīng)機制的成熟度。合理的應(yīng)急策略能保證當(dāng)故障發(fā)生時,所有問題能得到有序且妥善的處理,而不是慌亂成一鍋粥。事后總結(jié)以及根因分析(Postmortem&Root Caue Analysis),即我們平時談到的“復(fù)盤”,雖然很多人都不太喜歡這項活動,但是不得不承認這是避免我們下次犯同樣錯誤的最有效手段,只有當(dāng)摸清故障的根因以及對應(yīng)的缺陷,我們才能對癥下藥,合理進行規(guī)避。
假設(shè)一個系統(tǒng)從初次發(fā)布后就不再進行更新迭代,做好上述三個方面的工作就能基本滿足系統(tǒng)對于穩(wěn)定性的全部需求。可惜目前基本不會存在這樣的系統(tǒng),大大小小的應(yīng)用都離不開不斷的變更與發(fā)布,因此要保證系統(tǒng)在這些迭代中持續(xù)穩(wěn)定,測試和發(fā)布管控(Testing&Release procedures)是必不可少的。有效的測試與發(fā)布策略能保障系統(tǒng)所有新增變量都處于可控穩(wěn)定區(qū)間內(nèi),從而達到整體服務(wù)終態(tài)穩(wěn)定。除了代碼邏輯更新,迭代同樣可能帶來業(yè)務(wù)規(guī)模及流量的變化,容量規(guī)劃(Capacity Planning)則是針對于這方面變化進行的保障策略。現(xiàn)有系統(tǒng)體量是否足夠支撐新的流量需求,整體鏈路上是否存在不對等的薄弱節(jié)點,都是容量規(guī)劃需要考慮的問題。
位于金字塔模型最頂端的是產(chǎn)品設(shè)計(Product)與軟件研發(fā)(Development),即通過優(yōu)秀的產(chǎn)品設(shè)計與軟件設(shè)計使系統(tǒng)具備更高的可靠性,構(gòu)建高可用產(chǎn)品架構(gòu)體系,從而提升用戶體驗。
從金字塔模型我們可以看到構(gòu)建維護一個高可用服務(wù)所需要做到的幾方面工作,那么問題回到大促穩(wěn)定性,如何體系化地保障大促期間系統(tǒng)穩(wěn)定性?
大促保障實際上針對于特定業(yè)務(wù)場景的集中穩(wěn)定性建設(shè)工作,相較于日常保障工作,具有高并發(fā)流量、短保障周期的特點,對系統(tǒng)性能與保障時間有明確要求(一般為2個月左右)。
考慮到上述特性,我們?nèi)绾卧诙虝r間內(nèi)針對大促大流量業(yè)務(wù)場景對系統(tǒng)穩(wěn)定性需求進行優(yōu)化鞏固?
既然時間有限,盲目撒網(wǎng)必然不是最佳策略,需要有針對性地從關(guān)鍵點、薄弱點下手。因此第一步,需要獲得全局系統(tǒng)鏈路現(xiàn)狀,包括關(guān)鍵外部依賴、重點業(yè)務(wù)影響等,找到整體保障的核心關(guān)注點。接下來進一步分析大促業(yè)務(wù)數(shù)據(jù),得到除系統(tǒng)本身以外的變量干擾因素。以這兩者為基礎(chǔ),集中圍繞金字塔模型中系統(tǒng)監(jiān)控、規(guī)劃容量、應(yīng)急響應(yīng)、測試和復(fù)盤等幾個方面需求對系統(tǒng)進行針對性集中保障建設(shè),得到最終保障結(jié)果。
至此,基本獲得了完整的大促穩(wěn)定性保障策略方向,按照執(zhí)行順序依次是:
系統(tǒng)鏈路梳理是所有保障工作的基礎(chǔ),如同對整體應(yīng)用系統(tǒng)進行一次全面體檢,從流量入口開始,按照鏈路軌跡,逐級分層節(jié)點,得到系統(tǒng)全局畫像與核心保障點。
入口梳理盤點
一個系統(tǒng)往往存在十幾個甚至更多流量入口,包含HTTP、RPC、消息等都多種來源。如果無法覆蓋所有所有鏈路,可以從以下三類入口開始進行梳理:
核心重保流量入口
資損事件對應(yīng)入口
大流量入口
節(jié)點分層判斷
流量入口就如同線團中的線頭,挑出線頭后就可按照流量軌跡對鏈路上的節(jié)點(HSF\DB\Tair\HBase等一切外部依賴)按照依賴程度、可用性、可靠性進行初級分層區(qū)分。
(1)強弱依賴節(jié)點判斷
(2)低可用依賴節(jié)點判斷
(3)高風(fēng)險節(jié)點判斷
應(yīng)產(chǎn)出數(shù)據(jù)
完成該項梳理工作后,我們應(yīng)該產(chǎn)出以下數(shù)據(jù):對應(yīng)業(yè)務(wù)域所有核心鏈路分析,技術(shù)&業(yè)務(wù)強依賴、核心上游、下游系統(tǒng)、資損風(fēng)險應(yīng)明確標注。
下圖為單條鏈路分析示例:
不同于高可用系統(tǒng)建設(shè)體系,大促穩(wěn)定性保障體系與面向特定業(yè)務(wù)活動的針對性保障建設(shè),因此,業(yè)務(wù)策略與數(shù)據(jù)是我們進行保障前不可或缺的數(shù)據(jù)。
一般大促業(yè)務(wù)數(shù)據(jù)可分為兩類,全局業(yè)務(wù)形態(tài)評估以及應(yīng)急策略&玩法。
全局評估
該類數(shù)據(jù)從可以幫助我們進行精準流量評估、峰值預(yù)測、大促人力排班等等,一般包含下面幾類:
應(yīng)急策略
該類數(shù)據(jù)指相較于往年大促活動,本次大促業(yè)務(wù)變量,可用于應(yīng)急響應(yīng)預(yù)案與高風(fēng)險節(jié)點評估等,一般包含下面兩類:
目前業(yè)界常用的監(jiān)控手段一般有兩種模式,黑盒監(jiān)控(Black-box monitoring)與白盒監(jiān)控(White-box monitoring)。黑盒監(jiān)控面向?qū)ο?,一般監(jiān)控正在發(fā)生(而非即將發(fā)生)的異常,即系統(tǒng)現(xiàn)有故障。而白盒監(jiān)控主要依賴系統(tǒng)內(nèi)部指標監(jiān)控,面向?qū)ο蟮耐瑫r也面向原因,可對系統(tǒng)即將面臨的異常進行提前預(yù)警,也可在異常發(fā)生時同步監(jiān)控下層內(nèi)部指標,從而定位根本原因。因此大促穩(wěn)定性保障中,我們一般選擇的是白盒監(jiān)控。
站在監(jiān)控的角度看,我們的系統(tǒng)從上到下一般可以分為三層:業(yè)務(wù)(Biz)、應(yīng)用(Application)、系統(tǒng)(System)。系統(tǒng)層為最下層基礎(chǔ),表示操作系統(tǒng)相關(guān)狀態(tài);應(yīng)用層為JVM層,涵蓋主應(yīng)用進程與中間件運行狀態(tài);業(yè)務(wù)層為最上層,為業(yè)務(wù)視角下服務(wù)對外運行狀態(tài)。
因此進行大促穩(wěn)定性監(jiān)控梳理時,可以先脫離現(xiàn)有監(jiān)控,先從核心、資損鏈路開始,按照業(yè)務(wù)、應(yīng)用(中間件、JVM、DB)、系統(tǒng)三個層次梳理需要哪些監(jiān)控,再從根據(jù)這些索引找到對應(yīng)的監(jiān)控告警,如果不存在,則相應(yīng)補上;如果存在則檢查閾值、時間、告警人是否合理。
監(jiān)控
監(jiān)控系統(tǒng)一般有四項黃金指標:延時(Latency), 錯誤(Error),流量(Traffic), 飽和度(Situation),各層的關(guān)鍵性監(jiān)控同樣也可以按照這四項指標來進行歸類,具體如下:
表 1
告警
是不是每項監(jiān)控都需要告警?答案當(dāng)然是否定的。建議優(yōu)先設(shè)置Biz層告警,因為Biz層我們對外服務(wù)最直觀業(yè)務(wù)表現(xiàn),最貼切用戶感受。Application&System層指標主要用于監(jiān)控,部分關(guān)鍵&高風(fēng)險指標可設(shè)置告警,用于問題排查定位以及故障提前發(fā)現(xiàn)。
對于一項告警,我們一般需要關(guān)注級別、閾值、通知人等幾個點。
1)級別
即當(dāng)前告警被觸發(fā)時,問題的嚴重程度,一般來說有幾個衡量點:
2)閾值
即一項告警的觸發(fā)條件&時間,需根據(jù)具體場景合理制定。一般遵循以下原則:
3)通知人&方式
若為業(yè)務(wù)指標異常(Biz層告警),通知人應(yīng)為問題處理人員(開發(fā)、運維同學(xué))與業(yè)務(wù)關(guān)注人員(TL、業(yè)務(wù)同學(xué))的集合,通知方式較為實時,比如電話通知。
若為應(yīng)用 & 系統(tǒng)層告警,主要用于定位異常原因,通知人設(shè)置問題排查處理人員即可,通知方式可考慮釘釘、短信等低干擾方式。
除了關(guān)聯(lián)層次,對于不同級別的告警,通知人范圍也可適當(dāng)擴大,尤其是關(guān)聯(lián)GOC故障的告警指標,應(yīng)適當(dāng)放寬范圍,通知方式也應(yīng)更為實時直接。
應(yīng)產(chǎn)出數(shù)據(jù)
完成該項梳理工作后,我們應(yīng)該產(chǎn)出以下數(shù)據(jù):
容量規(guī)劃的本質(zhì)是追求計算風(fēng)險最小化和計算成本最小化之間的平衡,只追求任意其一都不是合理的。為了達到這兩者的最佳平衡點,需盡量精準計算系統(tǒng)峰值負載流量,再將流量根據(jù)單點資源負載上限換算成相應(yīng)容量,得到最終容量規(guī)劃模型。
流量模型評估
1)入口流量
對于一次大促,系統(tǒng)峰值入口流量一般由常規(guī)業(yè)務(wù)流量與非常規(guī)增量(比如容災(zāi)預(yù)案&業(yè)務(wù)營銷策略變化帶來的流量模型配比變化)疊加擬合而成。
(a)常規(guī)業(yè)務(wù)流量一般有兩類計算方式:
歷史流量算法:該類算法假設(shè)當(dāng)年大促增幅完全符合歷史流量模型,根據(jù)當(dāng)前&歷年日常流量,計算整體業(yè)務(wù)體量同比增量模型;然后根據(jù)歷年大促-日常對比,計算預(yù)估流量環(huán)比增量模型;最后二者擬合得到最終評估數(shù)據(jù)。
由于計算時無需依賴任何業(yè)務(wù)信息輸入,該類算法可用于保障工作初期業(yè)務(wù)尚未給出業(yè)務(wù)總量評估時使用,得到初估業(yè)務(wù)流量。
業(yè)務(wù)量-流量轉(zhuǎn)化算法(GMV\DAU\訂單量):該類算法一般以業(yè)務(wù)預(yù)估總量(GMV\DAU\訂單量)為輸入,根據(jù)歷史大促&日常業(yè)務(wù)量-流量轉(zhuǎn)化模型(比如經(jīng)典漏洞模型)換算得到對應(yīng)子域業(yè)務(wù)體量評估。
該種方式強依賴業(yè)務(wù)總量預(yù)估,可在保障工作中后期使用,在初估業(yè)務(wù)流量基礎(chǔ)上納入業(yè)務(wù)評估因素考慮。
(b)非常規(guī)增量一般指前臺業(yè)務(wù)營銷策略變更或系統(tǒng)應(yīng)急預(yù)案執(zhí)行后流量模型變化造成的增量流量。例如,NA61機房故障時,流量100%切換到NA62后,帶來的增量變化。
考慮到成本最小化,非常規(guī)增量P計算時一般無需與常規(guī)業(yè)務(wù)流量W一起,全量納入疊加入口流量K,一般會將非常規(guī)策略發(fā)生概率λ作為權(quán)重,即:
2)節(jié)點流量
節(jié)點流量由入口流量根據(jù)流量分支模型,按比例轉(zhuǎn)化而來。分支流量模型以系統(tǒng)鏈路為計算基礎(chǔ),遵循以下原則:
容量轉(zhuǎn)化
1)Little Law衍生法則
不同類型資源節(jié)點(應(yīng)用容器、Tair、DB、HBASE等)流量-容量轉(zhuǎn)化比各不相同,但都服從Little Law衍生法則,即:
2)N + X 冗余原則
上述法則只能用于容量初估(大促壓測前&新依賴),最終精準系統(tǒng)容量還是需要結(jié)合系統(tǒng)周期性壓力測試得出。
應(yīng)產(chǎn)出數(shù)據(jù)
要想在大促高并發(fā)流量場景下快速對線上緊急事故進行響應(yīng)處理,僅僅依賴值班同學(xué)臨場發(fā)揮是遠遠不夠的。爭分奪秒的情況下,無法給處理人員留有充足的策略思考空間,而錯誤的處理決策,往往會導(dǎo)致更為失控嚴重的業(yè)務(wù)&系統(tǒng)影響。因此,要想在大促現(xiàn)場快速而正確的響應(yīng)問題,值班同學(xué)需要做的是選擇題(Which),而不是陳述題(What)。而選項的構(gòu)成,便是我們的業(yè)務(wù)&系統(tǒng)預(yù)案。
從執(zhí)行時機與解決問題屬性來劃分,預(yù)案可分為技術(shù)應(yīng)急預(yù)案、技術(shù)前置預(yù)案、業(yè)務(wù)應(yīng)急預(yù)案、業(yè)務(wù)前置預(yù)案等四大類。結(jié)合之前的鏈路梳理和業(yè)務(wù)評估結(jié)果,我們可以快速分析出鏈路中需要的預(yù)案,遵循以下原則:
應(yīng)產(chǎn)出數(shù)據(jù)
完成該項梳理工作后,我們應(yīng)該產(chǎn)出以下數(shù)據(jù):
階段性產(chǎn)出-全鏈路作戰(zhàn)地圖
進行完上述幾項保障工作,我們基本可得到全局鏈路作戰(zhàn)地圖,包含鏈路分支流量模型、強弱依賴節(jié)點、資損評估、對應(yīng)預(yù)案&處理策略等信息。大促期間可憑借該地圖快速從全局視角查看應(yīng)急事件相關(guān)影響,同時也可根據(jù)地圖反向評估預(yù)案、容量等梳理是否完善合理。
作戰(zhàn)手冊是整個大促保障的行動依據(jù),貫穿于整個大促生命周期,可從事前、事中、事后三個階段展開考慮。
整體梳理應(yīng)本著精準化、精細化的原則,理想狀態(tài)下,即便是對業(yè)務(wù)、系統(tǒng)不熟悉的輪班同學(xué),憑借手冊也能快速響應(yīng)處理線上問題。
事前
1)前置檢查事項清單
大促前必須執(zhí)行事項checklist,通常包含以下事項:
2)前置預(yù)案
域內(nèi)所有業(yè)務(wù)&技術(shù)前置預(yù)案。
事中
1)緊急技術(shù)&業(yè)務(wù)預(yù)案
需要包含的內(nèi)容基本同前置預(yù)案,差異點如下:
2)應(yīng)急工具&腳本
常見故障排查方式、核心告警止血方式(強弱依賴不可用等),業(yè)務(wù)相關(guān)日志撈取腳本等。
3)告警&大盤
應(yīng)包含業(yè)務(wù)、系統(tǒng)集群及中間件告警監(jiān)控梳理結(jié)果,核心業(yè)務(wù)以及系統(tǒng)大盤,對應(yīng)日志數(shù)據(jù)源明細等數(shù)據(jù):
4)上下游機器分組
應(yīng)包含核心系統(tǒng)、上下游系統(tǒng),在不同機房、單元集群分組、應(yīng)用名,可用于事前-機器權(quán)限檢查、事中-應(yīng)急問題排查黑屏處理。
5)值班注意事項
包含每班輪班同學(xué)值班必做事項、應(yīng)急變更流程、核心大盤鏈接等。
6)核心播報指標
包含核心系統(tǒng)&服務(wù)指標(CPU\LOAD\RT)、業(yè)務(wù)關(guān)注指標等,每項指標應(yīng)明確具體監(jiān)控地址、采集方式。
7)域內(nèi)&關(guān)聯(lián)域人員通訊錄、值班
包含域內(nèi)技術(shù)、TL、業(yè)務(wù)方對應(yīng)排班情況、聯(lián)系方式(電話),相關(guān)上下游、基礎(chǔ)組件(DB、中間件等)對應(yīng)值班情況。
8)值班問題記錄
作戰(zhàn)記錄,記錄工單、業(yè)務(wù)問題、預(yù)案(前置\緊急)(至少包含:時間、問題描述(截圖)、影響分析、決策&解決過程等)。值班同學(xué)在值班結(jié)束前,進行記錄。
事后
1)系統(tǒng)恢復(fù)設(shè)置事項清單(限流、縮容)
一般與事前檢查事項清單對應(yīng),包含限流閾值調(diào)整、集群縮容等大促后恢復(fù)操作。
2)大促問題復(fù)盤記錄
應(yīng)包含大促遇到的核心事件總結(jié)梳理。
實戰(zhàn)沙盤演練是應(yīng)急響應(yīng)方面的最后一項保障工作,以歷史真實故障CASE作為應(yīng)急場景輸入,模擬大促期間緊急狀況,旨在考驗值班同學(xué)們對應(yīng)急問題處理的響應(yīng)情況。
一般來說,一個線上問題從發(fā)現(xiàn)到解決,中間需要經(jīng)歷定位&排查&診斷&修復(fù)等過程,總體遵循以下幾點原則:
沙盤演練旨在檢驗值班同學(xué)故障處理能力,著重關(guān)注止血策略、分工安排、問題定位等三個方面:
國際化中臺雙11買家域演練
根據(jù)故障類型,常見止血策略有以下解決思路:
應(yīng)對突發(fā)流量過高導(dǎo)致自身系統(tǒng)、下游強依賴負載被打滿。
下游弱依賴不可用。
下游業(yè)務(wù)強依賴經(jīng)業(yè)務(wù)同意后降級(業(yè)務(wù)部分有損)。
單機水位飆高時,先下線不可用單機服務(wù)(無需下線機器,保留現(xiàn)場)。
應(yīng)對集群單點不可用、性能差。
應(yīng)對單庫或某單元依賴因為自身原因(宿主機或網(wǎng)絡(luò)),造成局部流量成功率下跌下跌。
Google SRE中,對于緊急事故管理有以下幾點要素:
其中嵌套式職責(zé)分離,即分確的職能分工安排,達到各司其職,有序處理的效果,一般可分為下列幾個角色:
相關(guān)閱讀
[1]https://landing.google.com/sre/books/
https://sre.google/sre-book/table-of-contents/
https://sre.google/workbook/table-of-contents/

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流