当前位置:

首页 > 系统应用 > ChaosBladexSkyWalking微服务高可用实践

ChaosBladexSkyWalking微服务高可用实践

本文目录

    前言在分布式系统架构下,服务组件繁多且服务间的依赖错综复杂,很难评估单个故障对整个系统的影响,而且请求链路长,如果监控告警、日志记录等基础服务不完善会造成故障响应、故障定位问题难,所以如何构建一个高可用的分布式系统面临着很大挑战。混沌工程就此产生,在可控范围或环境下通过对系统注入故障,观察系统行为并

    前言

    在分布式系统架构下,服务组件繁多且服务间的依赖错综复杂,很难评估单个故障对整个系统的影响,而且请求链路长,如果监控告警、日志记录等基础服务不完善会造成故障响应、故障定位问题难,所以如何构建一个高可用的分布式系统面临着很大挑战。混沌工程就此产生,在可控范围或环境下通过对系统注入故障,观察系统行为并发现系统缺陷,以建立对分布式系统因意外条件引发混乱的能力和信心,持续提升系统的稳定性和高可用能力。

    混沌工程的实施流程是制订混沌实验计划、定义稳态指标,做出系统容错行为假设,然后执行混沌实验,检查系统稳态指标等。也因此混沌实验整个过程需要可靠的、易于使用且场景丰富的混沌实验工具注入故障以及完整的分布式链路追踪和系统监控工具,以便触发应急响应预警方案与快速地进行故障定位,并观察整个过程系统的各项数据指标等。本篇文章我们介绍混沌实验工具(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 toolkit

    Usage:
    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 load

    Usage:
    blade create cpu fullload

    Aliases:
    fullload, fl, load

    Examples:

    # 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 创建实验成功后会返回一个UID,执行 blade destroy uid 即可。
    • 如果找不到对应的UID时,执行 blade destroy target action 即可,例如 blade destroy cpu fullload。
    • 在创建实验时带上 --timeout 10 参数,在实验场景执行十秒后会自动恢复,同时支持表达式,例如三分钟 --timeout 30m。

    3. 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.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)、产品(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 to do delay experiments, support provider and consumer

    Usage:
    blade create dubbo delay

    Examples:
    # 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 --consumer

    Flags:
    --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 version

    Global Flags:
    -d, --debug Set client to DEBUG 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 experiment

    Usage:
    blade create mysql delay

    Examples:
    # Do a delay 2s experiment for mysql client connection port=3306 INSERT statement
    blade create mysql delay --time 2000 --sqltype select --port 3306

    Flags:
    --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 seconds

    Global Flags:
    -d, --debug Set client to DEBUG mode
    --uid string Set Uid for the experiment, adapt to docker

    可以看到 ChaosBlade 提供了完整的案例,支持更细粒度的 SQL 类型,表名等参数。对连接端口时 3306 的 select 操作延时 10s 看看,当流量命中时,是否在你的应用中产生了预警呢?

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

    命令参数解释:

    • --time 10000 延时 10s
    • --sqltype select 仅支持 select 类型的 SQL 语句
    • --port 3306 仅支持端口是 3306 的连接
    总结

    此篇文章里,详细阐述了混沌工程在实际复杂分布式架构中的具体应用情况。并且,还结合了ChaosBlade与SkyWalking,在实际应用场景中开展混沌实验。通过这样的方式,能够依据故障状况对系统进行深入分析与优化,进而持续增强系统的稳定性以及高可用能力。值得一提的是,ChaosBlade不仅在基础资源、应用维度方面提供支持,更是云原生平台的得力工具,欢迎广大读者积极尝试使用。

    ChaosBlade 项目地址:https://github.com/chaosblade-io/chaosblade , 欢迎大家加入,一起共建!点击查看贡献指南。

    作者信息

    叶飞:Github @tiny-x,开源社区爱好者,ChaosBlade Committer,参与推动 ChaosBlade 混沌工程生态建设。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    系统应用
    相关文章 更多
    win10升级新版本后取消开机密码失效怎么修复
    win10升级新版本后取消开机密码失效怎么修复

    Windows 10更新后开机突然要求输入密码?本文解析自动登录失效的真实原因,提供通过netplwiz重新保存凭据、关闭Windows Hello干扰及排查账户策略的完整步骤,助你恢复免密进入桌面。

    win10更新没下载完反复重试该怎么停止任务
    win10更新没下载完反复重试该怎么停止任务

    Windows 10更新下载失败反复重试怎么办?不要直接停用服务。本文教你通过设置页面暂停更新、启用按流量计费连接以及调整活动时间,安全地暂时停止下载任务并避免意外重启。

    win10怎么取消系统准备强制升级新版本
    win10怎么取消系统准备强制升级新版本

    面对Win10强制升级新版本的提示,本文解析家庭版与专业版的应对差异。介绍如何通过暂停更新、设置活动时间临时避让,以及利用组策略控制功能版本。强调Windows 10支持终止后的安全风险,避免使用高风险的禁用服务手段。

    win10组策略找不到更新选项该怎么处理
    win10组策略找不到更新选项该怎么处理

    Win10组策略编辑器中找不到Windows Update选项怎么办?本文分析家庭版与专业版的权限差异,厘清本地策略与域策略的区别,提供设置页替代方案及企业环境排查思路,避免盲目修改注册表或安装非官方补丁。

    win10取消开机密码会影响电脑里的文件安全吗?
    win10取消开机密码会影响电脑里的文件安全吗?

    很多人为了便捷选择取消 Win10 开机密码,这会导致文件丢失吗?本文详解取消密码后文件访问权限的变化、BitLocker 加密的有效性以及更安全的替代方案,帮助用户在便利与数据安全之间做出正确选择。

    win10弹出立即重启更新怎么延后这个操作
    win10弹出立即重启更新怎么延后这个操作

    Win10弹出立即重启更新会打断工作?本文介绍如何通过Windows Update页面安排重启时间、设置活动时段以及暂停后续更新,有效延后重启操作,保护未保存的工作成果。

    win10自动更新在夜间偷偷运行怎么限制
    win10自动更新在夜间偷偷运行怎么限制

    Win10晚上自动下载或重启怎么办?不要直接禁用服务。本文教你通过设置活动时间、安排指定重启时间及短期暂停更新,精准控制Windows Update行为,避免夜间网络占用和意外重启,同时保留系统安全性。

    win10本地账户取消开机密码有哪些简单方法
    win10本地账户取消开机密码有哪些简单方法

    想跳过Win10开机输入密码?本文详解本地账户清空密码、netplwiz自动登录及PIN设置的步骤与区别,同时提醒Microsoft账户和域策略下的限制与风险。

    win10更新重启倒计时怎么取消不让电脑重启
    win10更新重启倒计时怎么取消不让电脑重启

    面对Win10更新重启倒计时,如何通过设置界面取消或延后?本文详解活动时间、安排重启及暂停更新的位置与作用,帮助你在不影响工作的前提下管理系统重启。

    win10取消开机密码重启后还要输密码怎么办?
    win10取消开机密码重启后还要输密码怎么办?

    Win10设置取消密码后重启依然要求输入?这通常不是系统故障,而是自动登录配置错误或睡眠唤醒验证未关闭。本文教你区分本地账户与微软账户,正确设置netplwiz自动登录,并检查锁屏策略,彻底解决开机免密问题。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。