ChaosBlade x SkyWalking 微服務高可用實踐

2020-12-22 阿里云云棲號

來源|阿里巴巴雲原生公眾號

前言

在分布式系統架構下,服務組件繁多且服務間的依賴錯綜複雜,很難評估單個故障對整個系統的影響,而且請求鏈路長,如果監控告警、日誌記錄等基礎服務不完善會造成故障響應、故障定位問題難,所以如何構建一個高可用的分布式系統面臨著很大挑戰。混沌工程就此產生,在可控範圍或環境下通過對系統注入故障,觀察系統行為並發現系統缺陷,以建立對分布式系統因意外條件引發混亂的能力和信心,持續提升系統的穩定性和高可用能力。

混沌工程的實施流程是制訂混沌實驗計劃、定義穩態指標,做出系統容錯行為假設,然後執行混沌實驗,檢查系統穩態指標等。也因此混沌實驗整個過程需要可靠的、易於使用且場景豐富的混沌實驗工具注入故障以及完整的分布式鏈路追蹤和系統監控工具,以便觸發應急響應預警方案與快速地進行故障定位,並觀察整個過程系統的各項數據指標等。本篇文章我們介紹混沌實驗工具(ChaosBlade)和 分布式系統監控工具(SkyWalking),並且結合一個的微服務案例分享一下 ChaosBlade 和 SkyWalking 微服務高可用實踐。

工具介紹

1. ChaosBlade

ChaosBlade 是一款遵循混沌工程實驗原理,提供豐富故障場景實現,幫助分布式系統提升容錯性和可恢復性的混沌工程工具,可實現底層故障的注入,並且在企業上雲或往雲原生系統遷移過程中業務連續性保障,特點是操作簡潔、無侵入、擴展性強。ChaosBlade 可以在可控範圍或環境下,通過故障注入,來持續提升系統的穩定性和高可用能力。

ChaosBlade 不僅使用簡單,而且支持豐富的實驗場景,場景包括:

基礎資源:比如 CPU、內存、網絡、磁碟、進程等實驗場景;Java 應用:比如資料庫、緩存、消息、JVM 本身、微服務等,還可以指定任意類方法注入各種複雜的實驗場景;C++ 應用:比如指定任意方法或某行代碼注入延遲、變量和返回值篡改等實驗場景;Docker 容器:比如殺容器、容器內 CPU、內存、網絡、磁碟、進程等實驗場景;雲原生平臺:比如 Kubernetes 平臺節點上 CPU、內存、網絡、磁碟、進程實驗場景,Pod 網絡和 Pod 本身實驗場景如殺 Pod,容器的實驗場景如上述的 Docker 容器實驗場景;ChaosBlade 將場景按領域實現封裝成一個個單獨的項目,不僅可以使領域內場景標準化實現,而且非常方便場景水平和垂直擴展,通過遵循混沌實驗模型,實現 chaosblade cli 統一調用 。

2. SkyWalking

SkyWalking 是一個開源的 APM 系統,包括對雲本地架構中的分布式系統的監視、跟蹤和診斷功能。核心特性如下:

服務、服務實例、端點指標分析根本原因分析服務拓撲圖分析服務、服務實例和端點依賴性分析檢測到慢速服務和終結點性能優化分布式跟蹤和上下文傳播資料庫訪問指標。檢測慢速資料庫訪問語句(包括SQL語句)。報警工具安裝及使用

ChaosBlade 的安裝和使用都很簡便,ChaosBlade 各場景通過 chaosblade cli 統一調用,僅需要下載對應的 tar 包,解壓後使用

blade

可執行文件來進行混沌實驗,下載地址詳見:https://github.com/chaosblade-io/chaosblade/releases 。

1. ChaosBlade 安裝

本次我們的實際環境是 linux-amd64,下載最新版本 chaosblade-linux-amd64.tar.gz 包,安裝步驟如下:

## 下載wget https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/0.9.0/chaosblade-0.9.0-linux-amd64.tar.gz## 解壓 tar -zxf chaosblade-0.9.0-linux-amd64.tar.gz## 設置環境變量 export PATH=$PATH:chaosblade-0.9.0/## 測試 blade -h

2. ChaosBlade 使用

ChaosBlade 安裝完成後,僅需要使用

blade

可執行文件即可創建目前所支持的所有場景的混沌實驗。首先使用

blade -h

查看如何使用,選擇子命令之後只需要逐層向下使用

-h

即可看到完整的使用案例以及各參數的詳細解析,下面我們來演示一下:

1)blade 如何使用

執行

blade -h

可以查看支持命令有哪些:

An easy to use and powerful chaos engineering experiment toolkitUsage: blade [command]Available Commands: create Create a chaos engineering experiment destroy Destroy a chaos experiment...

2)創建實驗場景

比如創建 CPU 滿載場景,執行

blade create cpu fullload -h

就可以查看具體的場景參數,選擇相應參數執行即可:

Create chaos engineering experiments with CPU loadUsage: blade create cpu fullloadAliases: fullload, fl, loadExamples:# Create a CPU full load experimentblade create cpu load#Specifies two random kernel's full loadblade create cpu load--cpu-percent 60 --cpu-count 2...Flags: --blade-release string Blade release package,use this flag when the channel is ssh--channel string Select the channel for execution, and you can now select SSH--climb-time string durations(s) to climb--cpu-count string Cpu count--cpu-list string CPUs in which to allow burning (0-3 or 1,3)--cpu-percent string percent of burn CPU (0-100)...

3)恢復實驗

ChaosBlade 支持三種方式恢復實驗:

ChaosBlade 創建實驗成功後會返回一個UID,執行 blade destroy uid 即可。如果找不到對應的UID時,執行 blade destroy target action 即可,例如 blade destroy cpu fullload在創建實驗時帶上 --timeout 10 參數,在實驗場景執行十秒後會自動恢復,同時支持表達式,例如三分鐘 --timeout 30m3. SkyWalking 安裝&使用

SkyWalking 安裝和使用文檔詳見:https://github.com/apache/skywalking/tree/v8.1.0/docs

工具部署好之後,下面我們將結合案例,主動出擊,通過故障注入,觀察系統行為,定位問題並發現系統缺陷,以便構建高可用的微服務系統。

應用容錯案例

我們在日常環境部署一個微服務應用 來進行實驗,使用 ab 測試模擬系統請求。微服務應用服務包含前端、購物車、推薦服務、商品、訂單等,使用組建包含 Springboot、Nacos、Mysql、Redis、Lettuce、Dubbo 等。ChaosBlade 支持該應用的大部分組件,我們通過 ChaosBlade 來注入混沌實驗,驗證應用容錯能力並且使用 SkyWalking 進行應用監控和問題定位。

1. 案例環境

Linux-AMD64,發行版本 CentOS-7.xJDK1.8chaosblade-0.9.0,下載地址:https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/0.9.0/chaosblade-0.9.0-linux-amd64.tar.gzskywalking-apm-8.1.0,下載地址:https://www.apache.org/dyn/closer.cgi/skywalking/8.1.0/apache-skywalking-apm-8.1.0.tar.gz2. 應用拓撲結構

應用的整體架構如下,前端(frontend)對購物車(car)、產品(product)等都是通過 Dubbo 強依賴調用。

3. 混沌實驗步驟

制定混沌實驗計劃定義系統穩態指標作出系統容錯行為假設執行混沌實驗檢查穩態指標記錄和恢復混沌實驗修復發現的問題自動化持續進行驗證下面我們將根據混沌實驗步驟使用 ChaosBlade 實際進行混沌實驗。

4. 案例一

1)場景

制定混沌實驗計劃,調用下遊服務頻繁延遲,使用 ab 測試,模擬常態訪問購物車接口,開啟 2 個線程,進行 10000 次接口訪問。

ab -n 10000 -c 2 http://127.0.0.1:8083/cart

2)監控指標

定義系統穩態指標,在 SkyWalking 控制臺選擇 /cart 端點,穩態指標如下:

平均響應時間(RT)在 15ms 左右。P99 指標在 20ms 以內。

3)期望假設

配置調用超時時間,不會長時間阻塞客戶端請求。配置服務熔斷策略/服務降級。4)混沌實驗

在上節我們已經介紹過 ChaosBlade 的安裝和簡單實用,本次案例我們使用 ChaosBlade 對下遊 Dubbo 購物車服務注入延遲故障(延遲時間 30 秒),執行

blade create dubbo delay -h

命令查看 dubbo 調用延遲的命令用法:

Dubbo interface todo delay experiments, support provider and consumerUsage: blade create dubbo delayExamples:# Invoke com.alibaba.demo.HelloService.hello() service, do delay 3 seconds experimentblade create dubbo delay --time 3000 --service com.alibaba.demo.HelloService --methodname hello --consumerFlags: --appname string The consumer or provider application name --consumer To tag consumer role experiment. --effect-count string The count of chaos experiment in effect --effect-percent string The percent of chaos experiment in effect --group string The service group -h, --help help for delay --methodname string The method name --offset string delay offset for the time --override only for java now, uninstall java agent --pid string The process id --process string Application process name --provider To tag provider experiment --service string The service interface --time string delay time (required) --timeout string set timeout for experiment in seconds --version string the service versionGlobal Flags: -d, --debugSet client toDEBUG mode --uid string Set Uid for the experiment, adapt to docker

參考案例和參數解釋,需要上遊服務客戶端注入延遲故障(延遲時間 30 秒),藉助 SkyWalking 可以很方便找到鏈路上 Dubbo 服務相關信息,首先查詢端點為 /cart 的鏈路,在鏈路上找到 Dubbo 服務,如下圖:

查找鏈路

獲取協議詳細信息

點進來可以查看 Dubbo 服務詳細跨度信息,獲取 Dubbo 服務的 URL 後,就可以拿到使用 ChaosBlade 來注入上遊服務延時所需要的參數,因此我們的最終參數結構為:

--time 30000 延遲30s--service com.alibabacloud.hipstershop.cartserviceapi.service.CartService 服務--methodname viewCart 服務方法--process frontend Java 進程--consumer 當前是 Dubbo 服務客戶端下發命令注入故障:

blade create dubbo delay --time 30000 --service com.alibabacloud.hipstershop.cartserviceapi.service.CartService --methodname viewCart --process frontend --consumer

5)監控指標

注入故障後檢查系統指標,查看 SkyWalking 上的指標:

平均響應時間(RT)在 2000ms 左右,P99 指標在 2000ms 左右

/cart 接口調用報錯,com.alibabacloud.hipstershop.cartserviceapi.service.CartService 服務出現異常。

出現 timeout 異常,超時時間為 2000ms

結論說明上遊服務配置了調用超時時間,但沒有配置服務熔斷策略,實際是不符合預期的。

6)修復問題

配置服務熔斷策略/服務降級。

5. 案例二

1)場景

運行中 Dubbo 服務提供方訪問註冊中心失敗,在註冊中心機器注入故障網絡丟包 100%。

2)監控指標

定義系統穩態指標,在 SkyWalking 控制臺選擇服務端點,穩態指標如下:

com.alibabacloud.hipstershop.cartserviceapi.service.CartService.viewCart 服務正常

3)期望假設

上遊服務業務不受影響,下遊服務不受影響。

4)混沌實驗

對註冊中心埠注入丟包故障(100%),我們是使用的 nacos 作為 Dubbo 的註冊中心,默認埠 8848,網卡是 eth0,命令參數如下:

--interface eth0 網卡--percent 100 丟包率100%--local-port 本地埠 8848下發命令注入故障:

blade create network loss --interface eth0 --percent 100 --local-port 8848

5)監控指標

在注入故障後,在 SkyWalking 控制臺選擇服務端點,穩態指標如下:

com.alibabacloud.hipstershop.cartserviceapi.service.CartService.viewCart 服務正常

結論:服務對註冊中心是弱依賴且服務本身具有本地緩存,符合期望假設。

假設應用現在部署 Kubernetes 集群中,可以增加驗證註冊中心水平擴容能力,ChaosBlade 同時也支持 Kubernetes 集群場景

6. 牛刀小試

在上訴案例中,我們驗證了服務是否配置了超時和熔斷策略,驗證了 Dubbo 是否對註冊中心是弱依賴且服務本身具有本地緩存。你是否也躍躍欲動,想要在自己系統中體驗一把?ChaosBlade 為大家準備了豐富的實驗場景,不僅支持基礎資源、應用維度,還是雲原生平臺的一把利器。 ChaosBlade 易於使用,也提供了詳細的參數來控制故障最小爆炸半徑,相信 ChaosBlade 會讓大家非常容易上手。

紙上得來終覺淺,這裡我們提供一個額外的小案例,供大家實踐。我們在應用開發中經常會與關係資料庫打交通,而當應用流量快速增長時,瓶頸往往會在資料庫端發生,出現很多慢 SQL。當沒有慢 SQL 預警時,我們很難找到原始 SQL 並對它進行優化,所以慢 SQL 預警十分重要。如何驗證應用具備這個能力,ChaosBlade 就可以支持注入 MySQL 慢 SQL 故障,執行

blade create mysql delay -h

查看 MySQL 調用延遲的命令用法:

Mysql delay experimentUsage: blade create mysql delayExamples:# Do a delay 2s experiment for mysql client connection port=3306INSERT statementblade create mysql delay --time 2000 --sqltype select --port 3306Flags: --databasestring The database name which used --effect-countstring The count of chaos experiment in effect --effect-percent string The percent of chaos experiment in effect -h, --help help for --host string The database host --offsetstring delay offsetfor the time --override only for java now, uninstall java agent --pid string The process id --port string The database port which used --process string Application process name --sqltype string The sql type, for example, select, updateand so on. --table string The first table name in sql. --time string delay time (required) --timeout stringset timeout for experiment in secondsGlobal Flags: -d, --debug Set client to DEBUG mode --uid stringSet Uid for the experiment, adapt to docker

可以看到 ChaosBlade 提供了完整的案例,支持更細粒度的 SQL 類型,表名等參數。對連接埠時 3306 的 select 操作延時 10s 看看,當流量命中時,是否在你的應用中產生了預警呢?

bladecreatemysqldelay --time10000 --sqltypeselect --port3306

命令參數解釋:

--time 10000 延時 10s--sqltype select 僅支持 select 類型的 SQL 語句--port 3306 僅支持埠是 3306 的連接總結

在本篇文章中,我們介紹了混沌工程在實際複雜分布式架構中的應用,並且結合 ChaosBlade 和 SkyWalking 在實際應用中進行混沌實驗,從而可以根據故障的情況來對系統分析優化,持續提升系統的穩定性和高可用能力。ChaosBlade 不僅支持基礎資源、應用維度,還是雲原生平臺的一把利器,歡迎大家嘗試使用。

本文為阿里雲原創內容,未經允許不得轉載。

相關焦點

  • skywalking-1:skywalking3.2.6生產級部署(歷史總結)
    skywalking-agent:非侵入式agent,是應用服務的一部分。/apache/incubator-skywalking/releases/download/v3.2.6/skywalking-web.tar.gz解壓得到skywalking-agent, skywalking-web, skywalking-collector(4
  • 阿里工程師公開高可用架構筆記
    本文整理自高用戶、突發高流量場景下的真實案例,公布阿里在高可用架構建設過程中的實踐筆記,期待幫助更多企業從容應對接下來的高流量場景。你的應用為什麼崩了?非常複雜的服務端在我們的日常生活中因為 app 側相對穩定,「崩」一般發生在看不見摸不著的「服務端」(或者叫雲端),而這個服務端有多複雜?
  • Apache SkyWalking 漏洞安全風險公告
    點擊「閱讀原文」,訪問官方更新通告和升級連結:  https://github.com/apache/skywalking/releases/tag/v8.1.0
  • 贈書|SkyWalking 觀測 Service Mesh 技術大公開
    通用Service Mesh的協議保存在https://github.com/apache/skywalking-data-collect-protocol/blob/v6.6.0/service-mesh-probe/service-mesh.proto。
  • 泰隆銀行發布小微金融服務標準
    央廣網南京9月28日消息 據泰隆銀行蘇州分行提供的消息:泰隆銀行今天在浙江工商大學召開「小微金融服務標準發布會」,對外發布泰隆銀行服務小微企業的企業標準——這是我國銀行業金融機構首次公開發布小微金融服務標準。
  • The walking zombie
    The walking zombie 休閒益智 大小: 92.76M
  • 泰隆銀行「小微金融服務標準」發布會在我校舉行
    」在浙江工商大學舉行,現場發布泰隆銀行服務小微企業的企業標準,這是我國銀行業金融機構首次公開發布小微金融服務標準。   陳柳裕在致辭中表示,本次發布「小微金融服務標準」,不僅有利於強化對中小微企業的普惠性金融支持,也將為推動我國小微、普惠金融發展提供依據和範例。
  • 「文明實踐與志願服務——2020年靜安區新時代文明實踐中心全國...
    試點近一年來,靜安秉持「黨建引領、共同實踐、融入治理」的工作原則,積極探索、勇於實踐,湧現出了一批有特色、有亮點的活動品牌和有效做法,新時代文明實踐中心辦公室從創新性、貼近性、可操作性等角度進行考量,將優秀案例彙編成《探索與實踐——靜安區新時代文明實踐志願服務發展案例集》,以鮮活的案例指導和推進新時代文明實踐工作向縱深發展。
  • 禁毒微宣進社區——長沙學院影傳學院開展暑期社會實踐活動
    為增強新時代大學生服務社會、奉獻社會的實踐能力,響應中國禁毒部門「青少年毒品預防教育「627」工程」專項行動,2020年暑假,長沙學院影傳學院「青春不『毒』行」團隊以線上線下相結合的方式進行了禁毒宣傳暑期社會實踐活動。
  • 「營口有禮 從我做起」新時代文明實踐志願服務綜合信息平臺上線
    活動現場供圖營口新聞傳媒中心國際在線遼寧頻道消息:近日,營口市舉行「營口有禮從我做起」新時代文明實踐志願服務綜合信息平臺上線暨營口市志願服務指揮調度中心揭牌儀式。
  • 寶可夢Home現已登陸任天堂商城 免費版下載可用
    寶可夢Home現已登陸任天堂商城 免費版下載可用,該服務允許玩家將不同平臺(手機或NS)上的寶可夢進行交換和傳輸,此外iOS和安卓APP也已經上架。
  • Walking a tight rope?
    In other situations, walking the tight rope becomes synonymous with having to be careful and cautious at one’s work, especially with having to find a balance between two extremes.
  • 【實踐】什麼?這個區的調解微課堂是老「凡爾賽」了!
    【實踐】什麼?這個區的調解微課堂是老「凡爾賽」了! 最近,聽說阿拉楊浦人民調解新推出了個系列微課堂
  • 智能家居巨頭 Aqara 基於 KubeSphere 打造物聯網微服務
    ,微服務平臺為 App、SaaS 等應用提供數據,反向應用通過一系列安全鑑權、認證來調用綠米微服務平臺,實現控制智能家居設備。  截止目前為止,這一套物聯網微服務平臺已經在我們綠米聯創的生產運行半年多且無大問題出現,因此,我們計劃在近期把公司開發、測試、生產環境中所有的有狀態和無狀態服務全部遷移到 KubeSphere 上去。  問答  Q:使用過程有沒有遇到什麼問題?  A: 有的,比如 DevOps 流水線解決 War/Jar 包發布問題。
  • 雅思口語新題解析:Walking
    Would you say that your city is a good place for walking?   4. When and where do you usually walk?   5. Who do you walk with?
  • Eurocom推出Nightsky ARX15高性能筆記本 頂配可選AMD 16核處理器
    雖然起步價僅為 1999 美元(1.42 萬 RMB),但加上各種頂級選項之後,Eurocom Nightsky ARX15 的價格可輕鬆超越 1.5 萬美元(約 10.7 萬 RMB)。銳龍 9 3950X 基於 Matisse Zen 2 架構,此外 Eurocom Nightsky ARX15 還可選擇 8 核 / 16 線程的銳龍 7 3700X 臺式處理器,差價為 417 美元。
  • 民生銀行北京分行:傾力服務助小微
    今年以來,作為在國內小微金融領域領先的民營銀行,民生銀行北京分行第一時間主動開展客戶回訪,了解客戶需求,加強對重點領域、重點行業、重點企業金融服務,創新金融產品提升服務質效,積極響應政府號召開展延期還本付息,主動開展費用減免向小微企業讓利等方式,確保對小微企業不抽貸、不斷貸,全力為小微企業提供優質金融服務。
  • 泛亞人力榮獲「中國服務外包人力資源服務機構最佳實踐五強」
    2014年10月28日,「第二屆服務外包人才培養及服務機構最佳實踐」評選活動榜單正式揭曉,泛亞人力榮獲「中國服務外包人力資源服務機構最佳實踐五強」。「第二屆服務外包人才培養及服務機構最佳實踐」評選活動由鼎韜產業研究院、國家服務外包人力資源研究院、中國服務外包校企聯盟、中國外包網聯合主辦,中國服務貿易協會專家委員會、全國服務外包考試管理中心共同支持,希望藉此次評選活動,通過各產業要素之間的合作與努力,構建中國服務外包的人才供應體系,規模化培養中國服務外包高質量高素質人才,更好地促進中國服務外包產業朝著專業化
  • 文明實踐志願服務便民暖心 江夏區五裡界街界鎮社區新時代文明實踐站
    按照「十有」標準建設界鎮社區文明實踐站,即有場所、有氛圍、有隊伍、有制度、有服務、有書屋、有活動、有移風易俗、有經費、有成效。在五裡界界鎮社區文明實踐站自然生成了16 支志願者服務隊,常態化活動在社區村灣。
  • 姚智鑫walking in the sun完整歌詞介紹
    姚智鑫walking in the sun完整歌詞  Walking in the Sun(姚智鑫 / IZZI remix) - 姚智鑫 / IZZI  Walking in the Sun in around and around  I can believe love at is around  Walking