简介: 混沌工程随着云原生的倒退逐步进入大家的视线,通过混沌工程能够很好地发现和解决在云原生化过程中的高可用问题。阿里巴巴在 2019 年开源了底层的混沌工程工具 – chaosblade,今年年初再次开源混沌工程控制台 chaosblade-box,ChaosBlade 品牌进一步降级。本文次要围绕云原生面临的高可用挑战和混沌工程时机,具体介绍开源控制台的设计、个性和实际和将来布局,旨在帮忙企业更好的理解控制台并通过其来实现混沌工程落地,解决云原生零碎下高可用问题。
作者 | 肖长军(穹谷)
起源 | 阿里巴巴云原生公众号
混沌工程随着云原生的倒退逐步进入大家的视线,通过混沌工程能够很好地发现和解决在云原生化过程中的高可用问题。阿里巴巴在 2019 年开源了底层的混沌工程工具 – chaosblade,今年年初再次开源混沌工程控制台 chaosblade-box,ChaosBlade 品牌进一步降级。本文次要围绕云原生面临的高可用挑战和混沌工程时机,具体介绍开源控制台的设计、个性和实际和将来布局,旨在帮忙企业更好的理解控制台并通过其来实现混沌工程落地,解决云原生零碎下高可用问题。
去年年底 AWS 和 Google 都呈现了比较严重的服务故障:AWS 故障是因为解决数据流服务 kinesis 呈现问题,导致很多云服务不可用;Google 故障是因为登录服务的扩容配额问题导致多服务不可用。从中能够发现,他们都存在因服务依赖不合理,导致一个服务故障影响多个服务不可用,短少应急预案,整个故障复原工夫比拟长,监控告警零碎不欠缺等问题,Google 故障产生几十分钟后才感知故障的产生,AWS 的 CloudWatch 处于不可用的状态。故障不可避免,所有的所有时时刻刻存在着失败的危险。
尤其随着麻利开发、DevOps、微服务、云原生架构和治理的呈现,利用的交付能力大大晋升,但零碎的复杂度也日益减少,在业务疾速迭代的同时,如何保障业务继续的高可用性和稳定性面临着很大的挑战。混沌工程通过被动注入故障的形式,提前发现零碎的薄弱点,推动架构的改良,最终实现业务韧性。
打不倒我的必使我弱小,建设韧性架构是混沌工程的指标。韧性架构蕴含两局部,一部分是韧性零碎,比方具备冗余性、扩展性、降级熔断、故障隔离等,防止级联故障,构建容灾容错的韧性零碎。另一部分是韧性组织,蕴含高效交付、故障预案、应急响应等组织协同建设。高度韧性的零碎也会呈现预期之外的故障,所以韧性的组织能补救韧性零碎缺失的局部,通过混沌工程构建极致的韧性架构。
常见的云原生高可用架构架构基本上是基于多可用区,或者是跨地区级的容灾架构,业务利用采纳微服务架构下集群部署,中间件具备容错容灾能力等等。从底层设施到下层业务,都存在潜在的故障危险,比方机房断网、整个可用区不可用、集群宕机、中间件节点 crash 等。从可用区到集群、主机,再到细粒度的申请,故障影响的爆炸半径逐步减小,这也是混沌工程准则中十分重要的一点 — 管制爆炸半径。管制爆炸半径的形式个别有两种:一是环境隔离,通过隔离试验的机房、集群等来管制影响面;二是基于试验工具或平台本身的场景控制能力,比方 chaosblade 试验工具,通过试验参数来管制试验粒度,比方微服务调用提早,能够管制到单个服务接口、版本,甚至一次申请。上面咱们来介绍一下 chaosblade 混沌试验工具。
Chaosblade 是一款遵循混沌试验模型的混沌试验执行工具,具备场景丰盛度高、简略易用等特点,而且扩大场景也特地不便,开源不久便被退出到 CNCF Landspace 中,成为支流的一款混沌工具。chaosblade 是个间接下载解压即可应用的工具,不须要装置,它反对的调用形式蕴含 CLI 形式,间接执行 blade 命令,这里举个做网络屏蔽的例子:咱们增加 -h 参数就能够看到十分欠缺的命令提醒,比方要一个 9520 端口调用做网络丢包,它的演练指标是 network;它的 action 是丢包;它的 matcher 就是调用近程的一个服务端口 9520。执行胜利后会返回试验后果,每一个试验场景咱们都会作为一个对象,它会返回一个试验对象的 UID,此 UID 用于后续的试验治理,比方销毁、查问试验都是通过此 UID 来做的。要销毁试验,也就是复原试验,间接执行 blade destroy 命令就能够。
Chaosblade 反对多平台、多语言环境,蕴含 Linux、Kubernetes、Docker 平台,以及 Java、NodeJS、C++、Golang 语言利用。共波及 200 多个场景、3000 多个参数,为用户提供丰盛的场景和试验参数管制。应用 blade -h 命令能够查看具体的应用文档,蕴含案例和场景、参数介绍。上面咱们重点介绍一下 chaosblade 对应用服务场景的反对。
Chaosblade 反对 Java、C++、Golang、NodeJS 语言利用,其中对 Java 利用的反对能力更丰盛,蕴含 OOM、线程池满、指定线程数、CPU 负载、codecache 满等 JVM 自身的场景,还反对很多罕用组件,比方 Druid、Dubbo、Elasticsearch、HBase、HttpClient、Redis、Kafka、Lettuce、MongoDB、MySQL、PostgreSQL、RabbitMQ、RocketMQ、Servlet、Tars、gRPC 等。Java 场景更弱小的一个性能是可用指定任意类和办法注入异样、提早、篡改返回,甚至能够通过本人编写 Groovy 或 Java 脚本,实现更加简单的试验场景来满足本身业务试验需要。还反对链路标识辨认、申请数限度等能力。Golang 场景是通过编译时在任意代码行注入埋点逻辑来实现,目前反对批改变量值、批改参数值、批改返回值、异样、提早、内存溢出和 Panic 场景。当初,已登记的试用或在应用的企业曾经 40 家,其中蕴含一些深度单干共建的企业用户。上面咱们举个例子来阐明 chaosblade 故障注入的执行流程。
以云原生 Dubbo 利用调用上游 PetQueryService 服务提早三秒故障场景为例,咱们能够通过 chaosblade 自带的 blade 工具或 kubectl 以及通过编码的形式来执行。此处列举了应用 kubectl 和本身的 blade 工具执行。先看应用 kubectl 执行,通过配置 ChaosBlade 类型的 YAML 文件,应用 kubectl apply 命令来创立试验,Kubernetes 会创立一条 chaosblade 资源,后续通过 kubectl delete 命令删除此征询即可复原试验。创立好 chaosblade 资源后,chaosblade operator 监听 chaosblade 资源创立,查问指标容器,按需透传场景相干的试验工具,调用 blade 工具在容器内执行试验。应用 blade 执行,命令如上图,指定 K8s 下的 dubbo 利用注入提早故障,通过 process 参数指定利用名、time 参数指定延迟时间、service 参数指定受影响的服务接口、names 参数和 container-names 别离指定 Pod 和 Container 名称,如果不分明参数能够增加 -h 来查看命令帮忙。
通过以上案例能够看出 chaosblade 工具应用简略,而且反对丰盛的试验场景,咱们在此工具的根底上做了 ChaosBlade 品牌降级。
咱们开源了 chaosblade-box 混沌工程控制台,可实现混沌试验平台化操作,而且反对更多混沌工程试验工具的托管,比方 litmuschaos 等。品牌降级后,咱们更进一步地解决了用户落地混沌工程的艰难度,让用户将更多的精力放到推动零碎韧性晋升上,旨在通过混沌工程帮忙企业解决零碎云原生化过程中高可用问题。
Chaosblade-box 是一个面向多集群、多环境、多语言的云原生混沌工程平台。要害性能如下所示:
- 实现了试验工具自动化部署,无需用户登录到每台机器部署试验工具,简化用户部署老本。
- 反对试验工具托管,当初已反对 litmuschaos,后续会反对更多优良的试验工具来满足各种试验场景需要。
- 通过提供对立的混沌试验用户界面,屏蔽底层故障注入形式,让用户在同一个平台上实现不同工具的试验。
- 反对试验指标主动获取、试验场景治理等等。
- 反对多个试验维度,比方主机、Kubernetes、利用,其中 Kubernetes 又蕴含 Container、Pod、Node 试验维度。
- 后续会更进一步反对混沌工程闭环,实现稳态定义、试验执行、稳态评估等,帮助用户构建高可用的云原生零碎。
上面通过页面截图来理解一下 chaosblade-box 平台能力。
通过上述图片能够看出 chaosblade-box 平台整体性能,在托管更多工具场景的根底上,标准化试验场景和试验管控界面,简化用户操作,升高应用门槛,提供具体的白屏化日志,便于问题跟踪和排查。接下来咱们看下平台技术架构图。
通过控制台页面可实现 chaosblade、litmus 等已托管的工具部署,依照社区的建设的混沌试验模型对立试验场景,依据主机、Kubernetes、利用来划分指标资源,通过指标管理器来管制,在试验创立页面,能够实现白屏化的指标资源抉择。平台通过调用混沌试验执行来执行不同工具的试验场景,配合接入 prometheus 监控,能够察看试验 metric 指标,后续会提供丰盛的实验报告。
_
_Chaosblade-box 的部署也非常简单,具体能够查看:https://github.com/chaosblade-io/chaosblade-box/releases_。
上面咱们通过一个杀 Pod 试验场景来介绍平台的应用。
首先是部署 chaosblade-box,部署实现后,在试验列表页面创立试验,抉择 Kubernetes Pod 试验维度,试验创立共分为四步,前两步资源抉择和场景抉择是必填项,后两步监控接入和试验名称是非必填项。在 Pods 列表中抉择多个指标 Pods,而后抉择杀 Pods 试验场景,对接 Prometheus Pod 监控,实现试验创立。在试验详情页面能够点击执行试验进入试验工作详情页面,查看试验详细信息。
Chaosblade-box 后续布局重点在托管更多的试验工具,实现更多工具自动化部署,同时反对更多的语言利用,增加更加简单的调度策略和流程编排,生成实验报告,实验报告分三个阶段,一是试验根底报告,蕴含试验和监控的根本信息,二是试验缺点报告,蕴含试验中发现的问题,三是试验高可用建设报告,依据试验中发现的问题提出解决方案倡议。
原文链接
本文为阿里云原创内容,未经容许不得转载。