应用韧性增强

简介

应用韧性增强服务是一款遵循混沌工程实验原理并融合了火山引擎内部多年业务实践的产品,提供丰富故障场景,能够帮助分布式系统提升容错性和可恢复性,增强系统和应用的韧性,满足用户对系统和应用的高可用需求
notion image
 
notion image
notion image

流程

第一步:添加集群 第二步:创建实验场景 第三步:添加故障 第四步:运行实验场景 第五步:查看观测信息

故障类型

自有集群、VKE 集群中 Pod

注意
仅兼容 GCC 8.3.0 和 GDB 8.2.1 C++ 版本的集群支持 C++ 故障
故障对象
故障类型
故障名称
说明
网络
网络故障
Delay
网络包延迟。
Reject
拒绝网络服务。
Loss
网络包丢失。
Duplicate
网络包重复。
Reorder
网络包乱序。
Corrupt
网络包错误。
DNS 故障
Drop
DNS 访问超时。
容器
Pod 故障
Pod Kill
仅故障目标为 Kubernetes 中 Pod 时支持。终止指定的 Pod。
Container Hang
将指定进程挂起。
系统组件
系统故障
CPU
设置 CPU 使用百分比和内核数量,模拟 CPU 满载故障。
Memory
设置内存使用百分比,最高支持 100%,模拟 Memory 满载故障。
磁盘故障
IOPS 限制
设置磁盘某分区的 IO 次数限制,模拟多线任务受限的故障。
读写速度限制
设置磁盘某分区的读写速度限制,模拟读写慢的故障。
服务接口
服务接口故障
HTTP
仅故障目标为 Kubernetes 中 Pod 时支持。支持通过自定义 HTTP 请求设置故障。
服务代码
Java 故障
调用延迟
被调用的方法返回时间延长。
抛出自定义异常
在方法执行过程中抛出异常。填入异常名即可,例如 RuntimeExcepition。
内存溢出
JVM 堆(Heap)溢出或栈(Stack)溢出。
指定类返回值
自定义方法的返回值。目前支持 Int 或者 Strin,其中 String 类型参数值需要加双引号。
进程 CPU 使用率满载
使指定的 CPU 核数被 Java 进程满载。
Kill JVM
终止 Java 虚拟机进程。
垃圾回收
Java 虚拟机执行垃圾回收。
C++ 故障
修改变量
修改指定的变量值。目前支持 Int、Float、Double、Bool、Char、Char* 类型的变量。
修改返回值或提前返回
修改被调用的方法的返回值或使被调用的方法提前返回.目前支持 Int、Float、Double、Bool、Char、Char* 类型的返回值。
调用延迟
被调用的方法返回时间延长。

自有集群、VKE 集群中 Node

故障对象
故障类型
故障名称
说明
网络
网络故障
Delay
网络包延迟。
Reject
拒绝网络服务。
Loss
网络包丢失。
Duplicate
网络包重复。
Reorder
网络包乱序。
Corrupt
网络包错误。
DNS 故障
Drop
DNS 访问超时。
系统组件
系统故障
CPU
设置 CPU 使用百分比和内核数量。
Memory
设置内存使用百分比,最高支持 100%。
磁盘故障
Storage Full
磁盘空间满载。
磁盘 IO 繁忙
磁盘的读写繁忙。
文件新增
新建文件。
文件重命名
更新文件的名称。
文档删除
删除文件。
文件权限修改
更新文件的权限。
文件元数据修改
更新文件的元数据。
文档内容追加
更新文件的内容。
主机异常
主机异常故障
重启
重新启动主机。
杀进程
终止主机中的进程。
宕机
关闭主机。
自定义指令
执行用户自定义指令。

自有主机和 ECS 主机

故障对象
故障类型
故障名称
说明
网络
网络故障
Delay
网络包延迟。
Reject
拒绝网络服务。
Loss
网络包丢失。
Duplicate
网络包重复。
Reorder
网络包乱序。
Corrupt
网络包错误。
DNS 故障
Drop
DNS 访问超时。
系统组件
系统故障
CPU
支持设置 CPU 使用百分比和内核数量。
Memory
支持设置内存使用百分比,最高支持 100%。
磁盘故障
Storage Full
磁盘空间满载。
磁盘 IO 繁忙
磁盘的读写繁忙。
文件新增
新建文件。
文件重命名
更新文件的名称。
文档删除
删除文件。
文件权限修改
更新文件的权限。
文件元数据修改
更新文件的元数据。
文档内容追加
更新文件的内容。
主机异常
主机异常故障
重启
重新启动主机
杀进程
终止主机中的进程。
宕机
关闭主机。
自定义指令
执行用户自定义指令。

自有主机、ECS 主机中进程、容器

故障对象
故障类型
故障名称
说明
网络
网络故障
Delay
网络包延迟。
Reject
拒绝网络服务。
Loss
网络包丢失。
Duplicate
网络包重复。
Reorder
网络包乱序。
Corrupt
网络包错误。
进程
进程故障
进程挂起
将指定进程挂起一定时间。
系统组件
系统故障
物理机时钟漂移
指定虚拟机和实际时间的偏移时长。
磁盘故障
IOPS 限制
设置磁盘某分区的 IO 次数限制,模拟多线任务受限的故障。
读写速度限制
设置磁盘某分区的读写速度限制,模拟读写慢的故障。
服务代码
Java 故障
调用延迟
被调用的方法返回时间延长。
抛出自定义异常
在方法执行过程中抛出异常。填入异常名即可,例如 RuntimeExcepition。
内存溢出
JVM 堆(Heap)溢出或栈(Stack)溢出。
指定类返回值
自定义方法的返回值。目前支持 Int 或者 Strin,其中 String 类型参数值需要加双引号。
进程 CPU 使用率满载
使指定的 CPU 核数被 Java 进程满载。
Kill JVM
终止 Java 虚拟机进程。
垃圾回收
Java 虚拟机执行垃圾回收。
C++ 故障
修改变量
修改指定的变量值。目前支持 Int、Float、Double、Bool、Char、Char* 类型的变量。
修改返回值或提前返回
修改被调用的方法的返回值或使被调用的方法提前返回.目前支持 Int、Float、Double、Bool、Char、Char* 类型的返回值。
调用延迟
被调用的方法返回时间延长。

自有集群、VKE 集群节点和自有主机、ECS 主机中的中间件

说明
选择演练对象时,需要在 故障目标类型 中选择 中间件,然后在二级选项中选择目标集群或主机。
故障对象
故障类型
故障名称
说明
数据库
MySQL 故障
连接数
模拟数据库连接数达到上限。实际模拟的连接数将不超过客户端可发起的连接数的上限。例如客户端连接数上限为 600,设置的连接数为 1000,那么实际模拟的连接数为 600。
数据库压力
模拟数据库服务端访问量突增,造成数据库 CPU、内存、磁盘等指标突增。
数据库锁故障
模拟数据库数据表锁死无法查询或写入的故障。
自定义 SQL
根据业务场景通过 SQL 构建自定义故障。
PostgreSQL 故障
连接数
模拟数据库连接数达到上限。实际模拟的连接数将不超过客户端可发起的连接数的上限。例如客户端连接数上限为 600,设置的连接数为 1000,那么实际模拟的连接数为 600。
数据库压力
模拟数据库服务端访问量突增,造成数据库 CPU、内存、磁盘等指标突增。
数据库锁故障
模拟数据库数据表锁死无法查询或写入的故障。
自定义 SQL
根据业务场景通过 SQL 构建自定义故障。
SQL Server 故障
连接数
模拟数据库连接数达到上限。实际模拟的连接数将不超过客户端可发起的连接数的上限。例如客户端连接数上限为 600,设置的连接数为 1000,那么实际模拟的连接数为 600。
数据库压力
模拟数据库服务端访问量突增,造成数据库 CPU、内存、磁盘等指标突增。
数据库锁故障
模拟数据库数据表锁死无法查询或写入的故障。
自定义 SQL
根据业务场景通过 SQL 构建自定义故障。
Oracle 故障
连接数
模拟数据库连接数达到上限。实际模拟的连接数将不超过客户端可发起的连接数的上限。例如客户端连接数上限为 600,设置的连接数为 1000,那么实际模拟的连接数为 600。
数据库压力
模拟数据库服务端访问量突增,造成数据库 CPU、内存、磁盘等指标突增。
数据库锁故障
模拟数据库数据表锁死无法查询或写入的故障。
自定义 SQL
根据业务场景通过 SQL 构建自定义故障。
MongoDB 故障
数据库锁故障
通过 Mongodb fsynclock 命令,为整个数据库实例加锁。加锁后所有的 Write 操作不能执行。
终止读写操作
通过定时执行 Mongodb KillOp 指令杀死读写操作,使客户端的读写操作失效。
缓存
Redis 故障
缓存击穿
模拟单个缓存 Key 失效,被击穿的场景。
连接池满
模拟 Redis 服务端达到最大连接上限的场景。
消息队列
Kafka 故障
脏数据
Kafka 中插入脏数据。
重复数据
Kafka 中插入一定数目的重复数据。
RocketMQ 故障
脏数据
RocketMQ 中插入脏数据。
重复数据
RocketMQ 中插入一定数目的重复数据。
RabbitMQ 故障
脏数据
RabbitMQ 中插入脏数据。
重复数据
RabbitMQ 中插入一定数目的重复数据。
分布式存储
ES 故障
Index 关闭
ES 数据库库名不可读写。
Index 别名删除
删除 ES 数据库别名。
网络
TCP 故障
TCP 连接数压力
TCP 层的连接数压力故障。
Loading...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP