使用混沌候攻击测试Spring Boot应用

在编写了许多单元和集成测试后,代码覆盖范围从70%到80%,但是还是存在一种焦虑,我们的宝宝在生产中的表现如何?

许多问题仍然没有答案:
1. 我们的后备工作会起作用吗?
2. 应用程序如何处理网络延迟?
3. 如果我们的某项服务出现故障怎么办?
4. 服务发现是否有效,但我们的客户端负载平衡是否也有效?

如果你开始在你的公司实施混沌工程,那么你必须是一个非常社交和沟通的人。为什么,因为当你的混乱实验发生时,你会在很短的时间内亲自认识你的许多同事。

您的服务是否具有弹性并可以处理故障?如果没有,请不要开始混乱实验!

不要在生产环境启用混沌候!

Spring Boot Chaos Monkey是一个小型库(30kb),可以使用以下选项将Chaos Monkey集成到Spring Boot App中:


<dependency>
<groupId>de.codecentric</groupId>
<artifactId>chaos-monkey-spring-boot</artifactId>
<version>X.X.X</version>
</dependency>

对于Spring Boot 2.0.x:

<dependency>
<groupId>de.codecentric</groupId>
<artifactId>chaos-monkey-spring-boot</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>

使用Spring Profile chaos-monkey启动应用程序以初始化Chaos Monkey,从版本1.5.0和2.0.0 开始,它默认不会对应用启动攻击,需要在运行时动态激活它。
java -jar your-app.jar --spring.profiles.active=chaos-monkey

也可以通过Spring Boot PropertiesLauncher注入外部JAR文件方式激活:


java -cp your-app.jar
-Dloader.path=chaos-monkey-spring-boot-X.X.X.jar
org.springframework.boot.loader.PropertiesLauncher
--spring.profiles.active=chaos-monkey

或者通过 loader.path系统设置与 Spring Boot PropertiesLauncher启动:

java \
-Xbootclasspath/a:aspectjrt-1.9.1.jar \
-cp your-app.jar \
-Dloader.path=chaos-monkey-spring-boot-X.X.X.jar \
-Dspring.profiles.active=chaos-monkey \
org.springframework.boot.loader.PropertiesLauncher

通过环境变量 LOADER_PATH和Spring Boot PropertiesLauncher激活:

LOADER_PATH=chaos-monkey-spring-boot-X.X.X.jar \
java \
-Xbootclasspath/a:aspectjrt-1.9.1.jar \
-Dspring.profiles.active=chaos-monkey \
-cp your-app.jar \
org.springframework.boot.loader.PropertiesLauncher

在所有情况下:
无论你如何嵌入Chaos Monkey,只要不将属性“ chaos.monkey.enabled ”设置为“ true ”,就什么都不会发生!

无需更改源代码就能激活!

运行时的动态配置
从版本1.5.0和2.0.0开始,可以通过Spring Boot Actuator Endpoint在运行时配置Chaos Monkey for Spring Boot。

工作原理
如果Spring Boot Chaos Monkey在类路径中并使用配置文件名称“chaos-monkey”激活,它将自动扫描应用程序以查找以下使用Spring注释的所有类:


@Controller
@RestController
@Service
@Repository
@Component

通过配置可以定义激活哪些攻击和监视器,默认情况下仅激活@Service观察器和延迟攻击。

Watcher是一个Chaos Monkey for Spring Boot组件,它将扫描应用程序以获取特定类型的注释,在Spring AOP的帮助下,Chaos Monkey会识别出一个公共方法的执行,提供以下攻击:

1. 延迟攻击
2. Exception 攻击
3. AppKiller攻击


Chaos Monkey for Spring Boot