在编写了许多单元和集成测试后,代码覆盖范围从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攻击