偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

迄今見過最易懂的混沌工程落地實(shí)踐,針不戳!

開發(fā) 前端
下面介紹一下字節(jié)跳動在混沌工程實(shí)踐過程中的一個關(guān)鍵階段:場景化主動實(shí)驗(yàn)。希望本文可以幫助大家加深對混沌工程價值的了解,對設(shè)計(jì)混沌工程實(shí)驗(yàn)、落地混沌工程建設(shè)提供更多的思路。

一、背景

從 2010 年 Netflix 上線 Chaos Mokey 的第一個版本到現(xiàn)在,雖然混沌工程發(fā)展已歷時十年,但其實(shí)只在少數(shù)大廠里面有較成熟的落地,對絕大部分研發(fā)同學(xué)來說,混沌工程還是一個比較陌生的領(lǐng)域。

分布式和微服務(wù)化已經(jīng)成為主流的系統(tǒng)架構(gòu)設(shè)計(jì)方案,大規(guī)模分布式系統(tǒng)的可用性保障能力越來越成為關(guān)注的重點(diǎn)?;煦绻こ桃查_始如雨后春筍般在各大企業(yè)內(nèi)部萌芽生長,但大部分還處于初期的探索階段,在實(shí)踐過程中也遇到了這樣或那樣的問題,有技術(shù)上也有認(rèn)知層面上的,這些問題難免會對混沌工程的快速落地產(chǎn)生阻力。

下面介紹一下字節(jié)跳動在混沌工程實(shí)踐過程中的一個關(guān)鍵階段:場景化主動實(shí)驗(yàn)。希望本文可以幫助大家加深對混沌工程價值的了解,對設(shè)計(jì)混沌工程實(shí)驗(yàn)、落地混沌工程建設(shè)提供更多的思路。

二、什么是場景化主動實(shí)驗(yàn)

混沌工程的高級原則要求能夠在生產(chǎn)環(huán)境自動的運(yùn)行實(shí)驗(yàn),這個目標(biāo)并不是一蹴而就的。

根據(jù)混沌工程成熟度模型(CMM)[4]說明,要分別從“熟練度”和“應(yīng)用度”兩個維度同時進(jìn)行建設(shè)。其中,“熟練度”體現(xiàn)了混沌工程系統(tǒng)的有效性和安全性,“應(yīng)用度”衡量了混沌工程實(shí)驗(yàn)覆蓋的廣度和深度。在混沌工程建設(shè)的中前期,這兩點(diǎn)都是混沌工程成功落地的關(guān)鍵路徑。

在混沌工程的初級階段,通常都會建設(shè)一個故障注入測試平臺(FIT,F(xiàn)ault Inject Testing),集成一些常見的故障場景或異常事件的模擬能力,由業(yè)務(wù)或 QA 同學(xué)設(shè)計(jì)并執(zhí)行實(shí)驗(yàn)來驗(yàn)證系統(tǒng)的韌性能力。

在這個階段,基礎(chǔ)架構(gòu)和業(yè)務(wù)系統(tǒng)的實(shí)現(xiàn)都可能處于比較粗放狀態(tài),混沌工程平臺的故障注入能力需要兼容各種業(yè)務(wù)架構(gòu)的實(shí)現(xiàn)方案和軟硬件環(huán)境,執(zhí)行實(shí)驗(yàn)時,業(yè)務(wù)同學(xué)不僅要設(shè)計(jì)實(shí)驗(yàn)的故障場景(機(jī)房網(wǎng)絡(luò)故障、下游服務(wù)宕機(jī)等)、配置演練環(huán)境(目標(biāo)服務(wù)、實(shí)驗(yàn)集群等控制實(shí)驗(yàn)的爆炸半徑),還要找到能夠描述實(shí)驗(yàn)時服務(wù)狀態(tài)的穩(wěn)定性的指標(biāo)(如 metrics、日志或告警等),然后手動啟動實(shí)驗(yàn),執(zhí)行人還要不停的觀察穩(wěn)定性指標(biāo)的變化,判斷系統(tǒng)的容災(zāi)邏輯或彈性策略是否被正確觸發(fā)、業(yè)務(wù)系統(tǒng)的表現(xiàn)是否符合預(yù)期等等。如果在執(zhí)行過程中發(fā)現(xiàn)異常,需要立刻終止實(shí)驗(yàn),收斂實(shí)驗(yàn)影響。

整個實(shí)驗(yàn)過程的人力成本較高,實(shí)驗(yàn)的操作門檻也較高,再加上這個階段業(yè)務(wù)同學(xué)對混沌工程價值和理念的認(rèn)知還處于較初級水平,很難會主動對自己的服務(wù)設(shè)計(jì)實(shí)驗(yàn),更無法保證實(shí)驗(yàn)的常態(tài)化執(zhí)行。因此,混沌工程實(shí)驗(yàn)的時效性和業(yè)務(wù)系統(tǒng)的彈性容災(zāi)策略持續(xù)有效就比較難以保證了。

如何突破這個階段、成功抵達(dá)混沌工程的終極目標(biāo)呢?

通過不斷的思考,我們認(rèn)為混沌工程建設(shè)需要一個過渡階段,即場景化主動演練。

所謂場景化主動演練,就是在明確混沌工程的終極建設(shè)目標(biāo)的前提下,以終為始,分階段去設(shè)計(jì)混沌工程的實(shí)驗(yàn)標(biāo)準(zhǔn)、定義技術(shù)規(guī)范,搭配工程化能力,逐步將人和業(yè)務(wù)引導(dǎo)到混沌工程建設(shè)的高速公路上,共同推進(jìn) CMM 模型的熟練度和應(yīng)用度。

所以,場景化主動實(shí)驗(yàn)是通向混沌工程自動化建設(shè)的關(guān)鍵路徑。

 

混沌工程演變圖

 

三、如何建設(shè)場景化主動實(shí)驗(yàn)

首先需要明確混沌工程的最終目標(biāo),以終為始,反推當(dāng)前階段應(yīng)該建設(shè)什么樣的技術(shù)規(guī)范和標(biāo)準(zhǔn)能力。

然后,根據(jù)業(yè)務(wù)當(dāng)前的基礎(chǔ)架構(gòu)現(xiàn)狀和實(shí)驗(yàn)訴求構(gòu)建一個通用的實(shí)驗(yàn)場景,由混沌工程平臺方在保證實(shí)驗(yàn)風(fēng)險可控的條件下主動對業(yè)務(wù)系統(tǒng)進(jìn)行實(shí)驗(yàn)。這樣,在滿足業(yè)務(wù)需要的同時又可以推動相關(guān)技術(shù)規(guī)范和基礎(chǔ)能力的建設(shè),而且對業(yè)務(wù)同學(xué)的資源依賴較少。

以字節(jié)跳動為例,要實(shí)現(xiàn)在生產(chǎn)環(huán)境自動的執(zhí)行可控的混沌工程實(shí)驗(yàn),當(dāng)前階段應(yīng)該具備的能力包括:

  • 能夠在生產(chǎn)環(huán)境持續(xù)的運(yùn)行實(shí)驗(yàn)并具備實(shí)驗(yàn)爆炸半徑的控制能力
  • 選定一個命中業(yè)務(wù)痛點(diǎn)且通用的實(shí)驗(yàn)場景,構(gòu)建通用的自動化執(zhí)行實(shí)驗(yàn)?zāi)芰?/li>
  • 能夠描述服務(wù)穩(wěn)定性的通用指標(biāo)
  • 自動檢測穩(wěn)定性指標(biāo)的變化
  • 自動終止實(shí)驗(yàn)【在實(shí)驗(yàn)爆炸半徑可控的情況下,非必須】

 

場景主動實(shí)驗(yàn)?zāi)芰ν負(fù)鋱D

 

四、主動實(shí)驗(yàn)

FIT 平臺需要業(yè)務(wù)同學(xué)分析業(yè)務(wù)容災(zāi)場景并制定實(shí)驗(yàn),然后執(zhí)行實(shí)驗(yàn)進(jìn)行驗(yàn)證,混沌工程平臺方只是給予一些技術(shù)支持和建議。在業(yè)務(wù)同學(xué)對混沌工程認(rèn)知度不高情況下,實(shí)驗(yàn)的主動性、覆蓋率、時效性都很難保證,如果再想讓業(yè)務(wù)同學(xué)去配合建設(shè)一些混沌工程的基礎(chǔ)能力難度就可想而知。

轉(zhuǎn)換一下思路,將業(yè)務(wù)主動改為平臺主動!由混沌平臺針對業(yè)務(wù)系統(tǒng)的某個場景主動執(zhí)行混動實(shí)驗(yàn)來驗(yàn)證服務(wù)的彈性能力,業(yè)務(wù)同學(xué)只需關(guān)注實(shí)驗(yàn)結(jié)果。只要實(shí)驗(yàn)場景契合業(yè)務(wù)痛點(diǎn)、實(shí)驗(yàn)結(jié)果對業(yè)務(wù)構(gòu)建彈性系統(tǒng)有意義,業(yè)務(wù)同學(xué)自然會認(rèn)可混沌工程的價值,也會更加積極的參與混沌工程實(shí)驗(yàn)和混沌工程的基礎(chǔ)建設(shè)。

五、實(shí)驗(yàn)場景

混沌工程的價值是發(fā)現(xiàn)業(yè)務(wù)系統(tǒng)中潛在薄弱環(huán)節(jié),提升業(yè)務(wù)系統(tǒng)韌性能力,即服務(wù)可用性和穩(wěn)定性,所以主動實(shí)驗(yàn)場景也應(yīng)該滿足這個前提。

在字節(jié)跳動,主動實(shí)驗(yàn)落地的第一個場景是驗(yàn)證服務(wù)調(diào)用鏈的強(qiáng)弱依賴關(guān)系。所謂強(qiáng)弱依賴關(guān)系,就是當(dāng)訪問的下游服務(wù)異常(服務(wù)宕機(jī)、響應(yīng)超時、接口返回失敗等)時,調(diào)用方的穩(wěn)定性和可用性是否會受到影響。例如,查詢緩存 miss 或失敗后可以繼續(xù)回源訪問數(shù)據(jù)庫,緩存的問題并不會影響服務(wù)可用性,這個緩存就是個弱依賴。

為什么要選擇這個場景呢?公司的很多線上運(yùn)營事故都是因?yàn)椴缓侠淼囊蕾囮P(guān)系導(dǎo)致的。字節(jié)跳動有很多高 QPS 的海量服務(wù)系統(tǒng),為了保證用戶體驗(yàn),對高可用高穩(wěn)定性的要求很高,會通過各種緩存、服務(wù)兜底、數(shù)據(jù)兜底等容災(zāi)策略來減少強(qiáng)依賴服務(wù)的數(shù)量。另外,在字節(jié)跳動的服務(wù)治理體系中,會根據(jù)服務(wù)間的強(qiáng)弱依賴調(diào)用關(guān)系為某些故障場景預(yù)設(shè)自動容災(zāi)降級的策略。比如,當(dāng)服務(wù)治理系統(tǒng)檢測到系統(tǒng)負(fù)載過高時,能夠自動對弱依賴的下游執(zhí)行降級,通過 FailFast 來緩解系統(tǒng)的負(fù)載。因此,業(yè)務(wù)負(fù)責(zé)人通常都會比較關(guān)注服務(wù)的強(qiáng)弱依賴關(guān)系。

 

服務(wù)依賴調(diào)用鏈

 

六、自動化

主動設(shè)計(jì)和執(zhí)行實(shí)驗(yàn)意味著將業(yè)務(wù)側(cè)的人力成本轉(zhuǎn)嫁給了混沌平臺,混沌平臺必須要借助通用化、自動化的執(zhí)行能力來降低人力成本。需要強(qiáng)調(diào)的是,這里的通用化和自動化一定是和混沌工程的終極目標(biāo)一致的,能夠承載過渡階段的職責(zé)。

可以從混沌工程的高級原則[2]進(jìn)行剖析:

  • 服務(wù)的穩(wěn)定狀態(tài)假設(shè):找出能夠描述服務(wù)穩(wěn)定狀態(tài)的通用指標(biāo),可以是 metrics、告警等。執(zhí)行實(shí)驗(yàn)前,這些穩(wěn)定狀態(tài)指標(biāo)應(yīng)處于穩(wěn)定狀態(tài);執(zhí)行實(shí)驗(yàn)時,如果服務(wù)的可用性或穩(wěn)定性受到影響時,穩(wěn)定性指標(biāo)會發(fā)生變化,比如 metrics 曲線的劇烈波動、觸發(fā)告警等;當(dāng)實(shí)驗(yàn)結(jié)束后,穩(wěn)定性指標(biāo)又會恢復(fù)到之前的穩(wěn)定狀態(tài)。如果執(zhí)行實(shí)驗(yàn)時,穩(wěn)定狀態(tài)假設(shè)發(fā)生了變化,說明這是個強(qiáng)依賴。
  • 生產(chǎn)環(huán)境運(yùn)行實(shí)驗(yàn):在風(fēng)險可控的條件下推薦在生產(chǎn)環(huán)境運(yùn)行實(shí)驗(yàn),因?yàn)橄到y(tǒng)的行為會根據(jù)環(huán)境和流量模式的不同而有所不同,系統(tǒng)用戶也不會像你所預(yù)期的那樣與你的系統(tǒng)進(jìn)行交互。當(dāng)然,在生產(chǎn)環(huán)境執(zhí)行混沌工程實(shí)驗(yàn)很可能是有損的,為了避免對用戶體驗(yàn)產(chǎn)生較大影響,一定要控制好實(shí)驗(yàn)的爆炸半徑,比如篩選出少量的實(shí)驗(yàn)流量,這就要求混沌平臺具備實(shí)驗(yàn)流量篩選與調(diào)度的能力。
  • 多樣化現(xiàn)實(shí)世界事件:也就是各種故障的模擬能力。因?yàn)槭菆鼍盎瘜?shí)驗(yàn),所以對多樣化的訴求倒不像 FIT 那樣強(qiáng)烈。
  • 最小化“爆炸半徑”:如果選擇在線上環(huán)境執(zhí)行實(shí)驗(yàn),需要具備篩選實(shí)驗(yàn)流量的能力,即篩選出滿足實(shí)驗(yàn)所需的最小流量即可,嚴(yán)格控制“爆炸”的影響范圍。
  • 持續(xù)自動化運(yùn)行實(shí)驗(yàn):通過工程化能力將實(shí)驗(yàn)?zāi)繕?biāo)過濾、實(shí)驗(yàn)流量篩選、執(zhí)行實(shí)驗(yàn)、穩(wěn)定狀態(tài)檢測、生成實(shí)驗(yàn)報(bào)表、實(shí)驗(yàn)結(jié)果反饋收集等流程串聯(lián)成自動化的執(zhí)行流,減少人力依賴。另外,混沌工程實(shí)驗(yàn)從來都不是一錘子買賣,應(yīng)該通過常態(tài)化的運(yùn)行實(shí)驗(yàn)來持續(xù)的保證服務(wù)的高可用和彈性機(jī)制符合預(yù)期。

 

混沌工程高級原則

 

七、服務(wù)標(biāo)準(zhǔn)與技術(shù)規(guī)范

一個公司內(nèi)部通常會有很多條產(chǎn)品線,每個產(chǎn)品又會包含很多微服務(wù),還會依賴到中臺服務(wù)或基礎(chǔ)組件,這些不同模塊的開發(fā)語言、服務(wù)框架、技術(shù)棧等可能五花八門。要想實(shí)現(xiàn)混沌工程通用化與自動化的能力,就必須制定一些通用的服務(wù)標(biāo)準(zhǔn)和技術(shù)規(guī)范。

混沌工程不僅需要了解業(yè)務(wù)系統(tǒng)當(dāng)前的技術(shù)棧,還要能夠預(yù)測未來的技術(shù)發(fā)展趨勢,幫助業(yè)務(wù)提前規(guī)劃切實(shí)可行的技術(shù)規(guī)范并協(xié)助進(jìn)行建設(shè)。

舉個例子,如何定義服務(wù)的穩(wěn)定狀態(tài)?

在字節(jié)跳動,我們以調(diào)用方視角定義了一個服務(wù)級別的 metrics 指標(biāo)來描述服務(wù)的穩(wěn)定性狀態(tài):

  • 被調(diào)方在響應(yīng)包中添加一個通用的 stability 字段來標(biāo)識本次請求的處理結(jié)果是否成功
  • 調(diào)用方從響應(yīng)包中解析出 stability 字段并上報(bào) metrics。某些異常場景(如被調(diào)方無響應(yīng))導(dǎo)致調(diào)用方無法解析出 stability 字段,會上報(bào)一個特殊的不穩(wěn)定值。

之所以要在響應(yīng)包中單獨(dú)定義一個 stability 字段是為了區(qū)分開系統(tǒng)錯誤和業(yè)務(wù)錯誤。因?yàn)闃I(yè)務(wù)錯誤并不表示服務(wù)出現(xiàn)了問題,所以我們更關(guān)注系統(tǒng)錯誤。舉個例子,刪除好友時被調(diào)方返回好友不存在的錯誤,這個錯誤并不表示系統(tǒng)的穩(wěn)定性出現(xiàn)了問題。

這個規(guī)范最開始只在字節(jié)跳動的少數(shù)核心服務(wù)中使用,其他服務(wù)通常都有自己的穩(wěn)定性指標(biāo),有些服務(wù)可能需要多個 metrics 指標(biāo)一起來描述服務(wù)的穩(wěn)定性。因?yàn)榛煦绻こ痰耐ㄓ眯砸髴?yīng)該具備一種通用的指標(biāo)來描述所有服務(wù)的穩(wěn)定性狀態(tài),經(jīng)過評估,我們將 stability metrics 作為了混沌工程的服務(wù)通用穩(wěn)定性描述指標(biāo),并計(jì)劃將其推廣到全公司的業(yè)務(wù),無論什么服務(wù)框架和開發(fā)語言都可以低成本的快速實(shí)現(xiàn)。

八、字節(jié)跳動的混沌工程概況

字節(jié)跳動的混沌工程體系主要包括場景化主動實(shí)驗(yàn)平臺、FIT 平臺和紅藍(lán)對抗平臺。

  • 場景化主動實(shí)驗(yàn)平臺:以平臺視角主動對業(yè)務(wù)發(fā)起混沌實(shí)驗(yàn),在驗(yàn)證業(yè)務(wù)系統(tǒng)的高可用和彈性能力的同時推動服務(wù)標(biāo)準(zhǔn)化和技術(shù)標(biāo)準(zhǔn)化建設(shè),提升混沌工程價值產(chǎn)出和影響力,為實(shí)現(xiàn)混沌工程的終極目標(biāo)做好鋪墊。
  • FIT 平臺:業(yè)務(wù)同學(xué)自助驗(yàn)證服務(wù)容災(zāi)機(jī)制的正確性,具備各種異常事件和故障模擬能力,提供了靈活的可視化實(shí)驗(yàn)編排能力。
  • 紅藍(lán)對抗平臺:以第三方視角,用系統(tǒng)化、隨機(jī)化的對抗實(shí)驗(yàn)方式來驗(yàn)證業(yè)務(wù)系統(tǒng)的高可用水平、監(jiān)控和告警的有效性,以及異常情況下人工介入時機(jī)、故障定位和故障恢復(fù)時間是否達(dá)標(biāo)等。

 

字節(jié)跳動混沌工程整體架構(gòu)圖

 

九、字節(jié)跳動的場景化主動實(shí)驗(yàn)建設(shè)方案

 

場景化主動實(shí)驗(yàn)的流程圖

 

1. 實(shí)驗(yàn)?zāi)繕?biāo)

同時推進(jìn)混沌工程建設(shè)的“熟練度”和“應(yīng)用度”,以生產(chǎn)環(huán)境自動執(zhí)行混沌工程實(shí)驗(yàn)為目標(biāo)構(gòu)建場景化主動實(shí)驗(yàn)的流程和標(biāo)準(zhǔn),實(shí)驗(yàn)場景選定為驗(yàn)證服務(wù)間的強(qiáng)弱依賴調(diào)用關(guān)系,可自動化運(yùn)行實(shí)驗(yàn),具備實(shí)驗(yàn)爆炸半徑控制能力。

通過驗(yàn)證強(qiáng)弱依賴調(diào)用關(guān)系的正確性反推服務(wù)的穩(wěn)定性指標(biāo)是否規(guī)范,推動穩(wěn)定性指標(biāo)的規(guī)范落地。

2. 實(shí)驗(yàn)對象

優(yōu)先在字節(jié)跳動的核心服務(wù)落地,樹立模范標(biāo)桿,然后擴(kuò)展到更大范圍。

3. 穩(wěn)定性指標(biāo)&波動自動化檢測

穩(wěn)定指標(biāo):

因?yàn)?stability metrics 已經(jīng)被多數(shù)核心服務(wù)當(dāng)做通用的穩(wěn)定性描述指標(biāo),所以場景化主動演練將 stability metrics 作為穩(wěn)定性描述的核心指標(biāo),同時輔助判斷接口成功 qps、失敗 qps、調(diào)用下游成功 qps、失敗 qps、pct99 等指標(biāo)。

指標(biāo)波動檢測方案:

自動化執(zhí)行實(shí)驗(yàn)要求混沌平臺能夠自動檢測穩(wěn)定性指標(biāo)的變動,因?yàn)椴煌?wù)的指標(biāo)曲線是不一樣的,同一服務(wù)的不同時刻的指標(biāo)曲線也是不一樣的,所以預(yù)置曲線波動的閾值上限的效果肯定不會太好。因此,在項(xiàng)目啟動階段我們就直接探索自動化的動態(tài)檢測 metrics 曲線波動的方案:

  • 一種是 Netflix 介紹的 AB test 方案,對比實(shí)驗(yàn)曲線和樣本曲線的差異
  • 一種是實(shí)時計(jì)算曲線的變化趨勢

由于方案一要求具備更靈活的流量篩選能力和實(shí)驗(yàn)環(huán)境隔離能力,當(dāng)前階段的建設(shè)難度和成本較高,所以我們選擇了方案二。

自動化波動檢測:

  • 起初我們參考線上報(bào)警的檢測方案:在執(zhí)行主動演練時,先通過機(jī)器學(xué)習(xí)為穩(wěn)定性指標(biāo)實(shí)時訓(xùn)練檢測模型,然后用模型實(shí)時檢測指標(biāo)曲線的變化。但是,因?yàn)橹鲃訉?shí)驗(yàn)的時間較短(一個實(shí)驗(yàn)節(jié)點(diǎn)只有 60~120 秒)、metrics 數(shù)據(jù)點(diǎn)稀疏(一個節(jié)點(diǎn)的實(shí)驗(yàn)時間只能采集到 2~4 個數(shù)據(jù)點(diǎn))、實(shí)驗(yàn)流量較低(爆炸半徑控制在 5~10 QPS),所以基于機(jī)器學(xué)習(xí)的檢測效果并不理想。

于是,我們改成組合多種統(tǒng)計(jì)規(guī)則的檢測算法,根據(jù)最近一段時間的歷史數(shù)據(jù)動態(tài)生成曲線的合理波動范圍閾值,然后在實(shí)驗(yàn)過程中實(shí)時檢測增量數(shù)據(jù)點(diǎn)的波動范圍。如果數(shù)據(jù)點(diǎn)超出了波動范圍閾值,就被判定為不穩(wěn)定。

經(jīng)過不斷調(diào)優(yōu),最終把這個場景下的指標(biāo)檢測效果優(yōu)化到了預(yù)期水平。

優(yōu)化方案:

  • 在實(shí)踐中,我們發(fā)現(xiàn)單個穩(wěn)定性指標(biāo)的曲線會偶現(xiàn)非預(yù)期的波動噪音,這些噪音會影響曲線檢測結(jié)果的準(zhǔn)確率。

于是,我們增加了一個噪音過濾策略:通過對比有相關(guān)性的多條穩(wěn)定性指標(biāo)曲線的波動相似度來過濾噪音。舉個例子,對下游依賴服務(wù)注入故障后,調(diào)用下游服務(wù)失敗的 metrics 曲線會上升,如果穩(wěn)定性指標(biāo)曲線也上升,而且這兩個曲線的變化趨勢也相似時,才會認(rèn)為曲線變化是受實(shí)驗(yàn)的影響。這個策略能夠比較有效的過濾掉偶現(xiàn)的曲線波動噪音。

具備了穩(wěn)定狀態(tài)的檢測能力,在場景化主動實(shí)驗(yàn)時就可以根據(jù)穩(wěn)定狀態(tài)的檢測結(jié)果自動推斷下游依賴服務(wù)是強(qiáng)依賴還是弱依賴。

4. 最小化爆炸半徑控制

為了保證實(shí)驗(yàn)的通用性和降低構(gòu)造實(shí)驗(yàn)流量的成本,我們選定在生產(chǎn)環(huán)境執(zhí)行實(shí)驗(yàn),因此最小化爆炸半徑控制能力就非常重要了。

字節(jié)跳動的生產(chǎn)環(huán)境有個用于服務(wù)灰度上線的金絲雀集群,在服務(wù)上線時會先升級這個集群來驗(yàn)證服務(wù)的正確性。這個集群的實(shí)例比較少,且支持通過修改集群權(quán)重來調(diào)整進(jìn)入集群流量。

經(jīng)過驗(yàn)證,實(shí)驗(yàn)流量在 5~10QPS 時就可以保證穩(wěn)定性 metrics 指標(biāo)檢測的準(zhǔn)確率。所以,執(zhí)行實(shí)驗(yàn)時,先從服務(wù)的金絲雀集群中隨機(jī)選擇一個實(shí)例作為實(shí)驗(yàn)?zāi)繕?biāo),計(jì)算實(shí)例流量與預(yù)期流量的偏差重新生成權(quán)重值,然后通過修改集群權(quán)重來調(diào)整實(shí)例流量。

5. 驗(yàn)證方式

字節(jié)跳動的微服務(wù)管理平臺通過聚合服務(wù)的 Trace 日志生成了服務(wù)間的調(diào)用拓?fù)鋱D,通過 OpenAPI 可以查詢到某個服務(wù)的所有一級下游依賴服務(wù)列表。

然后,逐個對下游依賴服務(wù)注入一段時間的宕機(jī)故障,同時檢測服務(wù)的穩(wěn)定性指標(biāo)是否出現(xiàn)異常波動來推斷下游依賴服務(wù)是強(qiáng)依賴還是弱依賴。

需要注意的是,因?yàn)槭侵饌€對下游依賴服務(wù)執(zhí)行實(shí)驗(yàn),為了避免前一個實(shí)驗(yàn)對下一個實(shí)驗(yàn)產(chǎn)生干擾,我們在兩次實(shí)驗(yàn)間增加了一個間隔時間,具體的間隔時長依賴所使用的指標(biāo)檢測算法。

6. 實(shí)驗(yàn)報(bào)告

實(shí)驗(yàn)執(zhí)行結(jié)束,平臺會將下游依賴服務(wù)的強(qiáng)弱依賴推斷結(jié)果、執(zhí)行上下文、穩(wěn)態(tài)指標(biāo)監(jiān)控視圖和檢測結(jié)果等匯總成一個實(shí)驗(yàn)報(bào)告發(fā)送給服務(wù)負(fù)責(zé)人。

服務(wù)負(fù)責(zé)人確認(rèn)實(shí)驗(yàn)報(bào)告,如果發(fā)現(xiàn)實(shí)驗(yàn)結(jié)果不符合預(yù)期,可以通過執(zhí)行上下文和監(jiān)控視圖等信息來輔助定位問題。同時,可以在實(shí)驗(yàn)報(bào)告中備注不符合預(yù)期原因、問題修復(fù)方案和修復(fù)進(jìn)度等,平臺會定時跟進(jìn)修復(fù)進(jìn)度并提醒服務(wù)負(fù)責(zé)人更新結(jié)果。

如果實(shí)驗(yàn)結(jié)果符合預(yù)期或問題已完成修復(fù),實(shí)驗(yàn)報(bào)告會進(jìn)入結(jié)單狀態(tài),同時記錄服務(wù)的強(qiáng)弱依賴推斷結(jié)果,并輸出給服務(wù)治理平臺,應(yīng)用于服務(wù)在線治理。

7. 實(shí)驗(yàn)結(jié)果自動保準(zhǔn)

業(yè)務(wù)系統(tǒng)是持續(xù)迭代的,下游依賴關(guān)系也是動態(tài)變化的。如果非預(yù)期的引入了強(qiáng)依賴,會給系統(tǒng)增加可用性風(fēng)險,因此場景化主動實(shí)驗(yàn)也需要常態(tài)化執(zhí)行。

已完成的主動實(shí)驗(yàn)都可以開啟試驗(yàn)結(jié)果自動保準(zhǔn),每隔一定時間會自動執(zhí)行實(shí)驗(yàn)驗(yàn)證下游依賴服務(wù)的強(qiáng)弱依賴關(guān)系,并與歷史實(shí)驗(yàn)結(jié)果進(jìn)行對比,并將變動的部分通過實(shí)驗(yàn)報(bào)告發(fā)送給服務(wù)負(fù)責(zé)人。

經(jīng)過服務(wù)負(fù)責(zé)人確認(rèn)后,新的驗(yàn)證結(jié)果會被更新到存儲和發(fā)送給服務(wù)治理平臺。

8. 完整的實(shí)驗(yàn)流程

 

場景化主動實(shí)驗(yàn)流程圖

 

十、場景化主動實(shí)驗(yàn)的價值

我們的驗(yàn)證范圍從核心服務(wù)開始、逐漸向外圍服務(wù)擴(kuò)張。

核心服務(wù)的驗(yàn)證結(jié)果基本符合預(yù)期,但還是有少數(shù)個案存在穩(wěn)定性指標(biāo)不規(guī)范、容災(zāi)邏輯不符合預(yù)期的情況。通過實(shí)驗(yàn)結(jié)果自動保準(zhǔn)機(jī)制,也多次及時發(fā)現(xiàn)因代碼變更所導(dǎo)致的容災(zāi)邏輯失效情況。

外圍服務(wù)驗(yàn)證出來的問題就比較多了,穩(wěn)定性指標(biāo)嚴(yán)重不規(guī)范導(dǎo)致無法評估服務(wù)的穩(wěn)定性、容災(zāi)邏輯覆蓋率低導(dǎo)致過多的強(qiáng)依賴使得服務(wù)可用性風(fēng)險較高等等。需要持續(xù)的推動業(yè)務(wù)進(jìn)行優(yōu)化升級,并給予一些高可用彈性系統(tǒng)的建設(shè)思路或參考方案。

十一、場景化主動實(shí)驗(yàn)近期工作

最近,我們新上線了在結(jié)果保準(zhǔn)時自動對弱依賴服務(wù)注入隨機(jī)故障來進(jìn)一步探索弱依賴的抗風(fēng)險能力。我們認(rèn)為弱依賴服務(wù)在任何故障場景下都不應(yīng)該影響服務(wù)的可用性。

另外,場景化主動實(shí)驗(yàn)還接入了服務(wù)的上線流程,在服務(wù)灰度上線時就觸發(fā)實(shí)驗(yàn),讓服務(wù)負(fù)責(zé)人能夠更及時的發(fā)現(xiàn)不符合預(yù)期的系統(tǒng)變更,如果有必要可立刻終止或回滾上線變更。

十二、場景化主動實(shí)驗(yàn)的未來規(guī)劃

通過場景化主動實(shí)驗(yàn),我們已具備持續(xù)保障字節(jié)跳動核心服務(wù)的穩(wěn)定性、指標(biāo)規(guī)范性、強(qiáng)弱依賴正確性,以及弱依賴的抗風(fēng)險能力等等。

接下來,我們會把場景化主動實(shí)驗(yàn)擴(kuò)展到更大服務(wù)范圍和更多業(yè)務(wù)場景,讓場景化主動實(shí)驗(yàn)發(fā)揮出更大的價值。

另外,我們也在思考打通服務(wù)上下游,從點(diǎn)到線再到面,以更高維度的系統(tǒng)視角來探索啟發(fā)式的智能混沌實(shí)驗(yàn)。

責(zé)任編輯:未麗燕 來源: 字節(jié)跳動技術(shù)團(tuán)隊(duì)
相關(guān)推薦

2020-08-11 10:40:31

裝飾者模式Java組件

2019-04-08 20:20:37

2022-07-29 15:46:19

測試混沌工程

2017-05-22 10:11:11

Hadoop HDFSJava APIHadoop

2024-03-26 00:54:42

預(yù)測模型數(shù)據(jù)

2023-06-26 00:19:13

2023-08-29 10:20:00

2022-06-23 09:47:50

混沌工程系統(tǒng)Kubernetes

2025-02-06 11:52:44

2023-09-04 11:32:28

數(shù)據(jù)診斷模型

2022-01-20 10:14:33

架構(gòu)軟件開發(fā)

2018-07-11 06:37:29

2024-01-09 16:15:33

2020-09-18 07:05:34

Java編程語言

2019-02-01 10:03:57

混沌工程分布式系統(tǒng)故障

2013-07-18 18:55:26

2025-04-14 00:00:00

DataAgentAgentAI

2025-05-09 02:22:00

數(shù)據(jù)指標(biāo)體系

2023-03-30 18:39:36

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號