咱們僱傭了一隻大猴子

 

Picture from Gremlinhtml

咱們「僱傭」了一隻大猴子,只爲「搞破壞」,不開玩笑。git

這隻猴子是用來作什麼的?

從程序員的視角來看,提升系統穩定性的方法無外乎三種:程序員

  • 經過各類技術手段,例如在容器和調度、微服務、消息、軟負載和配置中心等緯度提升系統和架構的健壯性;
  • 提高監控的廣度和深度,生產中一旦出現問題,能快速定位,給出解決方案;
  • 生產就是大考,誰也不知道升學考中會出現什麼樣的試題,創建故障演練機制,把各種能夠預見的故障提早演練出來,例如隨機殺節點、延時響應,甚至中斷機房;

這隻猴子就是咱們僱來作破壞,進行故障演練的隊友。(瘋起來,咱們連本身都打)github

這隻猴子最先來源於哪?

Netflix的流媒體服務最初由Netflix工程師在Microsoft軟件之上構建的,並位於垂直擴展的服務器機架中。然而,這一單一故障點在2008年8月受到攻擊,當時一個主要的數據庫損壞致使了三天的停機時間,在此期間DVD沒法發送給客戶。數據庫

在此以後,Netflix工程師開始將整個Netflix堆棧從單片架構遷移到分佈式雲架構中。服務器

可是,這種向數百個微服務的分佈式架構的重大轉變帶來了大量額外的複雜性。分佈式系統中的這種複雜性和相互關聯性創造了一些難以處理的東西,而且須要一種新的方法來防止看似隨機的中斷。Netflix向水平擴展軟件堆棧的轉變須要更可靠和容錯的系統。網絡

最重要的經驗教訓之一是 「避免失敗的最佳方法是不斷失敗。」架構

 

 

 

圖片來源於社交網絡,出處未知分佈式

2010年,Netflix Eng Tools團隊開發出了Chaos Monkey,用來測試系統。Netflix的這個猴子軍團能夠在隨機殺死實例,或是讓某臺機器的請求或返回變慢,還有就是搞掛一個機房,宏觀驗證業務容災和恢復的能力。微服務

阿里的這隻猴子是什麼來頭?

2011年
阿里巴巴開始作強弱依賴的治理和建設,但願提早發現由於依賴問題致使的系統故障,系統的代號是EOS(出處是古希臘神話中的黎明女神,語意是可以把紛亂的依賴關係梳理清楚)

2012年
完成交易的同城雙活後,咱們就啓動了同城容災演練,也叫斷網演練。驗證核心系統的同城一個機房掛掉的狀況下,是否還能夠正常工做。

2015年
由於一次宕機事故,公司內部得出一個結論:任何基礎設施、生產系統、任何流程均可能出現問題,沒有通過重大災難驗證的容災設施都是耍流氓。 啓動了代號爲虎虎虎的生產突襲項目,用來驗證異地多活的質量。

2016年
故障演練項目立項(GOC+中間件),從新設計架構和產品流程,肯定產品名爲MonkeyKing,在交易和中間件鏈路嘗試演練。MonkeyKing是中國美猴王的意思,看重的是孫悟空高強的本領(火眼精金、七十二變)和極具反叛的精神來,但願用一種創新的思路來保證穩定性。

 

 

 

圖片來源於 QCon·北京

阿里的這隻猴子能作些什麼?

阿里巴巴由於其多元化的業務場景和日益複雜的技術架構,會遇到各式各樣的故障,故障治理的難度相比流媒體服務故障治理,難度是也增量了幾個臺階。

前面介紹過的強弱依賴和容災演練只能覆蓋到部分故障。若是對故障總體作初步畫像,故障總體能夠分爲IaaS層、PaaS層、SaaS層的故障,每一層均可能有不少故障出發緣由和表現。

 

 

 

圖片來源於 QCon·北京

故障如此之多,讓人摸不着頭腦,咱們試着把維度下降一下,換一個視角來看故障:

  • 任何故障,必定是硬件如IaaS層,軟件如PaaS或SaaS的故障, 而且有個規律,硬件故障的現象,必定能夠在軟件故障現象上有所體現;
  • 故障必定隸屬於單機或是分佈式系統之一,分佈式故障包含單機故障;
  • 對於單機或同機型的故障,以系統爲視角,故障多是當前進程內的故障,好比:如FullGC,CPU飆高; 進程外的故障,好比其餘進程忽然搶佔了內存,致使當前系統異常等;
  • 人爲誤操做,或流程不當致使;

任何故障均可以套入到這個故障模型中。有了這個模型,咱們就能夠開始來設計模擬故障的演練系統了。

 

 

 

圖片來源於 QCon·北京

  • 在客戶機器部署OS層的故障插件,用來模擬硬件層的故障和單機進程外的故障。
  • 對於應用進程內的故障,提供插拔式的故障插件,也能夠用戶按照咱們的故障API作本身的實現。
  • 對於分佈式故障,則經過服務端按照IP來控制故障的範圍。
  • 對於一些由於各類緣由沒法觸及的應用,好比數據庫。咱們提供了一個故障三方實現的標準,供故障服務接入。

經過上面的方式,基本上就把技術型故障的模型就cover全了。

那麼,從哪裏能夠僱傭到這隻猴子?

方式一:

2016年,Chaos Monkey(Netflix的猴子名稱)進行開源,但自2016年11月發佈第三個版本,未再發布新版本。

地址:https://github.com/Netflix/chaosmonkey

方式二:

2018年9月,MonkeyKing(阿里的猴子名稱)以避免費服務的方式向阿里雲公有云客戶進行輸出,產品名稱是應用高可用服務 AHAS,目前已支持K8s集羣接入。

 

 

原文連接

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索