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

在分布式架构环境下,服务间的依赖日益复杂,可能没有人能说清单个故障对整个系统的影响,构建一个高可用的分布式系统面临着很大挑战。在可控范围或环境下,使用 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 等。


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

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

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

相关文章

etcd 在超大规模数据场景下的性能优化

概述 etcd是一个开源的分布式的kv存储系统, 最近刚被cncf列为沙箱孵化项目。etcd的应用场景很广&#xff0c;很多地方都用到了它&#xff0c;例如kubernetes就用它作为集群内部存储元信息的账本。本篇文章首先介绍我们优化的背景&#xff0c;为什么我们要进行优化, 之后介绍et…

时间复杂度的表示、分析、计算方法……一文带你看懂时间复杂度!

作者 | OverRedMaple责编 | Carol来源 | CSDN 博客封图 | CSDN付费下载于东方 IC如果你还在发愁究竟怎么计算时间复杂度和空间复杂度&#xff0c;那你是来对地方了&#xff01;名词解释&#xff1a;在计算机科学中&#xff0c;时间复杂性&#xff0c;又称时间复杂度&#xff0c…

ThreadPoolExecutor中的keepAliveTime详解

文章目录一、keepAliveTime的概念二、keepAliveTime的设置方法2.1. 通过构造函数设置2.2. 通过setKeepAliveTime方法动态设置三、线程是如何根据keepAliveTime进行销毁的阅读这篇文章&#xff0c;你将会知道&#xff1a; keepAliveTime的概念。 keepAliveTime是如何设置的。 线…

OPPO数据中台之基石:基于Flink SQL构建实数据仓库

本文整理自 2019 年 4 月 13 日在深圳举行的 Flink Meetup 会议&#xff0c;分享嘉宾张俊&#xff0c;目前担任 OPPO 大数据平台研发负责人&#xff0c;也是 Apache Flink contributor。本文主要内容如下&#xff1a; OPPO 实时数仓的演进思路&#xff1b;基于 Flink SQL 的扩…

如何实现7*24小时灵活发布?阿里技术团队这么做

研发效能分为两块&#xff0c;一是用技术的更新来提升效率&#xff1b;二是提高整个技术生态中的协同效率&#xff0c;激发技术活力。阿里巴巴技术团队在此基础上要实现的终极目标是打造7*24小时灵活发布的通道&#xff0c;以及提供更快的业务代码迭代能力。今天&#xff0c;阿…

不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码...

作者 | chen_01_c责编 | Carol来源 | CSDN 博客封图 | CSDN付费下载于视觉中国hadoop介绍Hadoop 是 Lucene 创始人 Doug Cutting&#xff0c;根据 Google 的相关内容山寨出来的分布式文件系统和对海量数据进行分析计算的基础框架系统&#xff0c;其中包含 MapReduce 程序&#…

数据科学家是个性感的工作?我信你个鬼!

数据科学家40%是个吸尘器&#xff0c;40%是个清洁工&#xff0c;剩下20%是个算命的。作者 | Jingles译者 | 香槟超新星&#xff0c;责编 | 夕颜出品 | CSDN&#xff08;ID:CSDNnews&#xff09;根据《哈佛商业评论》的说法&#xff0c;数据科学家是21世纪最性感的工作。在现在这…

深入搜索引擎原理

之前几段工作经历都与搜索有关&#xff0c;现在也有业务在用搜索&#xff0c;对搜索引擎做一个原理性的分享&#xff0c;包括搜索的一系列核心数据结构和算法&#xff0c;尽量覆盖搜索引擎的核心原理&#xff0c;但不涉及数据挖掘、NLP等。文章有点长&#xff0c;多多指点~~ 一…

印度版的“大众点评”如何将 Food Feed 业务从 Redis 迁移到 Cassandra

Zomato 是一家食品订购、外卖及餐馆发现平台&#xff0c;被称为印度版的“大众点评”。目前&#xff0c;该公司的业务覆盖全球24个国家&#xff08;主要是印度&#xff0c;东南亚和中东市场&#xff09;。本文将介绍该公司的 Food Feed 业务是如何从 Redis 迁移到 Cassandra 的…

利用Packer自定义镜像创建容器集群

阿里云容器服务Kubernetes集群支持CentOS操作系统&#xff0c;在绝大多数情况下可以满足客户的要求。但是有些客户由于业务系统对操作系统依赖比较高&#xff0c;希望定制化一些操作系统参数&#xff0c;则可以用自定义镜像来创建Kubernetes集群。 创建自定义操作系统镜像有两…

“远程”、“协作”风靡之际,你对TA知晓多少?

作者|晶少 转载|CSDN博客 2.4亿人在线使用文档协作无延宕…… 6万名武汉中小学生实力打造“远程课堂”活学高效…… 疫情以来&#xff0c;“远程”、“协作”持续大热&#xff0c;此局毋庸置疑。 根据QuestMobile最新发布的《2020中国移动互联网“战役”专题报告》显示&am…

蚂蚁金服OceanBase性价比是传统数据库的十倍

200名数据库领域从业三年以上的会员投票和专业的评委评选&#xff0c;在如此严苛的条件之下&#xff0c;蚂蚁金服金融级分布式关系数据库OceanBase 2.0依然获得了专家评审团的一致青睐&#xff0c;荣获2019中国数据库技术大会的“年度最佳创新产品”奖。 蚂蚁金服资深总监韩鸿源…

战疫内外,京东智联云如此“一鸣惊人”!

作者|晶少 转载|CSDN博客 鼠年春节&#xff0c;一场疫情突如其来地打破了人们平静的生活&#xff1b;但在滨州&#xff0c;一款名为“疫情助手”的上线软件却为滨州市民的疫情生活带来“雪中送炭”的丝丝温情&#xff0c;细微知著中人们深深感受到了京东诠释而来的“ABCDE”技…

亿级消息系统的核心存储:Tablestore发布Timeline 2.0模型

背景 互联网快速发展的今天&#xff0c;社交类应用、消息类功能大行其道&#xff0c;占据了大量网络流量。大至钉钉、微信、微博、知乎&#xff0c;小至各类App的推送通知&#xff0c;消息类功能几乎成为所有应用的标配。根据场景特点&#xff0c;我们可以将消息类场景归纳成三…

SLS机器学习最佳实战:日志聚类+异常告警

0.文章系列链接 SLS机器学习介绍&#xff08;01&#xff09;&#xff1a;时序统计建模SLS机器学习介绍&#xff08;02&#xff09;&#xff1a;时序聚类建模SLS机器学习介绍&#xff08;03&#xff09;&#xff1a;时序异常检测建模SLS机器学习介绍&#xff08;04&#xff09;…

大数据成长之路:谈谈那些必须学习的Linux基础知识

作者| Roy瑞士责编| Carol封图| CSDN│下载于视觉中国这里主要介绍学习大数据过程中用到的Linux基础知识&#xff0c;现在主攻的方向是大数据开发&#xff0c;欢迎大家共同交流。环境推荐安装VMware虚拟机并安装CentOS操作系统&#xff0c;具体资源的下载和安装可以查到&#x…

数据可用不可见!揭秘蚂蚁区块链摩斯安全计算平台

“数据安全”与“隐私泄漏”制约数字经济长期发展 在新的商业智能时代&#xff0c;已形成广泛的共识&#xff1a;数据是最基础的生产资料&#xff0c;各个行业与企业对于数据的利用也步入成熟期。可见的未来&#xff0c;数据利用的深度和广度将进一步升级&#xff0c;进入跨机…

如何与亦敌亦友的 null 说拜拜?大神原来是这么做的!

作者| 沉默王二责编| Carol封图| CSDN│下载于视觉中国从 10 年前我开始写第一行 Java 代码至今&#xff0c;一直觉得 null 在 Java 中是一个最特殊的存在&#xff0c;它既是好朋友&#xff0c;可以把不需要的变量置为 null 从而释放内存&#xff0c;提高性能&#xff1b;它又是…

K8s中Pod健康检查源代码分析

了解k8s中的Liveness和Readiness Liveness: 表明是否容器正在运行。如果liveness探测为fail&#xff0c;则kubelet会kill掉容器&#xff0c;并且会触发restart设置的策略。默认不设置的情况下&#xff0c;该状态为success. Readiness: 表明容器是否可以接受服务请求。如果re…

CSE:阿里在线应用如何演进成Serverless架构

Cloud Service Engine&#xff0c;简称CSE&#xff0c;是中间件部门研发的面向通用Serverless计算的中间件产品&#xff0c;目标是具备AWS Lambda的各种优势&#xff0c;同时可以解决AWS Lambda的关键技术缺陷。 AWS Lambda如果用于核心业务&#xff0c;可能会有以下缺陷&…