最近開始接觸到在 cloud 的案子, 大家都知道一個分散式系統是非常複雜的, 要如何確保其穩定性是件不容易的事情. Chaos Engineering (混沌工程) 是其中一種方式, 它透過實驗的方式, 幫助人們建立受測系統能夠在 production 中經得起突發狀況的信心. 
 
image
 
 
 
[什麼是混沌工程]
 
混沌工程 是一套
 
通過在系統基礎設施上
進行實驗
主動
找出系統中 脆弱環節的
方法學
 
 
 
[混沌工程的歷史]
 
在 2008 年時, Netflix 開始將 service 從數據中心搬到 cloud 上面, 然後在生產環境中, 發展出一系列彈性的測試, 以確保系統在一些突發狀況下, 仍然可以運作的很順暢. 這套系統之後被稱為混沌工程
 
Netflix 是利用了一個叫故障注入測試(Fault Injection Test, FIT)的工具, 來打造 Chaos Money, 後來發展成 Chaos Kong.
 
 
 
[混沌工程 v.s. 腳本測試]
 
腳本測試(Scripted Testing) 在進行的時候, 需要特定輸入值, 測試步驟, 以及預期結果. 這些都是要很明確的, 因為最終要獲得一個答案: 通過或不通過. 
 
混沌工程則是主動地, 想辦法去探索異常, 可能你關掉某些節點, 某些流量異常激增, 或者資源被消耗很多. 但是系統會不會出錯並不知道. 
 
感覺混沌工程 像是 探索性測試 (exploratory testing) , 每次進行時, 只是找最有可能發生問題的地方去探索, 但是會不會找到錯誤, 這我們並不知道. 什麼是預期結果, 可能也無法事先列好.
 
 
 
[混沌工程的前提]
 
不是所有人都可以進行混沌工程的, 你要先問自己, 你的系統是否已經具備一定的彈性, 可以來應對這些異常事件. 像是網路瞬斷, 突然延遲增加等等. 
 
如果你的答案是 No, 你的設計沒有處理這些事情, 那你要先做一些準備.
 
(1) 把已知的問題先處理
雖然混沌工程 是用來找未知可能的問題, 但是進行後找到問題, 可能帶給系統巨大的影響. 因此, 你必須先把你已知的問題先處理掉, 至少它們發生時, 不會受到傷害.
 
(2) 監控系統
因為問題會出現在哪, 你可能無法知道, 你需要有監控系統來輔助, 告訴你哪邊發生什麼事情, 哪裡系統狀態數字異常, 這樣你才能作分析, 才能去解決問題.
 
 
 
[沒有標準答案]
 
好的系統或組織, 領導者應該是給方向或原則, 不用手把手教員工怎麼做, 讓員工自己找出解決方案.
 
在 Netflix 中, 沒有制度要求工程師要依據哪種規定來打造系統. 它要求的原則是: 服務在某些節點忽然間出問題時, 還能維持端到端服務的能力.
 
 
資料來源
arrow
arrow
    文章標籤
    Chaos Engineering DevOps
    全站熱搜

    kojenchieh 發表在 痞客邦 留言(0) 人氣()