2023-11-01chaosblade混沌实战白话描述

阿里ChaosBlade介绍与具体实践:

课堂笔记:

打不倒我的必使我强大。减少故障的最好方法就是让问题经常性的发生。在可控范围或环境下,通过不断重复失败过程,指线提升系统的稳定性和容错能力。

小结:提高分布式系统的容错能力,构建对系统的信心。

混沌工程的五个原则:

1、建立一个围绕稳定状态行为的假说

2、多样化真实世界的事件

3、在生产环境中运行实验

4、持续自动化运行实验

5、最小化爆炸半径

混沌工程的应用场景:

1、提升系统的容错能力,提高稳定性.

2、评估系统容灾红线 杀实列杀多少数量不会对业务造成影响。

3、验证云服务、云资源的动态扩容能力

4、验证监控、告警的有效性和问题处理流程是否完善

5、故障突袭,提升相关人员定位、恢复问题的能力、测试网络基础资源故障。

为什么要实施混沌工程?

核心收益价值:减少故障,降低业务的止损。提高系统的弹性和容错能力。

混沌实验模型:

混沌实验前要明确的问题:

你对什么做实验?目标

混沌实验实施的范围是是什么?控制最小爆炸半径是什么

实验生效的匹配条件有哪些?

最后一个action具体实施什么实验

你要对调用dubbo服务延迟 需要知服务接口、服务版本号等

答:举例:一个运行在10.0.0.1机器上的应用,调用com.example.HelloService@1.0.0dubbo 服务延迟3s

对照字面模型如下:

Target->实验靶点实验组件->指的是dubbo组件

Scope->实验范围:集群、机器等。->指的是10.0.0.1机器

Matcher->规则匹配器,实验匹配条件。->HelloService是指匹配器、及版本1.0.0。

Action->实验行为:具体执行的实验规则。->延迟

对应到ChaosBlade命令

blade create dubbo delay --time 3000 --consumer --service comexample.HelloService --version

工具特点&支持的实验

场景丰富度高.

使用简洁,易于理解

动态加载,无入侵

场景扩展方便

支持运行时长设置

CPU 满载

网络延迟、丢包、屏蔽

域名屏蔽

磁盘填充,磁盘I0 读写负载

杀进程

删容器、Pod

Java 应用或组件内延迟、抛异常、指定返回值

常用命令

blade create cpu fullload  cpu满载

blade destroy 7c1f7afc281482c8 销毁这一次演练

blade status 7c1f7afc281482c8 状态

blade prepare jvm --process dubbo.consumer 挂载准备工作

blade status --type prepare

JVM的异常处理和错误处理机制是保证程序稳定性和可靠性的重要组成部分。异常处理通过使用try-catch语句捕获和处理异常,保证程序在出现异常时能够进行适当的处理,避免程序的中断选择合适的异常处理和错误处理方式,提高程序的健壮性和可维护性。

docker run -it registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest

启动成功查看README.TXT 信息。

dubbo例子说明:

比如演练 Java 应用,则需要挂载 java agent。例如要演练的应用名是 business,则在目标主机上执行 blade p jvm --process business business。如果挂载成功,返回挂载的 uid,用于状态查询或者撤销挂载。

实验之前先观察curl http://localhost:8080/dubbo/hello?name=dubbo 查看是否成功。

返回值:Hello dubbo, response from provider: 172.17.0.3:20880

# 创建一个实验是调用sayHello service时延迟3秒,

blade create dubbo delay --time 3000 --service com.example.service.DemoService --methodname sayHello --consumer

返回值:{"code":200,"success":true,"result":"bd98f9dc3a6cfbbb"}

如果uid找不到可以使用命令:blade status --type c

刚才调用延迟3秒现在检查结果:

执行: curl http://localhost:8080/dubbo/hello?name=dubbo 返回:chaosblade-mock-TimeoutException,timeout=1000 超时异常,dubbo调用是1秒。

指定类方法抛自定义异常,命令可以简写为 blade c jvm tce

案例抛Exception

类名:com.example.controller.DubboController,业务代码如下:

private String sayHello(String name) throws BeansException {

    demoService = (DemoService)SpringContextUtil.getBean("demoService");

    StringBuilder result = new StringBuilder();

    result.append(demoService.sayHello(name));

    return result.toString();

}

blade c jvm throwCustomException --exception java.lang.Exception --classname com.example.controller.DubboController --methodname sayHello --process tomcat --effect-count 2

{"code":200,"success":true,"result":"3abbe6fe97d6bc75"}

做这些实验的用处是啥?具体价值

场景价值?

场景一:验证服务隔离能力

演练场景:

对 Dubbo 服务提供方 Provider A 注入延迟,验证问题实例隔离能力

演练目标:

下线 Provider A,所有请求都访问 Provider B,减少对上层服务的影响

容灾方案:

检测 PorivderA 服务质量,自动下线 Provider A 实例,Dubbo 将所有请求发送给 Provider B

2个Porivder 提供相同的服务。

Consumer->Readis注册中心->PorivderA OR PorivderB

验证Provider A 实例是否被隔离,杀掉或者下线。减少对上层服务的影响。

检测中心检测A服务质量,自动隔离or下线,Dubbo框架主动发往B,涉及负载均衡随机。

如果不杀掉进程会影响QPS.

隔离或者下线。

总结场景1:如果系统高可用的时候,等一个服务出现问题时。我们要对这个服务隔离或下线。这样才能确保正常的流量请求到正确的服务。但是我们当前测试的这个系统没有做到这一点。接下来对这个系统进行完善,之后再进行测试。来观察还是否出现问题这就是混沌工程。

场景二:验证熔断降级

演练场景:对 Dubbo 服务提供方 Provider A和 Provider B 注入延迟,模拟服务提供方访问慢的场景,验证上层服务熔断降级的能力

演练目标:

Consumer 访问服务超时,触发 Consumer 系统熔断,下游服务故障不会导致 Consumer 服务不可用。

容灾方案:

给Consumer 配置降级规则,当调用下游服务超过2s 时,触发熔断,不会继续等待下游的响应。

大白话描述:对2个Provider制造故障,造成下游服务不可用的情况。我们来看上游服务的影响,如果是高可用的话下游服务不可用,它会有降级的策略。如果持续调下游服务的话,那么它的响应时间、RT、QPS会大幅度降低。导致它的资源耗尽自身的服务就不可用。这就不符合高可用架构的规则。

目的:当下游不可用的时候,上游服务策略问题。否保证上游不受冲击。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容