ChaosBlade x SkyWalking 微服务高可用实践

头图.png

来源|阿里巴巴云原生公众号

前言

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

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

1.png

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 以内。

2.png

3)期望假设

  • 配置调用超时时间,不会长时间阻塞客户端请求。
  • 配置服务熔断策略/服务降级。

4)混沌实验

在上节我们已经介绍过 ChaosBlade 的安装和简单实用,本次案例我们使用 ChaosBlade 对下游 Dubbo 购物车服务注入延迟故障(延迟时间 30 秒),执行 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

参考案例和参数解释,需要上游服务客户端注入延迟故障(延迟时间 30 秒),借助 SkyWalking 可以很方便找到链路上 Dubbo 服务相关信息,首先查询端点为 /cart 的链路,在链路上找到 Dubbo 服务,如下图:

  • 查找链路

3.png

  • 获取协议详细信息

4.png

点进来可以查看 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 左右

5.png

  • /cart 接口调用报错,com.alibabacloud.hipstershop.cartserviceapi.service.CartService 服务出现异常。

6.png

  • 出现 timeout 异常,超时时间为 2000ms

7.png

结论说明上游服务配置了调用超时时间,但没有配置服务熔断策略,实际是不符合预期的。

8.jpg

6)修复问题

配置服务熔断策略/服务降级。

5. 案例二

1)场景

运行中 Dubbo 服务提供方访问注册中心失败,在注册中心机器注入故障网络丢包 100%。

2)监控指标

定义系统稳态指标,在 SkyWalking 控制台选择服务端点,稳态指标如下:

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

9.png

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 服务正常

10.png

结论:服务对注册中心是弱依赖且服务本身具有本地缓存,符合期望假设。

11.jpg

假设应用现在部署 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=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 类型,表名等参数。对连接端口时 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 不仅支持基础资源、应用维度,还是云原生平台的一把利器,欢迎大家尝试使用。

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现用户通信授权的可信、可知、可追溯?——通信授权服务技术解读

目前,如何防治骚扰电话,保障呼叫中心市场绿色、健康的市场环境,是监管部门、企业和大众都非常关注的社会问题。在高频迭代的通信业务中,企业如何安全快速获取用户授权同意,同时保障用户体验?12月9日&#x…

阿里10年:一个普通技术人的成长之路

一 关于我 宋健,花名宋意,2008年开始参加工作,至今12年多一直专注在运维领域。2010年6月加入支付宝,做过监控、SRE、资源管理、运维产品等方面的工作,经历并参与了阿里运维从脚本到工具化再到自动智能化的演进过程&am…

米熊科技:给烘培加点“云”的味道

烘焙已经成为中国年轻消费者崇尚的潮流时尚和休闲减压的新选择,拥有巨大的市场发展空间。据Euromonitor International发布的报告显示,2020年中国烘焙食品市场规模预计达到2567亿元。 北京米熊科技发展有限公司(以下简称“米熊科技”&#xf…

梁胜:开源是最好的商业模式

编辑 | 宋 慧 出品 | CSDN云计算 头图 | ECIC大会现场 伴随着容器、Kubernetes及微服务等技术热度的持续攀升,云原生已经成为云计算领域的主流与核心话题。 2021年7月21日,由全球企业级开源解决方案知名厂商SUSE举办的第四届“企业云原生创新大会Enter…

专访 CNCF 大使张磊:让云原生不再是大厂专属

近日,GitHub 上的 Go 语言趋势榜出现了一个新的项目 —— KubeVela。 据项目官方文档,KubeVela 是“一个简单易用且高度可扩展的应用管理平台与核心引擎,KubeVela 是基于 Kubernetes(K8s)与 Open Application Model&am…

开发者,别让自己孤独

作者 | 溪洋来源|阿里巴巴云原生公众号 “社会之所以能够运作,并不是人类有意使然,而是因为它是进化过程中出现的人类秉性。确切地说,它就是人性的一部分。” _——《美德的起源》马特里德利_ 所谓“助人者自助”,或许协作、互助这…

智稳双全--AnalyticDB如何助力菜鸟运配双十一

#今年双十一快递有多快#、#双十一快递比外卖还快# 这些话题在今年双十一期间频繁出现在热搜榜上,“凌晨付款起床收货”成了今年双十一快递时效的新标签。作为天猫官方物流服务提供方,今年菜鸟联合14家快递公司为消费者提供了如任意门般的天猫双十一物流体…

AliExpress智能营销引擎大揭秘 - AnalyticDB如何做到快准狠省

业务介绍 AliExpress(简称AE)是从集团内wholesale孵化出来面向全球消费者的B2C电商平台,目前也是全球化电商业务的排头兵。当前AE为全球220个国家提供在线购物服务,支持3端(PC、Msite和APP)、18种语言&…

千万商家的智能决策引擎--AnalyticDB如何助力生意参谋双十一

作者:算法&健兮,阿里巴巴数据技术及产品部技术专家 生意参谋介绍 生意参谋是阿里官方打造的全渠道、全链路、一站式数据平台,致力于为用户提供经营分析、市场洞察、客群洞察等多样化数据服务,帮助用户全面提升商业决策效率。…

广播电视加速技术迭代,如何用新技术拥抱行业转型?

12月7日,国家广播电视总局印发了《广播电视技术迭代实施方案(2020-2022年)》。该文件指出,广电将利用3年左右时间,实现全行业未来大转型的,通过广播电视技术迭代,加快重塑广电媒体新生态&#x…

php有多少种占位符,php 占位符问题?

为什么我echo出来的东西就是一个%s?而不是我赋值的字符串?完整代码:IndexAction.class.php// 本类由系统自动生成,仅供测试用途class IndexAction extends Action {public function index(){$this->responseMsg();}public function respo…

我们为什么需要云原生?看完这一篇就够了

作者 | 侯淼淼出品 | CSDN(ID:CSDNnews)云原生这个词对于业内大多数人来说都不陌生,伴随着云计算的蓬勃发展,大有愈演愈烈之势,已经赫然成为企业数字化转型的重要基石。与此同时,无数的新兴词汇…

Serverless 如何落地?揭秘阿里核心业务大规模落地实现

简介: 2020 年,新冠肺炎疫情催化数字化生活方式渐成常态。在企业积极进行数字化转型、全面提升效率的今天,几乎无人否认背负“降本增效”使命诞生的 Serverless 即将成为云时代新的计算范式。 来源|阿里巴巴云原生公众号 2020 年&#xff0c…

linux使用ping命令ping本机,Linux下使用ping命令判断网络的好坏

简介在Linux系统里面如果想判断网络的好坏,脑海中蹦出的第一个命令就是ping了。ping命令基本是最常用的网络命令,它可以用来测试与目标主机的连通性。ping通过发送ICMP ECHO_REQUEST数据包到网络主机,并显示返回的相应情况,根据这…

分布式事务框架 seata-golang 通信模型详解

简介: Java 的世界里,大家广泛使用的一个高性能网络通信框架 netty,很多 RPC 框架都是基于 netty 来实现的。在 golang 的世界里,getty 也是一个类似 netty 的高性能网络通信库。getty 最初由 dubbogo 项目负责人于雨开发&#xf…

移动云TeaTalk(长沙站)| 聚焦“云网一体”发展新机遇

聚焦“云网一体”发展新机遇移动云TeaTalk(长沙站)云网一体,“湘”遇“湘”融 。7月23日, 移动云TeaTalk沙龙第四站在长沙成功举办。活动围绕中国移动“云网一体”理念,介绍云网产品体系规划以及各领域产品应用&#x…

宜泊科技加入阿里云原生合作伙伴计划,共建智慧停车新生态

简介: 在过去几年里,“云原生”的概念逐渐被广大的企业所熟知。云原生给企业带来了巨大的价值:一方面,统一的容器编排角度,给企业带来了更好的资源利用率和管理的效率;另一方面,云原生的技术实践…

红旗Linux网卡绑定,Linux bonding 之balance-alb 原理介绍及其实现

要求:首先要安装bonding driver 和 ifenslave。bonding driver 是实现网卡绑定的软件基础,它在很多系统中都作为模块而加载。ifenslave 是实现网卡绑定的一个实用工具。检查系统是否符合这两个要求:[rootnode1 bin]# lsmod | grep bondbondin…

大数据时代,如何用数据驱动精准营销

简介: 针对Yeahmobi在全球业务中需要统一治理数据资产和提供高并发、高弹性的存储服务需求,阿里云为Yeahmobi构建了一站式的数据湖解决方案。 Yeahmobi介绍 Yeahmobi是一家技术驱动发展的国际化智能营销服务公司,致力于为客户提供精准的全球…

百度获得国内首批无人驾驶乘用车高速公路道路测试资质

7月27日,第二十三届中国科协年会在北京拉开帷幕。在自动驾驶汽车产业落地与示范运营分论坛上,北京市高级别自动驾驶示范区推进工作组负责人孔磊介绍了《北京市高级别自动驾驶示范区建设阶段成果及2.0规划》,并向部分企业颁发了国内首批乘用车…