做混沌工程是什麼樣的體驗?阿里:有點刺激
受訪嘉賓:周洋
阿里巴巴高階技術專家,花名中亭。2011 年加入阿里巴巴高可用架構團隊,長期參與穩定性產品研發和集團架構演進工作,主導了強弱依賴、灰度環境、故障演練、智慧對賬等多款高可用產品的研發和建設,見證了阿里高可用產品體系從 1.0 到 3.0 的發展歷程,積累了豐富的架構和穩定性經驗。
2015 年作為共享事業部的雙 11 負責人,負責大促和常態穩定性的保障工作。目前負責高可用技術的雲化輸出和技術演進工作,阿里雲產品 AHAS(應用高可用)的技術負責人。
2017 年 QCon 明星講師,混沌工程佈道師。
正文:
混沌未分天地亂,茫茫渺渺無人見。
因為對未知的好奇,盤古劈開了天地,身化做了天地。再後來,人類不滿足於眼前的狹小世界,渴望天地之外,無人得見的另一番天地。
是以未知探尋未知,遍觀未知,方知無知。
混沌工程,便因未知而生。
這一通過有意識地注入故障,從而發現系統的未知弱點的實驗手段,現在還很年輕,在行業內的認知和實踐累積也比較少,很多 IT 團隊對它的理解還沒有上升到一個領域的概念。但阿里很敢,率先付出了長久的關注與實踐。
今天我就跟大家聊聊阿里的混沌工程。
其實,早在 2011 年,阿里電商就開始嘗試通過故障注入技術去解決微服務的依賴問題,從注入實現、實驗效率、業務影響等多個方面進行演進。2016 年開始,我們嘗試在線上復現一些重大故障並驗證措施是否有效。此時,阿里內部還稱之為”故障演練”。
直到 2016 年去參加舊金山的 QCon 大會,我們發現很多人在討論混沌工程,他們想要解決的問題與我們想要的不謀而合,於是,阿里開始關注這個技術領域。
越來越多的企業選擇基於雲原生技術構建系統架構,希望可以構建容錯性好、易於管理和便於觀察的鬆耦合系統。但我們需要意識到的是,在圍繞新技術、新理念來升級系統架構和組織模式的同時,一定會遇到一些超出預期的不確定問題。
如何減小不確定性問題對系統穩態的影響,保持系統狀態的一致性,是我們實施混沌工程的主要契機。
再說說我自己吧。
2011 年,我加入了阿里巴巴高可用架構團隊,此後長期參與穩定性產品研發和集團架構演進工作,主導了強弱依賴、灰度環境、故障演練、智慧對賬等多款高可用產品的研發和建設,見證了阿里高可用產品體系從 1.0 到 3.0 的發展歷程,積累了豐富的架構和穩定性經驗。
2015 年,作為共享事業部的雙 11 負責人,我負責大促和常態穩定性的保障工作。
一晃 8 年過去了,現在,我在阿里負責高可用技術的雲化輸出和技術演進工作,是阿里雲產品 AHAS(應用高可用)的技術負責人。
如果你要問我,在推進混沌工程的過程中是否有一些比較刺激的經歷,那我會說,還真有。
剛剛推進混沌工程的時候,我們優先選擇的是在生產環境復現歷史發生的故障,驗證故障措施改進的有效性。之前的故障措施的驗收往往是線上下環境驗證或走一個流程。那次實驗,我們選擇了一個非常嚴重的故障做驗收。雖然我們做了比較充分的評估,但是真正在生產環境實施的時候,還是比較緊張。
會是成功還是失敗?答案是,成功。
最終故障注入後,相關係統完成了容災切換,業務曲線幾乎無影響。
成功是一針興奮劑,增強了大家對系統穩定性的信心,我們都受到了鼓舞。
為什麼阿里要選擇混沌工程啊?
也許你會疑惑,既然現在已經有了故障注入和故障測試,比如單元測試和整合測試,那麼,為什麼阿里還要選擇混沌工程?
我認為,它們雖有一定的重疊性,但混沌工程是發現新資訊的實踐。
單元測試和整合測試的核心目標是檢查程式功能是否按照需求規格說明書的規定正常使用,程式是否能適當地接收輸入資料而產生正確的輸出資訊。
故障注入和故障測試的定義是通過引入故障,讓程式走入一些不常經過的路徑,是一種提高程式覆蓋率的手段。
混沌工程雖然也使用短期的度量結果代表系統狀態,但一般來講度量結果都是一個監控的指標,而非具體的介面返回值。混沌工程是一個圍繞穩態進行驗證和探索的過程,每次實驗可能都會產生新的資料。
如果把系統架構比作一個房子,實施混沌工程就類似對房子進行驗房的過程。通過模擬有損和無損的的場景來觀察房子質量,目標是暴露結構性風險,不會去關注每個細節。
看起來有點意思,對吧?
那你想不想知道,混沌工程是不是與你有關?
如果你是一名系統架構師、測試人員、SRE 人員,那你需要關注混沌工程。
那麼,企業如何確定自己是否適合混沌工程?滿足一下部分特徵的企業,都適合實施混沌工程:
對於資損或 SLA 有極高要求的行業(金融、電商、醫療、遊戲、公共等)
有較大的系統改造(比如:系統重構、微服務化、容器化、遷雲)
業務發展快,穩定性積澱少
人員流動快,或 SRE 團隊規模較小
對於使用混沌工程的團隊,我建議:
要先從文化上讓團隊認可實施混沌工程的必要性和方法論。
重點關注實驗方案的評估,明確定義系統穩態和終止條件。
嘗試通過一些簡單的場景開始嘗試,增加大家對系統和過程的信心。
與其他團隊進行合作,通過混沌工程配合其他穩定性手段,達成整體目標(如:監控發現率、故障改進覆蓋率、系統自愈有效性等)。
下面我要說的很重要。
在使用混沌工程之前,我們需要準備三點:
思想上要準備好。要意識到系統故障是可以通過週期性的引入一些實驗變數來提前暴露和解決的。不論是否實施混沌工程,系統的隱患或 Bug 都客觀存在。
系統穩態和實驗方案的仔細評估。對於實驗方案進行推演,如果已經可以預想到一些問題,那麼修正後再進行新的實驗。
提升系統的可觀測性。對於系統穩態,要有配套的監控或觀測工具,否則會影響混沌工程的實施效果。
你知道的,實踐出真知。
作為第一批吃螃蟹的,我們也做了將近十年了,阿里在故障模擬、爆炸半徑的控制、產品化方面出了一些成績。業務方基本可以做到很低成本使用我們的產品,DevOps 同學基本已經可以實現自助演練。
從 2016 年到現在,看到大家對領域的認可度逐年變高,演練覆蓋的應用規模和發現問題的數量已經翻了幾倍,幫助業務方識別了很多潛在故障和改進點,很多高速發展的領域,比如新零售,也是通過實施混沌工程來快速的落地和改進穩定性,我還挺高興的。
雖然混沌工程在行業內沒有一個比較廣的認知,但除去 Netflix 和阿里之外,國內外也有不少公司在做這個。
比如,國外有 Gremlin、ChaosIQ 這樣專門實施 Resilience as a Service 的商業公司。像一些中、大型公司也都有實施混沌工程團隊,比如 Linkedin、Uber、Google 等等。
國內的公司,據我所知,百度、華為、美團、京東、貓眼電影等,應該都有一些實施經驗。
目前開源社群的工具主要關注在故障注入層面。商業化產品一般也是基於產品 + 專家服務的模式。
下面,我推薦一些好用的工具吧。
開源工具:
kube-monkey、PowerfulSeal、ChaosIQ,提供了一些容器層面的故障注入能力。詳細可以看: https://github.com/dastergon/awesome-chaos-engineering
近期阿里會開源一款混沌工程測試工具 ChaosBlade,提供基礎資源、應用服務、容器等多維度的故障模擬能力。
商業化工具:
Gremlin 提供一款商用的故障注入平臺,部分功能免費,目前在公測中。
阿里雲 - 應用高可用服務(AHAS):AHAS 供了基於混沌工程原則的完整的實現,除了提供常見的故障注入能力,預設也打通了一些常見的雲服務,提升系統的可觀測性和自動化能力。目前免費公測中(支援非阿里雲機器公網使用)。
隨著企業雲化,一定會有越來越多的公司開始關注和實施混沌工程。我希望可以有更多的公司分享思考和實踐,並結合領域場景產出一些最佳的實踐。
居安思危,思則有備,有備無患。這是《左傳·襄公十一年》說的。
此前,有人認為,混沌工程是一種在故障發生之前發現故障的技術,但也是一種心態。
我覺得這句話還是有道理的。混沌工程是一種驗證系統對非預期情況防禦有效性的實驗思想,任何依照”混沌工程原則”進行的探索,都是有效實踐。
系統架構可能會很複雜,比如採用了微服務、Docker、K8s,甚至函式計算類似的技術,需要實驗專案也涉及很多門類。為了更有效地實施混沌工程,就需要藉助一些場景豐富、操作簡便、模型標準的工具或技術了。
混沌工程技術會隨著其他技術發展而演進,混沌工程會與融入到每個領域的最佳實踐中。
今年開始,我開始在一些場合將自己稱呼為” 混沌工程佈道師”。
佈道師,聽起來好像有點“忽悠”。
不過,你知道皮埃羅·斯加魯菲(PieroScaruffi)嗎?這位全球人工智慧及認知科學專家,被譽為永遠站在時代前面的矽谷精神佈道者,我很敬佩他。推動技術傳播,推動技術落地,推動行業變革,這就是佈道者的意義之所在。
在阿里內部,其實並沒有設定一個專門的佈道師的崗位。作為技術 Leader 或架構師,完成既定的業務目標是最核心,也是最本分的任務,除此之外,他們還活躍在外界,扮演著產品宣導者和技術推廣人的角色。
讓更多的人知道他們的團隊在做什麼,從而發現更多可能。
我希望,能通過這種手段給自己一定的責任和壓力,持續性地去關注和推進領域的發展,讓更多的人瞭解並加入這個領域。
願為星星之火,這是我的選擇。
寫在最後:
周洋是 QCon 北京 2019“混沌工程”專題的出品人,同時也是專題演講嘉賓,他將在大會上與大家就雲原生架構下的混沌工程實踐做分享。
2019 年 5 月 6-8 日,QCon 北京 2019 還將聚焦 Java 生態系統、高可用架構、運維最佳實踐等經典方向,人工智慧、機器學習、前端前沿技術等前沿領域,26+ 熱門專題,近 200 名技術大咖全明星豪華陣容,QCon 十週年精心策劃品質呈現。
點選 「 QCon 北京 2019 」 或識別二維碼瞭解詳情,大會 9 折報名中,團購可享更多優惠。有任何問題歡迎聯絡票務小姐姐 Ring:電話 010-53935761,微信 qcon-0410