• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 【混沌工程】基于ChaosBlade實現網絡故障模擬

    標簽: 網絡  linux  混沌工程  Chaos  ChaosBlade  丟包

    一、前言

    很久之前曾基于linux內核自帶的TC和netem模擬一些公網中遇到的極端情況(延遲、丟包、重復、損壞和亂序等),驗證了我們傳輸程序的健壯性!
    具體細節可見這篇老博客: https://blog.csdn.net/u013128262/article/details/84784663

    最近在復現kafka生產端一個timeout異常場景時,發現之前方案時因為內核和OS版本問題有些差異而無法直接使用老的命令,便把目光迅速調整到阿里開源的這款混沌工程新貴ChaosBlade(https://github.com/chaosblade-io/chaosblade
    )。

    二、ChaosBlade簡介

    ChaosBlade 是阿里巴巴開源的一款遵循混沌工程原理和混沌實驗模型的實驗注入工具,幫助企業提升分布式系統的容錯能力,并且在企業上云或往云原生系統遷移過程中業務連續性保障。

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

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

    在這里插入圖片描述
    ChaosBlade還提供混沌實驗管理工具,包含創建實驗、銷毀實驗、查詢實驗、實驗環境準備、實驗環境撤銷等命令,是混沌實驗的執行工具,執行方式包含 CLI 和 HTTP 兩種。提供完善的命令、實驗場景、場景參數說明,操作簡潔清晰。

    所以ChaosBlade是可以非常方便地支持網絡故障模擬場景!

    三、使用ChaosBlade實現網絡故障模擬

    Talk is cheap,just do it!

    1、下載程序包

    直接從github上下載最新的程序包: https://github.com/chaosblade-io/chaosblade/releases

    2、ChaosBlade支持的網絡故障實驗

    [$] <> ./blade create network -h
    Network experiment
    
    Usage:
      blade create network [flags]
      blade create network [command]
    
    Examples:
    network delay --interface eth0 --time 3000
    
    # You can execute "blade query network interface" command to query the interfaces
    
    Available Commands:
      corrupt     Corrupt experiment
      delay       Delay experiment
      dns         Dns experiment
      drop        Drop experiment
      duplicate   Duplicate experiment
      loss        Loss network package
      occupy      Occupy the specify port
      reorder     Reorder experiment
    
    Flags:
      -h, --help   help for network
    
    Global Flags:
      -d, --debug        Set client to DEBUG mode
          --uid string   Set Uid for the experiment, adapt to docker
    

    從helper看出ChaosBlade支持一下網絡故障模擬:

    • corrupt Corrupt experiment 網絡包損壞實驗場景
    • delay Delay experiment 網絡延遲實驗場景
    • dns Dns experiment 篡改 dns 域名解析實驗場景
    • drop Drop experiment 網絡屏蔽實驗場景
    • duplicate Duplicate experiment 網絡屏蔽只支持端口,不支持整個網卡,具有局限性,建議使用網絡丟包 100% 來替代此命令
    • loss Loss network package 網絡丟包實驗場景
    • occupy Occupy the specify port 網絡本地端口占用
    • reorder Reorder experiment 網絡包重排序實驗場景

    更多操作詳見官方入門手冊: https://github.com/chaosblade-io/chaosblade/wiki/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97

    3、使用網絡丟包實驗場景

    復現kafka生產端timeout場景的話,直接使用最常用的網絡丟包實驗即可。
    Loss network package 支持的參數:

         --destination-ip string   destination ip. Support for using mask to specify the ip range such as 92.168.1.0/24 or comma separated multiple ips, for example 10.0.0.1,11.0.0.1.
          --exclude-ip string       Exclude ips. Support for using mask to specify the ip range such as 92.168.1.0/24 or comma separated multiple ips, for example 10.0.0.1,11.0.0.1
          --exclude-port string     Exclude local ports. Support for configuring multiple ports, separated by commas or connector representing ranges, for example: 22,8000. This flag is invalid when --local-port or --remote-port is specified
          --force                   Forcibly overwrites the original rules
          --ignore-peer-port        ignore excluding all ports communicating with this port, generally used when the ss command does not exist
          --interface string        Network interface, for example, eth0 (required)
          --local-port string       Ports for local service. Support for configuring multiple ports, separated by commas or connector representing ranges, for example: 80,8000-8080
          --percent string          loss percent, [0, 100] (required)
          --remote-port string      Ports for remote service. Support for configuring multiple ports, separated by commas or connector representing ranges, for example: 80,8000-8080
          --timeout string          set timeout for experiment
    

    我們實際的一個demo:

    # eth0發往遠端9092端口的數據包將持續120s丟包5%
    blade create network loss --percent 5 --interface eth0 --remote 9092 --timeout 120
    

    執行完會有一個狀態返回值:

    {"code":200,"success":true,"result":"5cbde40d2594f891"}
    

    通過status 參數可以查詢到實際的狀態

    blade status 5cbde40d2594f891
    

    四、實現分析

    ChaosBlade功能強大,并且提供了便捷的使用接口和管理工具。
    作為一個技術人不但要用好工具,更要了解工具的運行原理!

    ChaosBlade基礎資源相關的實現都在chaosblade-exec-os這個模塊。

    我們先看看程序入口:
    https://github.com/chaosblade-io/chaosblade-exec-os/blob/master/exec/network_loss.go

    此處主要還是一些業務邏輯,沒有核心實現。

    https://github.com/chaosblade-io/chaosblade-exec-os/blob/master/exec/bin/tcnetwork/tcnetwork.go

    不難看出ChaosBlade在網絡故障模擬底層技術仍然是TC和netem這2大殺器。

    版權聲明:本文為u013128262原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/u013128262/article/details/106590097

    智能推薦

    【Python+OpenCV】視頻流局部區域像素值處理-一種特征提取方法

    參考我之前寫的處理圖片的文章:Python+OpenCV實現【圖片】局部區域像素值處理(改進版) 開發環境:Python3.6.0 + OpenCV3.2.0 任務目標:攝像頭采集圖像(例如:480*640),并對視頻流每一幀(灰度圖)特定矩形區域(480*30)像素值進行行求和,得到一個480*1的數組,用這480個數據繪制條形圖,即在逐幀采集視頻流并處理后“實時”顯示采...

    JavaWeb——【前端】——注冊頁面

    頁面效果 實現代碼 注意事項 主要使用的bootstrap樣式 如果想引用,不要直接復制,沒用的。 先介紹下所引用的文件: boostrap的js、bootstrap的css、jquery的js、以及自己編寫的register.css。 因為博主用的thymeleaf語法,所以有th符號。 若要使用時,根據個人情況導入相應的依賴。...

    網站HTTP升級HTTPS完全配置手冊

    本文由葡萄城技術團隊于博客園原創并首發 轉載請注明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 今天,所有使用Google Chrome穩定版的用戶迎來了v68正式版首個版本的發布,詳細版本號為v68.0.3440.75,上一個正式版v67.0.3396.99發布于6月13日,自Chrome 68起,當在加載非HTTPS站點時,都會在地址欄上明確標記為&ldqu...

    echarts 自定義儀表盤設置背景圖片

    echarts儀表盤 使用插件 vue-echarts 代碼示例 HTML部分 js部分 效果圖...

    RT-Thread Studio部分定時器時鐘不正確的解決方案

    在昨天的RT-Thread Studio硬件定時器hwtimer在stm32f411上的使用筆記中,遇到了部分定時器速度想象中和實際不一致的情況,具體表現在定時器2、3、4、5、9、10、11都正常,但定時器1要快一倍。 仔細查看代碼,找到了原因。 因為代碼使用的是工程是直接生成的時鐘代碼,實際的時鐘頻率是這樣的: 而實際的定時器時鐘配置代碼如下: 針對F411,去掉其中的宏定義是這樣的: 這里說...

    猜你喜歡

    symfony學習筆記之模板渲染-----twig總結

    參考:https://blog.csdn.net/liebert/article/details/77414217 目錄 一、模板引擎工作原理 二、Twig模板引擎 1.運行環境要求 2.基本API用法 3.設計模板 (1)變量輸出         a.全局變量         b.設置變量 (2)...

    小甲魚Python3學習筆記之第六講(僅記錄學習)

    第六講:python之常用操作符 一、知識點: 0.算術運算符:+,-,*,/,%(取模,即求余數),**(冪運算),//(地板除法,取整除,返回商的整數部分) 備注:①雙斜杠 // 除法總是向下取整。             ②從符點數到整數的轉換可能會舍入也可能截斷,建議使用math....

    Java 習題 (21)

    題目: 寫一個程序,打印從1 到 100 的值。 解答: 答案如下: (只是截取結果一部分) 如果覺得不錯,就用點贊或者關注來取代五星好評吧!...

    Pytorch 安裝

    Pytorch 安裝 已有Cuda 9.0,anaconda3,用conda命令安裝pytorch 驗證是否安裝成功 然后依次輸入 得到如下之類的輸出 驗證pytorch在當前GPU和cuda上是否能用...

    使用Python實現QQ郵箱/163郵箱的郵件發送

    QQ郵箱/163郵箱的郵件發送:py文件發送郵件內容相當于一個第三方的客戶端,借助于QQ/163郵箱服務器來發送的郵件。 主要配置:                 導入模塊——import  &...

    精品国产乱码久久久久久蜜桃不卡