持續(xù)保障系統(tǒng)穩(wěn)定性和高可用:騰訊游戲混沌工程實踐
最近一兩年,我們可以發(fā)現(xiàn)混沌工程這個技術(shù)變得十分火熱,大家都知道它變成了一個新的風(fēng)口。常說做事情要順勢而為,我們希望能夠抓住這個機會,所以我最近一年的工作主要是將混沌工程這一技術(shù)在騰訊游戲落地。
一、什么是混沌工程
1、混沌工程的定義
混沌工程是為應(yīng)對故障而生。大家知道我們運維人員都很辛苦,經(jīng)常在周末或者半夜起來處理各種各樣的故障。為了減少這種現(xiàn)象,更加有效地應(yīng)對故障,混沌工程應(yīng)運而生。
混沌工程是通過主動注入故障的方式,提前將系統(tǒng)的問題暴露出來,發(fā)現(xiàn)系統(tǒng)可能存在一些風(fēng)險點,然后把這些問題提前解決掉。即使我們系統(tǒng)半夜或者周末發(fā)生故障,我們也可以安穩(wěn)地休息。
上圖中的內(nèi)容是Netflix那本書中對混沌工程的定義,簡單說就是通過主動注入故障的方式、提前發(fā)現(xiàn)問題,然后解決問題、規(guī)避風(fēng)險。
2、混沌工程的作用
混沌工程的出現(xiàn)是為了有效應(yīng)對故障,其作用具體可分為以下六點。
1)故障預(yù)防
混沌工程的核心點是預(yù)防故障,通過主動注入故障的方式將故障提前解決掉。
2)故障發(fā)現(xiàn)
混沌工程能夠提前幫助我們檢測故障。例如,我們通過混沌工程來檢測我們的告警監(jiān)控系統(tǒng)、輿情,定期巡檢這些系統(tǒng)是否有效。通過注入故障驗證系統(tǒng)的有效性,從而提高我們故障檢測的速度,縮短故障平均檢測時長。
3)故障響應(yīng)
做混沌工程也可以加快我們的故障響應(yīng)速度。例如,我們可能經(jīng)常在下班之后做混沌工程,看我們團隊的響應(yīng)速度如何,是否在組織協(xié)調(diào)方面存在一些問題。這樣能夠提高我們整個團隊的戰(zhàn)斗力和故障響應(yīng)的速度。
4)故障定位
混沌工程還可以幫我們定位故障。通過混沌工程可以判斷故障是否能夠及時被檢測到;我們系統(tǒng)的一些巡檢工具、Matrics、Log、Trace等可觀測平臺,它們的有效性是否可靠;我們的診斷工具是否能夠能夠及時定位到根因。這樣可以加快我們故障定位的速度,提高效率。
5)故障恢復(fù)
發(fā)現(xiàn)故障后,我們要修復(fù)故障。我們通過混沌工程也可以檢驗故障切換、限流熔斷、降級等策略以及應(yīng)急預(yù)案是否有效,能不能快速地修復(fù)故障,縮短我們故障的平均修復(fù)時長,這也是我們做混沌工程的一個重要出發(fā)點。
6)復(fù)盤改進(jìn)
故障結(jié)束之后,我們經(jīng)常要對故障進(jìn)行復(fù)盤。故障修復(fù)后,我們在生產(chǎn)環(huán)節(jié)很難復(fù)現(xiàn)。通過混沌工程我們可以非常簡單高效地復(fù)盤我們項目已經(jīng)發(fā)生過的一些故障,這也是混沌工程的一個重要作用。
綜上所述,混沌工程通過提前主動注入故障、發(fā)現(xiàn)問題、解決問題的方式,降低我們生產(chǎn)環(huán)境中故障發(fā)生的概率。
二、混沌工程平臺建設(shè)
具體到混沌工程的實踐,業(yè)界有一套方法論。通過理解與總結(jié),我把它分為5個環(huán)節(jié)。
要搞混沌工程,首先要有一個平臺。這個平臺可以做出故障、實現(xiàn)故障的編排、同步觀測實驗效果以及輸出實驗報告。完成實驗之后發(fā)現(xiàn)、跟進(jìn)、解決問題,將問題解決后再次提交驗證,通過這一閉環(huán),不斷地提升業(yè)務(wù)的穩(wěn)定性與可靠性,就是做混沌工程的核心理念。
在騰訊游戲的具體落地中,我們通過混沌實驗的全生命周期來設(shè)計這一平臺。
1、流程設(shè)計
1)實驗前
做一個實驗,首先要有創(chuàng)造、注入故障的能力,要有故障場景,這里的故障場景就是指故障原子。我們希望實驗平臺能夠提供豐富的故障原子,將這些原子組合起來模擬出現(xiàn)網(wǎng)可能會發(fā)生的各種故障。
在實驗過程中,實驗平臺要能夠打通我們當(dāng)前系統(tǒng)或公司已經(jīng)存在的一些監(jiān)控系統(tǒng),例如一些基礎(chǔ)監(jiān)控,或者業(yè)務(wù)特性的指標(biāo)監(jiān)控,并將其對接集成到實驗平臺。
我們混沌實驗平臺還需要管理我們的實驗?zāi)繕?biāo)。例如我們的一個K8S集群、一批IP或者一個物理機群等,要能夠?qū)Π悬c進(jìn)行分類,對通常說的爆炸半徑進(jìn)行管理。接下來,我們要能夠?qū)嶒炞鼍幣?,通過一些拖拉拽的方式,將一次混沌實驗編排進(jìn)來,這是這個平臺在實驗前應(yīng)具備的能力。
2)實驗中
實驗中,我們的核心點是希望平臺能夠注入故障,同時觀察實驗的效果,即一邊做實驗一邊看效果。
實驗的過程中可能會出現(xiàn)一些我們預(yù)料之外的異常情況,我們要有兜底的策略,能夠在極端情況下自動停止實驗。做到很好的實驗防護(hù),也是我們這個平臺需要具備的能力之一。
我們還希望平臺具有故障恢復(fù)的能力。做完實驗后,現(xiàn)場環(huán)境就能夠及時恢復(fù)。
3)實驗后
實驗結(jié)束之后,平臺需要輸出實驗報告。實驗發(fā)現(xiàn)的問題需要通過實驗報告呈現(xiàn)出來。我們要對實驗報告進(jìn)行匯總分析,看是否發(fā)現(xiàn)了新問題、新隱患或新知識。我們得到結(jié)果要去分析,發(fā)現(xiàn)問題要去跟進(jìn),落實到人將問題處理掉。
我們還要進(jìn)行大量的統(tǒng)計分析。例如游戲的的質(zhì)量評分如何,英雄聯(lián)盟手游最近上線,通過統(tǒng)計分析,它的得分非常高,穩(wěn)定性和可靠性也非常好。
2、故障原子
混沌實驗平臺最核心的能力是故障注入,人為地制造各種各樣的故障與破壞。
騰訊游戲主要使用自研的混沌工程引擎,以及引用一些其它的業(yè)界開源引擎。我們引用了Chaos Mesh等引擎來對我們的實驗做集成。有了這些底層的引擎后,我們就獲得了許多故障原子。
- 存儲層面:Io高負(fù)載、Io延遲、Io錯誤、文件句柄耗盡等故障原子。
- 計算資源層面:CPU負(fù)載高、滿載等故障原子。
- 網(wǎng)絡(luò)層面:時延、丟包、亂序、重復(fù),帶寬滿,端口耗盡等故障原子。
- 節(jié)點/容器層面:關(guān)機一分鐘、刪pod、殺容器、殺pod等故障原子。
- 應(yīng)用層面:進(jìn)程將死、進(jìn)程崩潰、HTTP協(xié)議狀態(tài)碼錯誤等故障原子。
- 自定義:可以制定一個機器腳本,例如自己寫一個shell腳本、Python腳本,或者go二進(jìn)制包。上傳這個包,我們可以對其注入故障,這樣就可能對一些特殊的業(yè)務(wù)場景做定制化的開發(fā)。
基本上有了這些故障,我們在生產(chǎn)環(huán)境中或?qū)嶒灜h(huán)境下,就可以通過隨意的組合,模擬出現(xiàn)網(wǎng)各種各樣的故障。
3、應(yīng)用故障注入
推薦一下Chaos Mesh產(chǎn)品,它專門為K8S場景設(shè)計,可以模擬包括pod、網(wǎng)絡(luò)、Io、內(nèi)核等多種各層面的故障。我們使用了Chaos Mesh產(chǎn)品一年多,使用效果不錯。有了這個工具,我們在K8S環(huán)境下就可以直接注入故障,成本較低。
我們在實驗過程中發(fā)現(xiàn),即使有了計算資源、網(wǎng)絡(luò)等基礎(chǔ)層面的故障原子,也不能完全滿足需求。我們有時候要經(jīng)常對服務(wù)做一些應(yīng)用層面的故障原子。因為騰訊游戲的服務(wù)大部分走HTTPS協(xié)議,有時可能要去對服務(wù)的某一個路徑、某一批用戶或某一個大區(qū)的玩家等做故障實驗,這時就要通過網(wǎng)關(guān)MESH這一流程來做這個實驗。
我們服務(wù)架構(gòu)上面的每一個服務(wù)前面都有一個網(wǎng)關(guān),所有流量都會經(jīng)過網(wǎng)關(guān)流到真正的后端服務(wù)。對網(wǎng)關(guān)下發(fā)指定或者遙測等是通過統(tǒng)一的平臺實現(xiàn)的。
所有流量都會經(jīng)過網(wǎng)關(guān),那么網(wǎng)關(guān)就可以對流量做治理。很多公司應(yīng)該都會采用這種架構(gòu)對流量做治理,我們可以做流量的限速、降級、熔斷等。除此之外,我們還可以對流量做一些劫持、二次處理,這也就是混沌工程可以做的事情。
具體來說,流量從網(wǎng)關(guān)進(jìn)來后,我們可以修改它的狀態(tài)碼。例如本來的狀態(tài)碼是200,我們修改為4xx;或者可以注入一個延遲,把這個服務(wù)sleep一段時間之后再返回;再者我們還可以對Header做一些注入,對剝離做修改等,甚至對帶寬做限制、對用戶做過濾。這樣的話混沌工程就可以在應(yīng)用層面對玩家做故障注入了。
用傳統(tǒng)的引擎做應(yīng)用層面的故障注入成本很高,但是有了網(wǎng)關(guān)MESH能力,我們做故障注入的成本會非常低。
舉個例子,我們想對某一個或某一批玩家做故障注入,配置起來很簡單。我們只需要在平臺上選擇我們的實驗對象,配置好規(guī)則并提交,實驗就可以馬上生效了。
這時我們就可以在客戶端上,體驗故障注入是否有效果,以及對玩家有何影響。這樣做故障只影響到這一批玩家,對現(xiàn)網(wǎng)其他的玩家沒有任何影響,我們的爆炸半徑就可以得到很好的控制,故障范圍、故障風(fēng)險也可以得到一定把控,這也是網(wǎng)關(guān)MESH能夠帶來的收益。
4、實驗編排
毫無疑問,故障注入是混沌工程的核心能力,但除了故障注入外,混沌實驗平臺還應(yīng)該具備一邊做實驗一邊觀察效果的能力。
平臺需要能夠編排?,F(xiàn)網(wǎng)的實驗可能非常復(fù)雜,故障可能通過各種實驗場景的組合才會復(fù)現(xiàn)或模擬出來,還有我們的實驗?zāi)繕?biāo)、靶點、實驗對象,我們要有一個地方將實驗配置集成管控起來。
例如上圖中,我們想把CPU燒到80%并持續(xù)10分鐘,就可以通過這個表單提交。我們想延遲一秒并持續(xù)10分鐘,也可以通過這個表單提交。
這樣的話我們的實驗?zāi)繕?biāo)、實驗配置以及我們想要觀察的穩(wěn)態(tài)指標(biāo)(做實驗過程中想要同步觀察的指標(biāo)),都可以通過編排的方式串聯(lián)起來。編排能力可以大大提高我們的實驗效率,這個能力也是混沌工程實驗平臺必備的能力。
5、實驗觀測
有了編排,我們還希望在真正做實驗時同步觀察實驗的效果。這個實驗效果可能是來自一些基礎(chǔ)監(jiān)控平臺的指標(biāo),例如最基礎(chǔ)的一些IaaS層的監(jiān)控;也可能是QPS、延遲、同時在線人數(shù)等相關(guān)的一些業(yè)務(wù)特性指標(biāo),這些指標(biāo)混沌平臺是沒有的。
在騰訊游戲,我們將基礎(chǔ)監(jiān)控以及業(yè)務(wù)的一些特性監(jiān)控打通、對接、集成,這些已經(jīng)有的指標(biāo)可以直接集成進(jìn)來,沒有的我們也提供了普通標(biāo)識,用戶可以直接把指標(biāo)暴露出來,在平臺配置采集規(guī)則,這樣我們可以主動把用戶的業(yè)務(wù)指標(biāo)拉過來,從而實現(xiàn)在平臺做實驗時,同步觀察這個實驗對用戶服務(wù)的影響。這一方法實現(xiàn)了整個指標(biāo)透明化,是實驗觀測所獲得的收益。
6、實驗報告
做混沌工程,實際上有些類似于去醫(yī)院做體檢。去醫(yī)院做體檢之后,醫(yī)院一般都會輸出一個記錄身體各種指標(biāo)的報告。這些身體指標(biāo)有沒有超過健康的閾值,報告中都會有標(biāo)記。醫(yī)生發(fā)現(xiàn)參考值過高時,會提醒我們在相關(guān)方面多加注意,并提供一些建議,到下次體檢時具體關(guān)注這些指標(biāo)有沒有改善。
做一次體檢,我們最想獲得的就是這個報告,這個報告能夠體現(xiàn)出我們做體檢的收益。做混沌工程也一樣,我們做了混沌工程實驗,到底有沒有收益,有沒有發(fā)現(xiàn)問題,要在報告中體現(xiàn)出來。
我們希望這個平臺能夠?qū)⒄麄€實驗過程中的一些歷史數(shù)據(jù)、編排數(shù)據(jù)、穩(wěn)態(tài)指標(biāo)等數(shù)據(jù)永久持續(xù)化存儲下來,這樣的話,我們后續(xù)就可以隨時回溯我們這個實驗的過程數(shù)據(jù)。
有了數(shù)據(jù)之后,我們希望能夠分析這些數(shù)據(jù),發(fā)現(xiàn)問題。發(fā)現(xiàn)問題才是做混沌工程的目標(biāo)。發(fā)現(xiàn)問題后,我們希望能夠?qū)栴}進(jìn)行分類,并把問題落實到具體的責(zé)任人,讓他來跟進(jìn)解決。這樣的話,我們這個實驗才會實現(xiàn)很好的閉環(huán),也就是上文中提到的核心理念。不斷地發(fā)現(xiàn)問題、解決問題,并且形成循環(huán),這才是我們實驗的初衷。
7、收益
做了這么多,有了故障原子、實驗編排、實驗報告,有什么收益呢?
大家也知道,沒有提出混沌工程前,我們也會進(jìn)行一些容災(zāi)演練,好像沒有混沌平臺也能夠做這件事情。
經(jīng)過實驗,我們總結(jié)的收益點如上圖所示。
沒有混沌平臺的時候,我們?nèi)プ鰧嶒?,要自己寫腳本、寫工具、開發(fā)工具、測試、編排,一個復(fù)雜場景可能要自己去串聯(lián)。我們還要去執(zhí)行、觀察效果,效果數(shù)據(jù)可能分散在各種平臺,我們可能要不斷地通過在各種平臺之間切換,才能看到實驗的效果數(shù)據(jù)。一個故障演練下來至少是小時級以上的。
有了混沌實驗平臺,我們做實驗的效率大大提升了。我們編排一個實驗,編排它的靶點、實驗配置、觀測指標(biāo),幾乎可以做到分鐘級。幾分鐘時間,我們就可以把整個實驗編排出來,然后一邊做實驗一邊觀察效果,同時去發(fā)現(xiàn)問題、分析問題,大大縮短了實驗時間。
總結(jié)來說,降本增效就是做混沌平臺收益點。
三、混沌工程實踐
有了平臺大家不一定使用,我們要進(jìn)行實踐。
實踐的目標(biāo)非常清晰,要提升我們基礎(chǔ)設(shè)施、平臺、業(yè)務(wù)與應(yīng)用的可用性與穩(wěn)定性,要檢驗組織的協(xié)同效率,檢驗組織的協(xié)作方式、流程是否合理。
我們有以下幾個實踐要點:
- 控制風(fēng)險。
- 自動化實驗。我們現(xiàn)在很多業(yè)務(wù)的版本迭代速度非???,如果每發(fā)布一個版本,我們都要去跟進(jìn)、做實驗,會產(chǎn)生極高的人工成本,所以我們需要去做一些自動化的實驗。
- 紅藍(lán)對抗。提升組織團隊的協(xié)作能力。
1、控制風(fēng)險
做混沌工程會對業(yè)務(wù)和系統(tǒng)產(chǎn)生破壞性。我們做混沌工程目的是通過主動輸出故障,發(fā)現(xiàn)問題、解決問題,所以風(fēng)險控制是非常必要的。
一些教材或者文章都推薦混沌工程要直接上生產(chǎn),這個理論沒有錯,實驗全部在生產(chǎn)環(huán)境上做,產(chǎn)生的報告是非常有說服力的。但在生產(chǎn)環(huán)境做實驗,會帶來很高的風(fēng)險,也會產(chǎn)生極高的人力成本。如果哪一方?jīng)]參與,他的服務(wù)出問題,可能就會導(dǎo)致現(xiàn)網(wǎng)的嚴(yán)重事故。實驗一旦超出我們預(yù)想的情況,可能會造成業(yè)務(wù)方不可接受的損失。
1)風(fēng)險控制
騰訊游戲的實踐是每半年左右,在生產(chǎn)環(huán)境中做一次集中化的大規(guī)?;煦缪菥殹8嗟墓收鲜窃跍?zhǔn)生產(chǎn)環(huán)境(預(yù)發(fā)布環(huán)境)中進(jìn)行。因為預(yù)發(fā)布環(huán)境與生產(chǎn)環(huán)境的配置基本相當(dāng),所以我們在準(zhǔn)生產(chǎn)環(huán)境做實驗,數(shù)據(jù)的可靠性也有一定保證。
實踐過程中,我們發(fā)現(xiàn)很多問題都是在預(yù)發(fā)布環(huán)境中提前暴露的。我們在預(yù)發(fā)布環(huán)境發(fā)現(xiàn)了許多問題,這些問題都得到了提前的規(guī)避解決。
例如,游戲上都有體驗服大區(qū),我們在體驗服中做實驗只影響體驗服的玩家,不會影響到現(xiàn)網(wǎng)的大批量玩家。所以一旦出問題,體驗服的玩家會反映服務(wù)有問題,我們就可以立馬發(fā)現(xiàn)系統(tǒng)的一些隱患。所以,我們很多的實踐都在預(yù)發(fā)布環(huán)境中進(jìn)行。我們還進(jìn)行了自動化的實踐,每次版本發(fā)布,我們會自動去執(zhí)行混沌演練。
騰訊一般會有專門的演習(xí)環(huán)境,這個演習(xí)環(huán)境是跟現(xiàn)網(wǎng)完全隔離的,所有的人都可以在上面隨時隨地地發(fā)起混沌演練。這個演習(xí)環(huán)境非常方便我們的開發(fā)、測試以及運維同學(xué)去做演練。
目前來看,通過各個環(huán)境的管控,我們實驗風(fēng)險得到了較好的控制。
2)實驗防護(hù)
光有實驗風(fēng)險的控制是不夠的,我們希望有防護(hù)兜底的能力,包括我們的實驗防護(hù)能力。
實驗防護(hù)方面,我們的做法是基于穩(wěn)態(tài)指標(biāo)配置閾值。我們會采集業(yè)務(wù)的穩(wěn)態(tài)指標(biāo),如果沒有的話,我們會提供Prometheus,讓用戶主動上報穩(wěn)態(tài)指標(biāo)。我們基于穩(wěn)態(tài)指標(biāo)配置閾值,指標(biāo)達(dá)到閾值后會觸發(fā)告警,收到告警后會觸發(fā)一個鉤子,鉤子會終止實驗。這樣的話,在極端情況下,實驗就能夠做到自動終止,從而有效控制風(fēng)險。
2、自動化實驗
上文中提到過游戲的版本,包括游戲商業(yè)化、活動部分,版本發(fā)布都非???,可能隔一兩天就會發(fā)布一個活動。如果每發(fā)布一個活動或者每迭代一個版本都要做一次混沌實驗,成本會很高。所以我們把混沌實驗和我們的DevOps流水線集成起來,開發(fā)同學(xué)每發(fā)布一次版本都會自動調(diào)用混沌平臺的套餐去執(zhí)行。這樣的話,無論每次在何時何地發(fā)布版本,實驗都會被自動地引用執(zhí)行,大大降低了我們實驗的人力成本,提高了實驗效率。
3、紅藍(lán)對抗
做混沌工程的一個初衷是提升團隊的響應(yīng)、協(xié)同效率,也就是我們組織的戰(zhàn)斗力。
事實上,一個團隊想提高自己的效率是缺乏動力的。騰訊游戲的做法是進(jìn)行紅藍(lán)對抗,一個團隊對另外一個團隊的服務(wù)做攻擊、對抗,看這個團隊的服務(wù)可靠性到底如何,然后把它的攻擊結(jié)果在小的范圍內(nèi)公示出來,這樣我們防守方自己的缺陷就會提前被暴露。紅藍(lán)對抗把混沌工程有效地在團隊之間進(jìn)行了落地。將這種方式運轉(zhuǎn)起來,可以取得較好的收益。
4、實驗內(nèi)容
我們做了一年多的混沌實驗,那么到底做了哪些實驗?zāi)??下圖中抽象了一些具體的實驗項目。
每個業(yè)務(wù)、系統(tǒng)都有自己的特性,上圖中只是一些比較通用的項目。
1)單點故障
通過殺一臺機器、殺pod、殺容器,檢測故障隔離、準(zhǔn)備切換、健康探針、探測等是否有效。
2)告警驗證
通過實驗觸發(fā)告警,看告警能不能被有效地處理,來檢測我們組織的響應(yīng)機制。
3)強弱依賴
通過混沌工程發(fā)現(xiàn)強弱依賴不合理的關(guān)系。我們有時候會發(fā)現(xiàn),一個配置管理端的故障可能導(dǎo)致現(xiàn)網(wǎng)的玩家訪問出現(xiàn)問題,控制面影響到數(shù)據(jù)面極不合理。我們通過混沌工程可以檢測到許多這種不合理的依賴關(guān)系,從而驗證我們服務(wù)架構(gòu)的合理性。
4)網(wǎng)絡(luò)抖動
我們會經(jīng)常在現(xiàn)網(wǎng)做一些網(wǎng)絡(luò)抖動實驗。用戶訪問我們的服務(wù),鏈路是很長的,出現(xiàn)一些丟包、抖動是非常普遍的。所以測試我們的客戶端或者整個架構(gòu),到底能不能容忍網(wǎng)絡(luò)上的一些微小抖動,有沒有快速失敗、重試的策略,也是我們演練的一個重要目標(biāo)。
5)機房故障
機房出現(xiàn)故障雖然是小概率事件,但還是有可能出現(xiàn)整個機房宕機、不可用的情況,我們要通過混沌工程去做一些整個機房不可用的實驗,驗證我們的服務(wù)是否具有異地容災(zāi)的能力。
6)第三方故障
我們會使用第三方服務(wù),它的質(zhì)量可能不受我們掌控。這些第三方服務(wù)是否具備降級、熔斷這樣的一些策略,不可控的話,本地是否有緩存等,這些都可以通過混沌工程來驗證。
7)過載保護(hù)
一些黑產(chǎn)可能會對我們的服務(wù)進(jìn)行一些惡意攻擊,我們的混沌工程可以模擬攻擊,主動去檢測我們的服務(wù)是否具備防刷、流控等能力。
以上是比較通用的一些實驗內(nèi)容。當(dāng)然每種業(yè)務(wù)都有自己的一些特性,這里不再一一贅述。互聯(lián)網(wǎng)行業(yè)變化是永恒的,我們的架構(gòu)版本一直在變化,我們這個平臺也在不斷迭代。上述只是我們最近一年的一些初步的實踐經(jīng)驗。
>>>>
Q&A
Q:混沌工程不斷地去制造故障,監(jiān)控告警會不斷被觸發(fā),你們是怎樣在很短的時間內(nèi)終止操作的?不可控故障馬上自愈、監(jiān)控馬上恢復(fù)的流程可以分享一下嗎?
A:這個點就是上面提到的實驗防護(hù)能力。我們平臺會采集包括業(yè)務(wù)的 QPS、延遲、同時在線人數(shù)等穩(wěn)態(tài)指標(biāo)。用戶在做實驗的時候,可以基于這些指標(biāo)去配置告警閾值。比如我們的同時在線人數(shù)下降了20%,達(dá)到閾值,我們的故障防護(hù)策略就會生效。當(dāng)然它不是立即的,可能會經(jīng)過兩個或者三個周期,比如連續(xù)三個周期之后,它才會真正地觸發(fā)這一次實驗的防護(hù),把實驗自動停止掉。