ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot에 Chaos Monkey 적용하기
    카테고리 없음 2024. 8. 18. 23:36
    오픈소스 컨트리뷰션 5주차

     

    Chaos Money란

     

    Chaos Money란 시스템에 장애를 일으켜 취약점을 테스트하는 카오스 엔지니어링 도구의 한 종류이다.

     

    Chaos Money에는 Watcher와 Assault라는 개념이 존재하는데

    Watcher는 장애를 일으키는 대상이고 Assault는 장애의 종류이다. (Litmus Chaos에서 Fault에 해당하는 개념)

     

     

    Watcher를 설정하는 방법은 여러가지 방법이 있지만

    그 중 Annotation을 이용한 방법은 특정 Annotation이 선언된 Bean에 대해서 장애를 주입하는 방식이다.

     

    Assault는 장애 범위에 따라 Request Assault, Runtime Assault로 나뉘는데

    Request Assault는 특정 지점에 영향을 미치며 Watcher로 지점을 설정할 수 있다.

    Runtime Assault는 애플리케이션 전체에 영향을 미친다.

     

    Request Assault의 종류

    • latency
    • exception

    Runtime Assault의 종류

    • memory
    • cpu
    • app kill

     

    Chaos Money For Spring Boot 설정 방법

    Chaos Money For Spring Boot는 Spring Actuator를 이용하여 설정하기 때문에

    Maven 종속성에 Chaos Monkey와 Spring Actuator를 추가한다.

    <dependency>
    	<groupId>de.codecentric</groupId>
    	<artifactId>chaos-monkey-spring-boot</artifactId>
    	<version>3.1.0</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

     

     

    chaos-monkey profile용 설정파일을 만들어주고 Chaos Monkey 설정을 추가해준다.

    아래 예시의 경우 @RestController가 붙은 Bean으로 오는 요청에 대해서 latency를 거는 설정이다.

    # application-chaos-monkey.yml
    
    chaos:
      monkey:
        enabled: true
        watcher:
          rest-controller: true
        assaults:
          latency-active: true
    
    management:
      endpoint:
        chaosmonkey:
          enabled: true
      endpoints:
        web:
          exposure:
            include:
              - health
              - info
              - chaosmonkey
              - metrics

     

     

    설정이 잘 적용되었는지 확인하려면 두 가지 URL에서 확인할 수 있다.

    // http://localhost:8080/actuator/chaosmonkey/assaults
    
    {
      "level": 1,
      "deterministic": false,
      "latencyRangeStart": 1000,
      "latencyRangeEnd": 3000,
      "latencyActive": true,  // latency 적용
       ...   
     }
    // http://localhost:8080/actuator/chaosmonkey/watchers
    
    {
      "controller": false,
      "restController": true,
      "service": false,
      "repository": false,
      "component": false,
      "restTemplate": false,
      ...
    }

     

    Chaos Money with Postman

    Chaos Monkey를 테스트하기 위해서 Postman으로 직접 API를 호출하면서 latency가 적용되는지 테스트해보았다.

     

    테스트 방법은 Postman의 Run Collection 기능을 사용하여 1개의 HTTP GET API를 20번 호출하였고 

    latency 적용 전과 적용 후를 비교하였다.

     

    적용 전에는 10ms 내외의 응답시간을 보여주었고

    적용 후에는 1000ms ~ 3000ms 의 응답시간을 보여주었다.

     

    latency 적용 전
    latency 적용 후

     

     

     

     

    적용한 코드는 apply-chaos-monkey branch에 있다.

     

    GitHub - sukkyun2/spring-boot-board: SW몰입교육 사전교육 게시판 만들기

    SW몰입교육 사전교육 게시판 만들기. Contribute to sukkyun2/spring-boot-board development by creating an account on GitHub.

    github.com

     

     

Designed by Tistory.