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·北京
故障如此之多,讓人摸不着頭腦,咱們試着把維度下降一下,換一個視角來看故障:
任何故障均可以套入到這個故障模型中。有了這個模型,咱們就能夠開始來設計模擬故障的演練系統了。
圖片來源於 QCon·北京
經過上面的方式,基本上就把技術型故障的模型就cover全了。
方式一:
2016年,Chaos Monkey(Netflix的猴子名稱)進行開源,但自2016年11月發佈第三個版本,未再發布新版本。
地址:https://github.com/Netflix/chaosmonkey
方式二:
2018年9月,MonkeyKing(阿里的猴子名稱)以避免費服務的方式向阿里雲公有云客戶進行輸出,產品名稱是應用高可用服務 AHAS,目前已支持K8s集羣接入。
本文爲雲棲社區原創內容,未經容許不得轉載。