Chaos Monkey是在Netflix整體微服務(wù)化的形勢下開發(fā)的。為了增加微服務(wù)架構(gòu)的彈性,需要確保當服務(wù)集群中有節(jié)點失敗或者退出時不會影響整體服務(wù)。由于Netflix的內(nèi)部文化,沒有辦法通過框架或者編碼規(guī)范來形成一套能夠滿足彈性要求的框架。最終,Netflix選擇開發(fā)了Choas Monkey:一個在生產(chǎn)環(huán)境隨機選擇并關(guān)閉服務(wù)的工具。對于這個選擇,有人會覺得很瘋狂,但是通過頻繁的服務(wù)失敗演練,使得開發(fā)團隊對服務(wù)集群穩(wěn)定性有了更高的重視,以確保不會因為這些演練對最終用戶產(chǎn)生影響。
Netflix將Chaos Monkey定位為提升服務(wù)質(zhì)量的高效工具。最近發(fā)布的2.0,除了帶來更好的可維護性,也帶來了一些新的特性。
和Spinnaker集成
Spinnaker是Netflix的持續(xù)交付平臺,Chaos Monkey 2.0和它結(jié)合之后,可以在Spinnaker上對其進行配置。同時Chaos Monkey可以從Spinnaker獲取服務(wù)部署的相關(guān)信息并通過Spinnaker關(guān)閉服務(wù)實例。
由于集成了Spinnaker,Chaos Monkey增加了對多種后端的支持,包括:AWS、GCP、Azure、Kubernetes、Cloud Foundry。
Chaos Monkey 2.0還在配置上進行了優(yōu)化,用戶可以設(shè)置兩次終止之間的平均時間,而不是在任意時段內(nèi)的概率。另外,針對服務(wù)所在的環(huán)境進行分組,分組方式延續(xù)了AWS的概念,包括應(yīng)用、應(yīng)用棧(stack)和集群。配置頁面如下:
追蹤關(guān)閉行為
Chaos Monkey 2.0可以單獨配置外部追蹤器,當Chaos Monkey對某個實例進行了關(guān)閉操作后,它會向配置的追蹤器發(fā)送通知。對于Netflix內(nèi)部使用來說,Chaos Monkey會將通知發(fā)送到Atlas(Netflix的檢測系統(tǒng))和Chronos(Netflix的事件追蹤系統(tǒng))。下圖是Atlas系統(tǒng)的截圖,展示了Chaos Monkey對于部分服務(wù)的關(guān)閉操作行為,值得注意的是,Chaos Monkey還會關(guān)閉自己的服務(wù)實例。
其他改變
之前版本的Chaos Monkey,除了支持關(guān)閉服務(wù)實例之外,還支持其他一些操作系統(tǒng)級別的破壞,例如提高CPU占用率、阻塞網(wǎng)絡(luò)IO、寫滿硬盤空間等。Chaos Monkey 2.0移除了這些功能,只支持關(guān)閉服務(wù)實例。對于這些功能移除,Netflix的工程師認為,這些功能應(yīng)該被放到故障注入服務(wù)中進行定向注入,而不是作為Chaos Monkey的隨機操作之一。關(guān)于故障注入,Netflix也有一些介紹。
Chaos Monkey 2.0源碼在其Github倉庫上已經(jīng)可以下載和部署。詳細部署方式參見Chaos Monkey的wiki頁面。