为什么80%的码农都做不了架构师?>>>   

在分布式架构环境下,服务间的依赖日益复杂,可能没有人能说清单个故障对整个系统的影响,构建一个高可用的分布式系统面临着很大挑战。在可控范围或环境下,使用 ChaosBlade 工具,对系统注入各种故障,持续提升分布式系统的容错和弹性能力,以构建高可用的分布式系统。

ChaosBlade 是什么?

ChaosBlade 是一款遵循混沌工程实验原理,建立在阿里巴巴近十年故障测试和演练实践基础上,并结合了集团各业务的最佳创意和实践,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具。点击这里,了解详情。

ChaosBlade 无需编译,下载解压即可使用,支持基础资源、Java 应用、容器服务类的混沌实验,特点是操作简洁、无侵入、扩展性强。

ChaosBlade @GitHub,点击进入

下面我们以微服务分布式系统举例,一步一步构建高可用的分布式系统。

构建高可用的分布式系统

ChaosBlade 的使用方式

ChaoBlade 通过 CLI 方式调用,比如我们模拟 A 服务调用 B 提供的 com.alibaba.demo.HelloService 服务下的 hello 服务延迟 3 秒,我们可以在 B 应用上注入延迟故障,仅需两步操作:
第一步:准备阶段。由于 Java 应用的故障注入是通过 Java Agent 机制实现,所以首先要先挂载 agent,执行的命令是 blade prepare jvm --process <PROCESS NAME OF B APPLICATION>
第二步:执行阶段,注入故障。执行命令是 blade create dubbo delay --time 3000 --service com.alibaba.demo.HelloService --methodname hello --provider,即对 B 服务提供方提供的 com.alibaba.demo.HelloService#hello 服务注入 3 秒延迟。

ChaosBlade 使用简洁,如果想了解命令的如何使用,可在命令后面添加 -h 参数,比如 blade create dubbo delay -h。更详细的 chaosblade 操作,可详见新手指南

分布式系统高可用原则

高可用的分布式系统一般需要满足以下原则:

  • 失败重试
  • 实例隔离
  • 请求限流
  • 服务降级
  • 服务熔断
  • 流量调度
  • 开关&预案
  • 监控告警
  • 日志跟踪

混沌实验场景实践

我们以 A 调用 B,B 调用 C,A 同时也调用 D 举例,A1、A2 是 A 服务的多个实例,依次类推。

失败重试

实验场景:调用下游服务实例异常。
容错方案:会再次请求另外一个服务实例进行重试。
场景模拟:对 B1 注入异常故障,A 服务调用到 B1 时会出现调用失败。
预期方案:系统会将 A 服务的请求路由到 B2 进行重试。
blade 命令:blade c dubbo throwCustomException --exception <EXCEPTION CLASS> --service <SERVICE NAME> --provider
修复方案:添加失败检测和请求重试能力。

实例隔离

演练场景:多次调用下游一个服务实例超时。
容错方案:会隔离或者下线此服务实例,防止请求路由到此服务实例。
场景模拟:对 B1 注入延迟故障,A 服务调用到 B1 时,出现调用超时。
预期方案:系统会自动隔离或下线 B1 实例。
blade 命令:blade c dubbo delay --time <DELAY TIME> --service <SERVICE NAME> --provider
修复方案:添加服务质量检查,下线不可用的服务实例。

请求限流

演练场景:服务线程池满。
容错方案:会对入口流量进行限流,防止请求堆积,资源耗尽导致服务不可用。
场景模拟:对 A 注入线程池满故障。
预期方案:线程池满时,触发限流,新请求快速失败。
blade 命令:blade c dubbo threadpoolfull --consumer
修复方案:添加限流能力。

服务降级

演练场景:A 对 B 是强依赖,对 D 是弱依赖,A 调用 D 线程数多,争抢调用 B 服务的资源。
容错方案:对弱依赖 B 进行降级,减少资源分配。
场景模拟:对 A 注入调用 D 线程数满故障。
blade 命令:blade c dubbo threadpoolfull --service <D SERVICE NAME> --consumer
修复方案:梳理服务依赖,添加服务降级能力。

调用熔断

演练场景:下游服务不可用
容错方案:触发熔断,快速失败返回
场景模拟:对 B 服务所有的实例注入延迟超时故障。
blade 命令:blade c dubbo delay --time <DELAY TIME> --service <SERVICE NAME> --provider
修复方案:当下游服务不可用时,能立即熔断,快速失败。

流量调度

演练场景:上游高并发下,扩容下游服务,在服务实例初始化时,CPU 负载高,导致上游服务受影响
容错方案:当服务实例机器负载高时,自动切流到正常机器
场景模拟:对 B1 做 CPU 满载操作。
blade 命令:blade c cpu fullload
修复方案:添加系统、应用资源监控和流量调度能力。

系统预案

演练场景:杀掉服务实例。
容错方案:快速拉起或扩容
场景模拟:杀掉 B 大部分实例。
blade 命令: blade create process kill --process <PROCESS NAME>
修复方案:添加相关系统预案。

监控告警

注入任意故障,验证监控告警的有效性

日志跟踪

演练场景:修改应用中具体方法返回值。
容错方案:全链路调用日志记录。
场景模拟:修改 B 服务的一个业务方法的返回值。
blade 命令:blade c jvm return --classname <CLASS NAME> --methodname <METHOD NAME> --value <RETURN VALUE>
修复方案:添加全链路日志记录,便于排查和追溯问题。

总结

通过 ChaosBlade 工具能简洁有效的执行混沌实验,上文提到的请求限流、降级熔断功能可以使用 Sentinel 来解决。阿里云 AHAS 产品已经集成混沌工程平台 和 Sentinel 功能。ChaosBlade 除了上述实验场景,还有更多的场景期待你来挖掘。

后续规划

ChaosBlade 后续会继续增强对 Java 生态的混沌实验,比如对 Redis、GRPC、RabbitMQ 等主流组件的支持。也会增加云原生设施的混沌实验,比如 Kubernetes、Service Mesh 等。

参与贡献

欢迎加入 ChaosBlade 社区,参与混沌工程生态建设,贡献不局限于代码,也可以是想法、文档、和社区答疑、讨论。

作者:中间件小哥

原文链接

本文为云栖社区原创内容,未经允许不得转载。

转载于:https://my.oschina.net/yunqi/blog/3049315

借助混沌工程工具 ChaosBlade 构建高可用的分布式系统相关推荐

  1. 阿里开源混沌工程工具 ChaosBlade

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   近日,阿里开源了混沌工程工具 ChaosBlade.该项目是遵循混沌工程(Chaos Engineering)原理 ...

  2. 云原生 | 混沌工程工具 ChaosBlade Operator Pod 篇(文末赠书)

    作者:丁源 RadonDB 测试负责人 负责 RadonDB 云数据库.容器化数据库的质量性能测试,迭代验证.对包括云数据库以及容器化数据库性能和高可用方案有深入研究. 继<混沌工程工具 Cha ...

  3. 六年打磨!阿里开源混沌工程工具 ChaosBlade

    阿里妹导读:减少故障的最好方法就是让故障经常性的发生.通过不断重复失败过程,持续提升系统的容错和弹性能力.今天,阿里巴巴把六年来在故障演练领域的创意和实践汇浓缩而成的工具进行开源,它就是 " ...

  4. 面向云原生的混沌工程工具-ChaosBlade

    作者 | 肖长军(穹谷)阿里云智能事业群技术专家 导读:随着云原生系统的演进,如何保障系统的稳定性受到很大的挑战,混沌工程通过反脆弱思想,对系统注入故障,提前发现系统问题,提升系统的容错能力.Chao ...

  5. 干货 | 阿里巴巴混沌测试工具ChaosBlade两万字解读

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 一.前言 ChaosBlade 是一款遵循混沌工程实验原理,建立在阿里巴巴近十年故障测试和演练 ...

  6. 混沌工程工具-阿里ChaoBlade的原理与安装模拟CPUIO异常

    混沌工程工具-阿里ChaoBlade的原理与安装模拟CPU&IO异常 1.概述 从这篇文章开始,介绍一个有趣的测试工程它就是混沌工程. 2.混沌工程介绍 2.1.混沌工程定义 英文原著定义 根 ...

  7. 《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理

    本节书摘来自华章出版社<构建高可用Linux服务器 第3版>一 书中的第1章,第1.4节,作者:余洪春 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.4 ...

  8. 如何构建高可用和可伸缩的架构?

    如何构建高可用和可伸缩的架构? 发表于2015-09-22 13:42| 4669次阅读| 来源CSDN| 5 条评论| 作者蒲婧 CTOCTO俱乐部CTO讲堂云存储七牛架构高可用 width=&qu ...

  9. 阿里云 mysql 高可用_如何在阿里云上构建高可用应用

    原标题:如何在阿里云上构建高可用应用 业务高可用是我们每个项目的需求,一个经常故障的项目,会让我们觉得不靠谱而选择放弃,从而导致项目的失败.今天,我们来聊一聊,如何让你自己的业务能够更加稳固的运行! ...

最新文章

  1. 人工智能改进传统云ERP的10种方法
  2. java生成pdf看不到至值_java生成pdf报错找不到DPF标题签名
  3. vSphere+Openfiler备忘录
  4. JAVA实现telnet代理,对输入命令拦截
  5. oracle的sga
  6. 减治求有重复元素的全排列
  7. 动态规划——乘积最大子数组(Leetcode 152)
  8. Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解
  9. 优雅的使用springboot集成任务调度
  10. 浅谈html的语义化和一些简单优化,浅谈HTML的语义化和一些简单优化
  11. mvc路由原理 php_s-blog博客系统开发之前端路由配置
  12. 【ROM定制】Fastboot Enhance —— 适合人类使用的Fastboot + Payload.bin 解包工具箱
  13. vs2019键盘钩子_低级键盘钩子回调函数
  14. 国开大学计算机原理边学边练,国家开放大学计算机组成原理
  15. mysql dcn_Tdsql DCN同步技术原理介绍
  16. android ae动画教程,AE动画转Web代码工具指北-Lottie
  17. JavaScript之DOM对象
  18. Zerotier 搭建moon
  19. 利用vbox安装服务器操作系统,在Linux服务器上使用Vbox安装虚拟机(示例代码)
  20. 快数据如何在物联网高速公路上驱动分析

热门文章

  1. 白话Elasticsearch45-深入聚合数据分析之易并行聚合算法,三角选择原则,近似聚合算法
  2. Spring OXM-XStream转换器
  3. androidx使用FileProvider适配安卓7
  4. 连云港职业技术学院有计算机系吗,连云港职业技术学院电子信息工程技术专业...
  5. linux函数实验报告,linux实验报告
  6. javadrawstring设置字符大小_LaTex学术写作——编辑文档格式 设置论文标题与摘要...
  7. 【新星计划】Matlab实现数据导出
  8. java 注解 demo_JAVA语言注解概念使用及Demo讲解
  9. 华硕服务器 u盘安装系统,华硕用u盘如何安装系统
  10. axios nodejs 上传图片_Vue Axios跨域、文件上传