天天看點

ChaosBlade:從零開始的混沌工程(一)

ChaosBlade:從零開始的混沌工程(一)

前言

随着微服務的盛行以及容器技術的普及,借助 Kubernetes 的容器編排能力,部署一套分布式系統的難度也越來越低。但随之而來的是越來越複雜的系統,以及越來越難的系統可靠性測試,有時僅僅是一個接口的故障,就可能導緻整個系統的雪崩。在雪崩中,找到那個最初故障的接口也十分困難,因為到處都在報錯。

為了解決這些問題,除了不斷減少服務的耦合,建立強大的監控系統以及設定熔斷、限流等政策等方式,這時混沌工程就出現了。

什麼是混沌工程

根據

混沌工程原則(PRINCIPLES OF CHAOS ENGINEERING)

:混沌工程是在分布式系統上進行實驗的學科, 目的是建立對系統抵禦生産環境中失控條件的能力以及信心。

大規模分布式軟體系統的發展正在改變軟體工程。作為一個行業,我們很快就采用了提高開發靈活性和部署速度的實踐。但伴随着這些優點,一個迫切問題出現了,那就是:我們對投入生産的複雜系統有多少信心?

即使分布式系統中的所有單個服務都正常運作, 但這些服務之間的互動也會導緻不可預知的結果。這些不可預知的結果, 由影響生産環境的罕見且具有破壞性的事件複合而成,令這些分布式系統存在内在的混沌。

需要在異常行為出現之前,在整個系統内找出這些弱點。這些弱點包括以下形式:

  • 當服務不可用時的不正确復原設定
  • 不當的逾時設定導緻的重試風暴
  • 由于下遊依賴的流量過載導緻的服務中斷
  • 單點故障時的級聯失敗等

在這些弱點通過生産環境暴露給使用者之前,必須主動的發現這些重要的弱點。并需要一種方法來管理這些系統固有的混沌, 通過增加的靈活性和速率以提升我們對生産環境部署的信心, 盡管系統的複雜性是由這些部署所導緻的。

采用基于經驗和系統的方法解決了分布式系統在規模增長時引發的問題, 并以此建立對系統抵禦這些事件的能力和信心。通過在受控實驗中觀察分布式系統的行為來了解它的特性,我們稱之為混沌工程。

ChaosBlade

ChaosBlade:從零開始的混沌工程(一)

中文名混沌之刃,是阿裡巴巴開源的一款遵循混沌工程原理和混沌實驗模型的實驗注入工具,是内部項目 MonkeyKing 對外開源的項目,其建立在阿裡巴巴近十年故障測試和演練實踐基礎上,結合了集團各業務的最佳創意和實踐。旨在幫助企業提升分布式系統的容錯能力,并且在企業上雲或往雲原生系統遷移過程中業務連續性提供保障。

目前支援的場景有:

基礎資源

Java 應用

C++ 應用

Docker 容器

以及

Kubernetes 平台

。該項目将場景按領域實作封裝成單獨的項目,不僅可以使領域内場景标準化實作,而且非常友善場景水準和垂直擴充,通過遵循混沌實驗模型,實作 chaosblade cli 統一調用。

該項目體驗極好,僅需一個可執行檔案

blade

,就可完成多種場景的實驗(一些複雜場景如 Java 應用實驗,則需要相關工具包),同時如果不想下載下傳 chaosblade 工具包,快速體驗 chaosblade,可以拉取 docker 鏡像并運作,在容器内體驗。

ChaosBlade:從零開始的混沌工程(一)

快速體驗

該項目于 2020 年 5 月 27 日釋出了最新了

v0.6.0

版本,本系列文章的全部實踐也将基于這個版本以及該版本的修複版本 v0.6.x 進行。

ChaosBlade-Operator

ChaosBlade-Operator 是 ChaosBlade 的 Kubernetes 平台實驗場景實作,也是本系列文章主要使用的工具。其将混沌實驗通過 Kubernetes 标準的 CRD 方式定義,很友善的使用 Kubernetes 資源操作的方式來建立、更新、删除實驗場景,包括使用 kubectl、client-go 等方式執行,而且還可以使用上述的 chaosblade cli 工具執行。

ChaosBlade:從零開始的混沌工程(一)

Pod 網絡延遲場景

結語

本篇為系列文章開篇,主要介紹混動工程以及混沌工程實驗工具 ChaosBlade,後續會從實踐的角度帶領讀者上手實踐混沌工程,了解混沌工程的方法及原理。實踐出真知,在後續的文章後,我們将從 ChaosBlade-Operator 的安裝部署、實驗配置、實驗觀測及實驗銷毀等方面,詳細介紹 ChaosBlade 的功能。同時也會介紹在不同場景下混沌工程是如何幫助開發者發現系統中的問題,并達到逐漸建設高可用的韌性系統的目的。

參考