<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          四步心法: 混沌工程不是靈丹妙藥 | IDCF

          共 4474字,需瀏覽 9分鐘

           ·

          2021-08-16 05:00

          來源:混沌工程實踐 作者:寧遠(yuǎn)之
          原文來源:Java Magazine
          原文作者:Mikolaj Pawlikowski
          標(biāo)題:Introduction to chaos engineering, Part 2: Four steps for disrupting complex systems

          混沌工程不是靈丹妙藥,不會自動修復(fù)系統(tǒng)和解決問題。市面上有很多工具可以更輕松地實施混沌實驗,但真正的困難在于對系統(tǒng)行為的預(yù)測。添加故障很容易,困難的是知道在哪里注入以及為什么要注入。

          換句話說,從混沌實驗中獲得的價值,取決于系統(tǒng)本身、對系統(tǒng)的理解深度以及建立可觀測性的程度。本文將分享有關(guān)混沌實驗的四步心法,幫助大家更快上手混沌工程。


          一、混沌工程不是什么?



          “混沌工程是在分布式系統(tǒng)上進(jìn)行實驗的學(xué)科, 目的是建立對系統(tǒng)抵御生產(chǎn)環(huán)境中失控條件的能力以及信心。” 

          但是,混沌工程不是靈丹妙藥,它不會自動修復(fù)您的系統(tǒng)。事實上,甚至可能并不適用于您的任何情況。

          一個常見的誤解,混沌工程就是用來隨機(jī)破壞系統(tǒng)。

          這可能和名字有關(guān)系,Chaos Monkey(混沌猴子)是第一個在該領(lǐng)域獲得業(yè)界聲譽(yù)的工具,它在很大程度上依賴于隨機(jī)性。隨機(jī)性是一種強(qiáng)大的工具,并且有時與模糊測試有重疊。

          但通常,添加失敗都很容易;困難的是知道在哪里注入以及為什么要注入。

          混沌工程不僅僅是 Chaos Monkey、ChaosToolkit、PowerfulSeal或 GitHub 上可用的眾多項目中的任何一個。

          這些工具可以更輕松地實施某些類型的實驗,但真正的困難在于學(xué)習(xí)如何批判性地看待系統(tǒng)并預(yù)測可能存在的脆弱點(diǎn)。

          另外,混沌工程不會取代已有的測試方法(例如單元或集成測試等),而是對已有測試方法的補(bǔ)充。

          在碰撞測試期間,安全氣囊可單獨(dú)測試,也可與汽車的其余部件一起進(jìn)行,混沌工程可以在不同的系統(tǒng)級別上運(yùn)行和測試。

          每個系統(tǒng)都不同,您需要深入了解系統(tǒng)的弱點(diǎn),才能提出有用的混沌實驗。

          換句話說,您從混沌實驗中獲得的價值將取決于您的系統(tǒng)、您對系統(tǒng)的理解程度、您想要測試系統(tǒng)的深度以及您建立可觀測性的程度。

          盡管混沌工程的獨(dú)特之處在于,其可應(yīng)用于生產(chǎn)系統(tǒng),但這并不是唯一場景。

          網(wǎng)上很多混沌工程的內(nèi)容似乎都圍繞著“生產(chǎn)中的破壞”,很可能是因為這是您能做的最激進(jìn)的事情,但同樣,這并不是混沌工程的全部——甚至不是它的主要關(guān)注點(diǎn)。

          因為,您也可以從混沌工程原理應(yīng)用在其他環(huán)境中獲得價值。

          最后,混沌工程并非源于數(shù)學(xué)和物理學(xué)中的混沌理論。


          二、什么是混沌實驗



          混沌工程實驗(簡稱混沌實驗)是混沌工程的基本組成,也是重要的表現(xiàn)形式,即通過一系列混沌實驗進(jìn)行混沌工程實踐。

          給定一個系統(tǒng)及其一定數(shù)量的系統(tǒng)特性,就可以設(shè)計實驗來觀察系統(tǒng)在發(fā)生故障時的種種表現(xiàn)。每個實驗都專注于證明或反駁實驗前對系統(tǒng)受故障影響的假設(shè)。

          2.1 混沌實驗的示例

          例如,假設(shè)您運(yùn)營著一個流行的網(wǎng)站,維護(hù)著整個數(shù)據(jù)中心。如何讓網(wǎng)站在斷電后仍可以正常運(yùn)行?比如,在數(shù)據(jù)中心中安裝了兩個獨(dú)立的電源。

          理論上,這可以解決這個問題——但在實踐中,仍存在著很多潛在的其他問題:也許電源之間的自動切換不起作用,亦或者網(wǎng)站的規(guī)模已經(jīng)大到,單一電源無法為所有服務(wù)器提供足夠的電力。

          除此之外,是否每三個月有請電力工程師進(jìn)行定期檢查?

          討論到這里,您會擔(dān)心。

          好在,我們有混沌工程這個技術(shù)。設(shè)計一個簡單的混沌實驗,用科學(xué)的方式,通過實驗說明當(dāng)其中一個電源出現(xiàn)故障時系統(tǒng)會發(fā)生什么。甚至整個實驗操作,可選擇新進(jìn)的實習(xí)生來執(zhí)行這些步驟。

          對所有電源重復(fù)以下過程,一次一個:

          • 檢查網(wǎng)站是否正常運(yùn)行;
          • 打開電氣面板并關(guān)閉電源;
          • 檢查網(wǎng)站是否仍在正常運(yùn)行; 
          • 重新打開電源。
          這個過程很粗糙,聽起來很簡單,讓我們再回顧一下這些步驟。
          給定一個系統(tǒng)(一個數(shù)據(jù)中心)和一個系統(tǒng)特性(在單個電源故障時仍能工作),您設(shè)計了一個實驗(關(guān)閉電源并觀察網(wǎng)站是否仍在運(yùn)行),若結(jié)果與預(yù)期假設(shè)一致,就會增加您對系統(tǒng)的信心。
          不過(話鋒一轉(zhuǎn)),有一件事我們不能漏掉,即有必要問問如果這個實驗失敗會發(fā)生什么?
          在這個過于粗略的實驗中,您將自行制造故障點(diǎn),這里就需要很謹(jǐn)慎,我們要最大限度地減少實驗帶來的風(fēng)險,選擇合適的環(huán)境來執(zhí)行。稍后我們將對此進(jìn)行更多介紹。
          下圖總結(jié)了您剛剛經(jīng)歷的混沌實驗過程。

          您會接著提出下一個問題:如果您正在處理更為復(fù)雜的系統(tǒng),應(yīng)該怎么辦?
          首先要對系統(tǒng)形成一個想要證明或反駁的假設(shè),然后圍繞該假設(shè)設(shè)計整個實驗。
          格雷戈爾·孟德爾,這位遺傳學(xué)家,還記得嗎?
          當(dāng)他對遺傳規(guī)律有了假設(shè)時,設(shè)計了一系列關(guān)于黃豌豆和綠豌豆的實驗,以證明顯性和隱性遺傳性狀的存在。雖然,實驗結(jié)果沒有達(dá)到預(yù)期,事實上,這就是他在遺傳學(xué)方面取得突破的方式。這和我們現(xiàn)在在討論的實驗方式很類似。
          下面我們來仔細(xì)討論一下混沌實驗的具體步驟和注意事項。
          2.2 混沌實驗的四個步驟

          讓我們先簡單捋一遍圖上的步驟要點(diǎn),后面會深入討論。
          • 實驗結(jié)果的可觀測性
          無論是豌豆的顏色、假人碰撞測、網(wǎng)站是否正常運(yùn)行、CPU負(fù)載、每秒請求數(shù)還是成功請求的延遲,第一步總是先確保,可以準(zhǔn)確讀取到這些數(shù)值。
          自從有了計算機(jī),我們可以輕松生成非常準(zhǔn)確和詳細(xì)的數(shù)據(jù)。這個我們稱之為可觀測性。
          • 使用觀測數(shù)據(jù)定義正常的狀態(tài)
          通過這種方式,您就可以了解系統(tǒng)行為在何時超出了預(yù)期范圍。
          例如,您可能希望應(yīng)用服務(wù)器在工作時間內(nèi),平均 15 分鐘的 CPU 負(fù)載低于 20%。或者,您可能期望在硬件參考規(guī)范中,四核應(yīng)用服務(wù)器的實例每秒有 500 到 700 個請求。
          這個正常范圍被稱為穩(wěn)定狀態(tài),簡稱穩(wěn)態(tài)。
          • 利用觀測數(shù)據(jù)驗證直覺假設(shè)
          直覺假設(shè)的一個簡單例子,“殺死其中一臺機(jī)器不會影響服務(wù)的平均延遲。”
          執(zhí)行實驗,進(jìn)行測量以得出您的假設(shè)是否正確的結(jié)論。有趣的是,您可能會喜歡犯錯,因為那時您能學(xué)到更多的東西,然后繼續(xù)實驗,依次迭代。
          • 實驗越簡單越好
          您不會因精心設(shè)計的設(shè)計而獲得加分,除非這是證明假設(shè)的最佳方式。
          下面,讓我們對混沌實驗的四步驟進(jìn)行更深入的探討。
          第一步 設(shè)置可觀測指標(biāo)
          “可觀測性”這個詞,非常直截了當(dāng),這意味著能夠可靠地查看您感興趣的任何指標(biāo)。這里的另一個關(guān)鍵詞則是可靠。
          硬件生產(chǎn)商或操作系統(tǒng)已經(jīng)提供了讀取各種指標(biāo)的機(jī)制,從 CPU 的溫度到風(fēng)扇的 RPM,再到內(nèi)存使用和各種內(nèi)核事件鉤子。
          這里要小心的一點(diǎn)是,這些指標(biāo)的采集器會影響指標(biāo)的準(zhǔn)確性。例如,您用來測量 CPU 負(fù)載的工具,其使用的 CPU 比您的應(yīng)用程序多,那可能是一個問題。
          如果您曾在電視上看過汽車碰撞測試,就會知道它既令人恐懼又令人著迷:一臺1.5噸轎車加速到一個精心控制的速度,然后像紙?zhí)禊Z一樣撞擊到一塊巨大的混凝土。
          但是,碎玻璃飛來飛去的高清慢動作鏡頭,幾秒鐘前坐在汽車中的假人看似沒有受傷(并且沒有受到影響),這不僅僅是為了娛樂。碰撞測試專家和混沌工程從業(yè)者都需要可靠的數(shù)據(jù)來斷定實驗是否有效。
          這就是為什么可觀測性至關(guān)重要,能夠可靠地收集實時系統(tǒng)的數(shù)據(jù)至關(guān)重要。
          第二步 定義系統(tǒng)穩(wěn)態(tài)
          有了上一步的可靠數(shù)據(jù)(可觀測性),需要定義什么是系統(tǒng)穩(wěn)態(tài),以便可以識別異常。
          觀測指標(biāo)將取決于您的系統(tǒng)和想實現(xiàn)的目標(biāo)。它可能是“未損壞的汽車以 100 公里/小時的速度直行”,或者“99% 的用戶可以在 200 毫秒內(nèi)訪問 API”。
          通常,觀測指標(biāo)應(yīng)直接由業(yè)務(wù)需求驅(qū)動。
          讓我們以進(jìn)程的 CPU 使用率為例。聽起來很簡單,但在實踐中,很多事情都會產(chǎn)生影響。
          • 該進(jìn)程是否獲得了足夠的 CPU?是否被其他進(jìn)程竊取? 
          • 可能是共享機(jī)器,或者可能是cron在實驗期間啟動更新系統(tǒng)的工作?
          • 內(nèi)核調(diào)度是否將 CPU 分配給了另一個具有更高優(yōu)先級的進(jìn)程?
          • 管理程序決定其他進(jìn)程更需要 CPU? 
          按這種思路,您持續(xù)深入發(fā)掘問題。
          好消息是,多次重復(fù)實驗,能夠發(fā)現(xiàn)一些其他影響因素,但是請記住,所有這些都可能會影響實驗結(jié)果。
          第三步 對事件提出假設(shè)
          這一步,才是真正有趣的部分。
          將您對系統(tǒng)行為的直覺,總結(jié)成一個可檢驗的假設(shè)——在出現(xiàn)明確定義的事件時,對系統(tǒng)行為進(jìn)行有根據(jù)的猜測。
          系統(tǒng)會繼續(xù)工作嗎?系統(tǒng)性能會受到影響嗎?如果會,影響程度有多少?
          在現(xiàn)實生活中,這些問題往往是由事件引發(fā)的,大致可分為以下幾類:
          類型事件示例
          外部事件地震、洪水、火災(zāi)、停電等
          硬件故障磁盤、CPU、交換機(jī)、電纜、電源等
          資源匱乏CPU、物理內(nèi)存、虛擬內(nèi)存、磁盤空間、網(wǎng)絡(luò)帶寬等
          軟件錯誤死循環(huán)、崩潰、黑客攻擊等
          虛擬機(jī)故障意外重啟、意外關(guān)閉、部署失敗等
          硬件錯誤系統(tǒng)時鐘錯誤、CMOS電池失效、內(nèi)存校驗錯誤等
          人為錯誤按錯按鈕、發(fā)送錯誤配置、拔錯電纜等

          模擬其中一些事件很容易(關(guān)閉機(jī)器以模擬機(jī)器故障,或者,拔出電纜以模擬網(wǎng)絡(luò)問題),而其他事件則要難得多(為系統(tǒng)調(diào)用添加延遲)。

          選擇合適的故障,需要您對自己的系統(tǒng)有很好的了解。

          以下是一些示例假設(shè):

          • 以每小時 100 公里的速度發(fā)生正面碰撞時,不會擠壓到任何假人。 
          • 如果兩個親本豌豆都是黃色的,那么所有的后代都是黃色的。 
          • 如果 30% 的服務(wù)器被關(guān)閉,API 會在 200 毫秒內(nèi)繼續(xù)為 99% 的請求提供服務(wù)。
          • 如果其中一臺數(shù)據(jù)庫服務(wù)器出現(xiàn)故障,仍將滿足服務(wù)級別目標(biāo) (SLO)。
          現(xiàn)在,是時候運(yùn)行實驗了。
          第四步 運(yùn)行實驗并驗證假設(shè)
          最后,運(yùn)行實驗,觀測結(jié)果,并驗證假設(shè)。
          請記住,假設(shè)被證偽,被打臉,一點(diǎn)問題沒有——反而是令人興奮的事!
          • 如果假設(shè)是對的,恭喜!您剛剛對自己的系統(tǒng)獲得了更多信心。 
          • 如果假設(shè)是錯的,恭喜!您剛剛在客戶發(fā)現(xiàn)之前,提前找到了系統(tǒng)問題,并且可以在任何人受到影響之前修復(fù)它!
          請記住,只要這是一門好科學(xué),您就可以從每個實驗中學(xué)到一些東西。

          三、結(jié)束語



          混沌工程是一門在系統(tǒng)上進(jìn)行實驗以發(fā)現(xiàn)問題的學(xué)科,這些問題通常無法被其他測試技術(shù)發(fā)現(xiàn)。
          這就像汽車行業(yè)所做的碰撞測試,試圖確保整輛汽車在真實的事件中仍能以某種方式運(yùn)行一樣。
          混沌工程實驗旨在引入現(xiàn)實事件來驗證對上述汽車行為的假設(shè)。
          混沌工程不會自動解決您的問題。
          想要提出有意義的系統(tǒng)行為假設(shè),需要您具有一定的專業(yè)知識。
          此外,混沌工程不是隨機(jī)破壞,而是事關(guān)添加可控數(shù)量的故障。
          最后,混沌工程不需要很復(fù)雜。
          剛剛介紹的混沌實驗四步驟,應(yīng)該能幫助您在事情變得更復(fù)雜之前走得更遠(yuǎn)。任何規(guī)模的系統(tǒng)都可以從混沌工程中受益。
          IDCF DevOps黑客馬拉松,獨(dú)創(chuàng)端到端DevOps體驗,精益創(chuàng)業(yè)+敏捷開發(fā)+DevOps流水線的完美結(jié)合,2021年僅有的3場公開課,數(shù)千人參與并一致五星推薦的金牌訓(xùn)練營,追求卓越的你一定不能錯過!
          9月11-12日,上海站,企業(yè)組隊參賽&個人參賽均可,一年等一回,錯過等一年,趕緊上車~??
          瀏覽 43
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产又粗又硬视频 | 久草电影网站 | 黄色AⅤ电影勉费 | 亚洲精品午夜成人片DY888 | 丝袜网站 |