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

18-08-25 banq
         

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

对于Spring Boot 2.0.x:

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

使用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
<p>

或者通过 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
<p>

通过环境变量 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
<p>

在所有情况下:

无论你如何嵌入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
<p>

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

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

1. 延迟攻击

2. Exception 攻击

3. AppKiller攻击

Chaos Monkey for Spring Boot