混沌工程詳細介紹——Netflix持續交付實踐探尋

搗亂猴子

本篇來自于本人6月-7月參加的“DevOps案例深度研究”活動Netflix案例研究的第五部分,詳細介紹了Netflix的混沌工程
經過一個月的戰斗,四個版本的迭代,Netflix戰隊最后交付了讓所有人滿意的戰果,并獲得了全場唯一的案例研究最佳小組獎杯。感謝我們的戰友,還有指導老師,姚冬老師和徐磊老師。

本案例所有研究人員

Netflix實施混沌工程的背景

混沌工程

08年Netflix決定把它的業務遷移到aws上,從自身運維的角度考慮,它有很多擔憂的地方。

  1. 很長時間內有兩套系統在同時運行,運維的復雜度更高了。
  2. NetFlix的用戶量已經達到了1億,對應用穩定性依賴很高,如果出現故障對用戶的影響非常大,甚至是致命的。
  3. 它的業務不斷復雜,引入微服務架構,對應用的高可用性要求越來越高。
  4. 生產環境非常復雜,是多樣性的,很難在測試環境中完全模擬生產的狀態。

因此Netflix決心探索一種在生產環境驗證應用高可用性的一種方法,這就是現在大家所熟知的混沌工程。

混亂工程的發展

混亂工程的發展
  • 2010年,搗亂猴子誕生
  • 2011年,猴子軍團,有了更多場景下的工具集
  • 2012年,開源了搗亂猴子的代碼,建立社區,影響了越來越多的公司混沌工程的發展
  • 2014年,NetFlix創建了新的工作角色,混沌工程師,代表了NetFlix將混沌工程融入了公司的運維文化中
  • 2015年,NetFlix與社區正式提出混沌工程原則,從此混沌工程不只是一些工具的集合,而有了一套理論支撐
  • 2016年,NetFlix前員工Kolton Andrus創立了Gremlin,正式將混沌實驗工具商用化,可以看到混沌工程影響著越來越多的企業。
  • 2017年,Chaos Monkey 2.0

從一只猴子,發展成龐大的猴子軍團,是NetFlix在生產實踐中不斷探索與不斷進化的結果。

NetFlix猴子軍團

NetFlix猴子軍團

NetFlix猴子軍團包括很多工具:

  1. Chaos Monkey,搗亂猴子,可以隨機關閉生產環境中的實例,確保網站系統能夠經受故障的考驗,同時不會影響客戶的正常使用。
  2. Latency Monkey,延遲猴子,在RESTful服務的調用中引入人為的延時來模擬服務降級,測量上游服務是否會做出恰當響應。通過引入長時間延時,還可以模擬節點甚至整個服務不可用。
  3. Conformity Monkey,一致性猴子,查找不符合最佳實踐的實例,并將其關閉。例如,如果某個實例不在自動伸縮組里,那么就該將其關閉,讓服務所有者能重新讓其正常啟動。
  4. Doctor Monkey,醫生猴子,查找不健康實例的工具,除了運行在每個實例上的健康檢查,還會監控外部健康信號,一旦發現不健康實例就會將其移出服務組。
  5. Janitor Monkey,守衛猴子,查找不再需要的資源,將其回收,這能在一定程度上降低云資源的浪費。
  6. Security Monkey,安全猴子,這是Conformity Monkey的一個擴展,檢查系統的安全漏洞,同時也會保證SSL和DRM證書仍然有效。
  7. 10-18 Monkey,本地化猴子,進行本地化及國際化的配置檢查,確保不同地區、使用不同語言和字符集的用戶能正常使用Netflix。
  8. Chaos Gorilla,搗亂大猩猩,Chaos Monkey的升級版,可以模擬整個Amazon Availability Zone故障,以此驗證在不影響用戶,且無需人工干預的情況下,能夠自動進行可用區的重新平衡。
  9. Chaos Kong,搗亂金剛,Chaos Gorilla的升級版,可以模擬整個Region的故障。

這些工具向我們展示了NetFlix的一套方法論,混沌工程并不是一些測試工具的集合,而是一種思想:在生產實踐中遇到問題時,利用混沌工程的思想,實施自己的一些混沌實踐,引入新的猴子。相信以后會有越來越多的猴子加入到猴子軍團。
使用 Simian Army 進行混沌工程實驗,看起來似乎已經很完美。在生產上做這樣不可控的實驗,是很危險的。

混沌工程的原則

混沌工程的原則

引入混沌實踐時需要了解混沌工程的五大原則。

  1. 建立穩定狀態的假設。
    在做混沌工程實驗的時候,首先得確定需要測試的指標已經做了高可用的工作,才能進行驗證指標對業務的是否有影響。如果沒有做好高可用工作,而引入混沌工程實驗的話,對業務而言將會是一聲災難。
  2. 多樣化現實世界事件
    不能夠憑空想像出一些事件來驗證,而是引入那些真實存在的,頻繁發生的,且影響重大的事件。對我們而言給這些事件做混沌實驗才具有價值。如磁盤故障、網絡延時、主機宕機等。
  3. 在生產環境運行實驗
    盡量在類生產環境中進行測試,生產環境的多樣性是任何其它環境無法比擬的。混沌工程的價值就是保證生產上的業務連續不中斷。
  4. 持續自動化運行實驗
    實施混沌工程實驗一般最開始是人工手動操作,當我們對業務有足夠的信心時,要把混沌實驗做成持續自動化。在版本升級、不斷迭代的過程中,持續不斷自動化地做驗證,最大程序保證業務的連續性驗證。
  5. 最小化影響范圍
    做混沌工程的意義就是保證生產上的業務。在我們實施混沌實驗時也必須保證對線上業務影響最小。在實施實驗時,從小范圍開始,不斷擴大范圍,避開高風險時段,如選擇業務量最小的時候實施實驗。

混沌工程實踐步驟

混沌工程實踐步驟

有了這些原則,就可以根據業務的真實場景設計混沌工程實驗。
在真實展開實驗時分為兩個階段:準備階段、執行階段。

  • 準備階段:
  1. 確認本次實驗需要驗證的目標。遵循建立穩定狀態的假設、多樣化現實世界事件的原則。例如:Redis的超時不會對系統影響。代碼中已經對Redis超時的情況做了相關的工作,保證業務的可靠。實驗只是用來測試驗證。
  2. 選擇實驗范圍。遵循對線上業務影響最小、盡量與生產環境相近的原則。例如先測試環境驗證,生產環境選擇最小量用戶驗證。
  3. 確認監控指標。例如:訂單成交量、應用請求響應時間、應用響應錯誤率,做好監控實時查看狀態。
  4. 團隊成員溝通。遵循最小化影響范圍。確保團隊相關成員了解實施情況,關注業務狀態。
    準備階段一般只是第一次實驗的時候操作,一旦驗證好了以后以后,后序重復執行本次工程不需要重新準備,除非對實驗過程有變動。
  • 執行階段:
  1. 執行實驗。遵循最小化影響范圍。執行過程中實時關注指標,如果有異常,隨時終止實驗。例如,把Redis延時調大,查看監控指標是否有異常。
  2. 分析結果。遵循最小化影響范圍。根據收集的指標數據確認假設Redis的超時不會對系統影響。如果驗證假設不成立,則需要分析代碼,確認好原因,再組織下一次的混沌工程實驗。
  3. 擴大實驗范圍。遵循最小化影響范圍。先小范圍測試,再逐步擴大測試范圍。
  4. 自動化。遵循持續自動化運行實驗。當對代碼有足夠的信心之后,將混沌工程實踐做成自動化,讓混沌工程實驗能夠持續保證業務的可用性,獲得最大的價值。

Chaos Monkey在K8S集群下的應用

Chaos Monkey在K8S集群下的應用

Kubernetes是容器編排市場的領導者。如何保證K8S集群及運行在上面的應用能夠抵御生產中動蕩環境的能力和信心呢?正確地使用混沌工程實踐是這里面的關鍵。我做了一些調研,找到了常用的三款在K8S環境下的混沌工程工具。

  • Kube-monkey:模擬在指定時間隨機刪除K8s集群中的pod
  • Powerfulseal:控制K8S中的Pod及Node節點的狀態
  • Gremlin:是一個商業版工具。通過web/API/CLI的方式對容器、主機,提供數十種攻擊方式,方便與其它工具進行集成。

總結:

可見混沌工程并不僅僅是在傳統運維、云平臺發揮著作用,在最新的基礎架構設施容器平臺中也發揮著它的價值。我相信會有越來越多的企業將意識到混沌工程給系統帶來的各種好處,不久的將來,混沌工程實踐也許會成為基礎設施運維與應用運維不可或缺的一部分。

參考文章

Netflix 混沌工程手冊
Unleash the Chaos Monkey
Netflix的Chaos Monkey的一個實現用于Kubernetes集群
獲得1.25億用戶以后,Netflix總結了這些系統可用性經驗
Istio Chaos Engineering: I Meant to Do That
AWS云上混沌工程實踐之啟動篇

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容