要最佳化一個複雜系統的性能, 通常需要在混亂的邊緣進行. 也就是在系統行為即將開始變得混亂, 無跡可尋之前.
~ Sydney Dekker
 
混沌給人的感覺似乎就是混亂, 很隨機, 無序的狀況. 但是, 並不是混沌工程就是隨便亂搞. 相反地, 混沌工程是利用一些原則來進行的實驗科學.
 
當小孩哭鬧時, 大人很容易只是糾正其行為, 叫他不要在鬧, 不要這麼一直番. 但是小孩子會這樣做, 通常不見得這麼單純, 有時候是因為他不被重視, 沒有人陪他玩, 想要做些事情吸引大人. 因此, 正解或許應該花時間有品質的陪伴小孩. 
 
image
 
同理, 複雜系統也是這樣. 你不是只關注發生問題的元件, 你必須去深入理解, 什麼場景觸發了這些元件的互動, 導致最後發生這樣的意外問題發生. 
 
例如: client 要向 server 發出 request. 因為網路不通, 這些 request 被 queue 住了. 也因為 client 沒有反應, user 便多按了幾下, 試圖確認是否觸發這個功能, 導致 queue 中更多 request. 等到網路一通時, 這些大量的 request 便全送往 server. 如果同時有多個 client 發生這樣的事情, server 可能在網路一開通時, 便會遭受 DDoS 攻擊. 這就是長鞭效應(bullwhip effect). 我想如果你玩過 system thinking 的啤酒遊戲, 你一定深深了解訂單數改變後, 導致系統重大變化. 工程師很難一開始就掌握, 並且也很難想像, 違反直覺. 因此, 要求一開始就能把這類情況考慮周全, 是有點過分的要求.
 
image
 
所以, 混沌工程是一種利用一些原則, 以實驗的方式, 解決”我們系統離混亂有多少距離"的經驗方法. 之後將會一一介紹這些原則.
 
(1) 建立穩定狀態的假設
(2) 用多樣的現實世界事件做驗證
(3) 在生產環境中進行實驗
(4) 自動化實驗以持續運行
(5) 最小化爆炸半徑
 
 
 
資料來源

    文章標籤

    devops chaos engineering

    全站熱搜

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