日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ChaosBlade x SkyWalking 微服务高可用实践

發(fā)布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ChaosBlade x SkyWalking 微服务高可用实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

前言

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

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

工具介紹

1. ChaosBlade

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

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

  • 基礎資源:比如 CPU、內存、網(wǎng)絡、磁盤、進程等實驗場景;
  • Java 應用:比如數(shù)據(jù)庫、緩存、消息、JVM 本身、微服務等,還可以指定任意類方法注入各種復雜的實驗場景;
  • C++ 應用:比如指定任意方法或某行代碼注入延遲、變量和返回值篡改等實驗場景;
  • Docker 容器:比如殺容器、容器內 CPU、內存、網(wǎng)絡、磁盤、進程等實驗場景;
  • 云原生平臺:比如 Kubernetes 平臺節(jié)點上 CPU、內存、網(wǎng)絡、磁盤、進程實驗場景,Pod 網(wǎng)絡和 Pod 本身實驗場景如殺 Pod,容器的實驗場景如上述的 Docker 容器實驗場景;

ChaosBlade 將場景按領域實現(xiàn)封裝成一個個單獨的項目,不僅可以使領域內場景標準化實現(xiàn),而且非常方便場景水平和垂直擴展,通過遵循混沌實驗模型,實現(xiàn) chaosblade cli 統(tǒng)一調用 。

2. SkyWalking

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

  • 服務、服務實例、端點指標分析
  • 根本原因分析
  • 服務拓撲圖分析
  • 服務、服務實例和端點依賴性分析
  • 檢測到慢速服務和終結點
  • 性能優(yōu)化
  • 分布式跟蹤和上下文傳播
  • 數(shù)據(jù)庫訪問指標。檢測慢速數(shù)據(jù)庫訪問語句(包括SQL語句)。
  • 報警

工具安裝及使用

ChaosBlade 的安裝和使用都很簡便,ChaosBlade 各場景通過 chaosblade cli 統(tǒng)一調用,僅需要下載對應的 tar 包,解壓后使用 blade 可執(zhí)行文件來進行混沌實驗,下載地址詳見:https://github.com/chaosblade-io/chaosblade/releases 。

1. ChaosBlade 安裝

本次我們的實際環(huán)境是 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 ## 設置環(huán)境變量 export PATH=$PATH:chaosblade-0.9.0/ ## 測試 blade -h

2. ChaosBlade 使用

ChaosBlade 安裝完成后,僅需要使用 blade 可執(zhí)行文件即可創(chuàng)建目前所支持的所有場景的混沌實驗。首先使用 blade -h 查看如何使用,選擇子命令之后只需要逐層向下使用 -h 即可看到完整的使用案例以及各參數(shù)的詳細解析,下面我們來演示一下:

1)blade 如何使用

執(zhí)行 blade -h 可以查看支持命令有哪些:

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

2)創(chuàng)建實驗場景

比如創(chuàng)建 CPU 滿載場景,執(zhí)行 blade create cpu fullload -h 就可以查看具體的場景參數(shù),選擇相應參數(shù)執(zhí)行即可:

Create chaos engineering experiments with CPU loadUsage:blade create cpu fullloadAliases:fullload, fl, loadExamples:# Create a CPU full load experiment blade create cpu load#Specifies two random kernel's full load blade 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 創(chuàng)建實驗成功后會返回一個UID,執(zhí)行 blade destroy uid 即可。
  • 如果找不到對應的UID時,執(zhí)行 blade destroy target action 即可,例如 blade destroy cpu fullload。
  • 在創(chuàng)建實驗時帶上 --timeout 10 參數(shù),在實驗場景執(zhí)行十秒后會自動恢復,同時支持表達式,例如三分鐘 --timeout 30m。

3. SkyWalking 安裝&使用

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

工具部署好之后,下面我們將結合案例,主動出擊,通過故障注入,觀察系統(tǒng)行為,定位問題并發(fā)現(xiàn)系統(tǒng)缺陷,以便構建高可用的微服務系統(tǒng)。

應用容錯案例

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

1. 案例環(huán)境

  • Linux-AMD64,發(fā)行版本 CentOS-7.x
  • JDK1.8
  • chaosblade-0.9.0,下載地址:https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/0.9.0/chaosblade-0.9.0-linux-amd64.tar.gz
  • skywalking-apm-8.1.0,下載地址:https://www.apache.org/dyn/closer.cgi/skywalking/8.1.0/apache-skywalking-apm-8.1.0.tar.gz

2. 應用拓撲結構

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

3. 混沌實驗步驟

  • 制定混沌實驗計劃
  • 定義系統(tǒng)穩(wěn)態(tài)指標
  • 作出系統(tǒng)容錯行為假設
  • 執(zhí)行混沌實驗
  • 檢查穩(wěn)態(tài)指標
  • 記錄和恢復混沌實驗
  • 修復發(fā)現(xiàn)的問題
  • 自動化持續(xù)進行驗證

下面我們將根據(jù)混沌實驗步驟使用 ChaosBlade 實際進行混沌實驗。

4. 案例一

1)場景

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

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

2)監(jiān)控指標

定義系統(tǒng)穩(wěn)態(tài)指標,在 SkyWalking 控制臺選擇 /cart 端點,穩(wěn)態(tài)指標如下:

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

3)期望假設

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

4)混沌實驗

在上節(jié)我們已經(jīng)介紹過 ChaosBlade 的安裝和簡單實用,本次案例我們使用 ChaosBlade 對下游 Dubbo 購物車服務注入延遲故障(延遲時間 30 秒),執(zhí)行 blade create dubbo delay -h 命令查看 dubbo 調用延遲的命令用法:

Dubbo interface to do delay experiments, support provider and consumerUsage:blade create dubbo delayExamples: # Invoke com.alibaba.demo.HelloService.hello() service, do delay 3 seconds experiment blade 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, --debug Set client to DEBUG mode--uid string Set Uid for the experiment, adapt to docker

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

  • 查找鏈路

  • 獲取協(xié)議詳細信息

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

  • --time 30000 延遲30s
  • --service com.alibabacloud.hipstershop.cartserviceapi.service.CartService 服務
  • --methodname viewCart 服務方法
  • --process frontend Java 進程
  • --consumer 當前是 Dubbo 服務客戶端

下發(fā)命令注入故障:

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

5)監(jiān)控指標

注入故障后檢查系統(tǒng)指標,查看 SkyWalking 上的指標:

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

  • /cart 接口調用報錯,com.alibabacloud.hipstershop.cartserviceapi.service.CartService 服務出現(xiàn)異常。

  • 出現(xiàn) timeout 異常,超時時間為 2000ms

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

6)修復問題

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

5. 案例二

1)場景

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

2)監(jiān)控指標

定義系統(tǒng)穩(wěn)態(tài)指標,在 SkyWalking 控制臺選擇服務端點,穩(wěn)態(tài)指標如下:

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

3)期望假設

上游服務業(yè)務不受影響,下游服務不受影響。

4)混沌實驗

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

  • --interface eth0 網(wǎng)卡
  • --percent 100 丟包率100%
  • --local-port 本地端口 8848

下發(fā)命令注入故障:

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

5)監(jiān)控指標

在注入故障后,在 SkyWalking 控制臺選擇服務端點,穩(wěn)態(tài)指標如下:

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

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

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

6. 牛刀小試

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

紙上得來終覺淺,這里我們提供一個額外的小案例,供大家實踐。我們在應用開發(fā)中經(jīng)常會與關系數(shù)據(jù)庫打交通,而當應用流量快速增長時,瓶頸往往會在數(shù)據(jù)庫端發(fā)生,出現(xiàn)很多慢 SQL。當沒有慢 SQL 預警時,我們很難找到原始 SQL 并對它進行優(yōu)化,所以慢 SQL 預警十分重要。如何驗證應用具備這個能力,ChaosBlade 就可以支持注入 MySQL 慢 SQL 故障,執(zhí)行 blade create mysql delay -h 查看 MySQL 調用延遲的命令用法:

Mysql delay experimentUsage:blade create mysql delayExamples: # Do a delay 2s experiment for mysql client connection port=3306 INSERT statement blade create mysql delay --time 2000 --sqltype select --port 3306Flags:--database string The database name which used--effect-count string 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--offset string delay offset for 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, update and so on.--table string The first table name in sql.--time string delay time (required)--timeout string set timeout for experiment in secondsGlobal Flags:-d, --debug Set client to DEBUG mode--uid string Set Uid for the experiment, adapt to docker

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

blade create mysql delay --time 10000 --sqltype select --port 3306

命令參數(shù)解釋:

  • --time 10000 延時 10s
  • --sqltype select 僅支持 select 類型的 SQL 語句
  • --port 3306 僅支持端口是 3306 的連接

總結

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

ChaosBlade 項目地址:https://github.com/chaosblade-io/chaosblade , 歡迎大家加入,一起共建!點擊查看貢獻指南。

作者信息

葉飛:Github @tiny-x,開源社區(qū)愛好者,ChaosBlade Committer,參與推動 ChaosBlade 混沌工程生態(tài)建設。

總結

以上是生活随笔為你收集整理的ChaosBlade x SkyWalking 微服务高可用实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。