Перейти к основному содержимому

Введение в Chaos Monkey

· 4 мин. чтения

1. Введение

В этом уроке мы поговорим о Chaos Monkey для Spring Boot.

Этот инструмент помогает нам внедрить некоторые принципы хаос-инжиниринга в наши веб-приложения Spring Boot , добавляя задержку к нашим конечным точкам REST, вызывая ошибки или даже убивая приложение.

2. Настройка

Чтобы добавить Chaos Monkey в наше приложение, нам нужна одна зависимость Maven в нашем проекте:

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

3. Конфигурация

Как только у нас есть настройка зависимостей в нашем проекте, нам нужно настроить и запустить наш хаос.

Мы можем сделать это несколькими способами:

  • При запуске приложения использовать весенний профиль хаоса-обезьяны (рекомендуется)
  • Использование свойства хаоса.monkey.enabled=true

Запустив приложение с весенним профилем хаоса-обезьяны , нам не нужно останавливать и запускать приложение, если мы хотим включить или отключить его во время работы нашего приложения:

java -jar your-app.jar --spring.profiles.active=chaos-monkey

Другое полезное свойство — management.endpoint.chaosmonkey.enabled. Установка для этого свойства значения true активирует конечную точку управления для нашей Chaos Monkey:

http://localhost:8080/chaosmonkey

С этой конечной точки мы можем видеть статус нашей библиотеки. Вот полный список конечных точек и их описание, которые помогут изменить конфигурацию, включить или отключить Chaos Monkey и другие более детальные элементы управления.

Используя все доступные свойства , мы можем более точно контролировать то, что происходит в нашем сгенерированном хаосе.

4. Как это работает

Chaos Monkey состоит из Watchers и Assaults. Наблюдатель — это компонент Spring Boot. Он использует Spring AOP , чтобы увидеть, когда общедоступный метод выполняется в классах, аннотированных следующими аннотациями Spring:

  • Составная часть
  • Контроллер
  • Рестконтроллер
  • обслуживание
  • Репозиторий

В зависимости от конфигурации в файле свойств нашего приложения наши общедоступные методы будут либо атакованы , либо нет одним из следующих способов:

  • Latency Assault — добавляет случайную задержку к запросу
  • Exception Assault — генерирует случайное исключение во время выполнения
  • AppKiller Assault — гм, приложение умирает

Давайте посмотрим, как мы можем настроить нашего наблюдателя и атаки для более контролируемой атаки.

5. Наблюдатель

По умолчанию Watcher включен только для наших сервисов . Это означает, что наши атаки будут выполняться только для общедоступных методов в наших классах, аннотированных @Service.

Но мы можем легко изменить это, настроив свойства:

chaos.monkey.watcher.controller=false
chaos.monkey.watcher.restController=false
chaos.monkey.watcher.service=true
chaos.monkey.watcher.repository=false
chaos.monkey.watcher.component=false

Имейте в виду, что после запуска приложения мы не можем динамически менять наблюдателя с помощью порта управления Chaos Monkey for Spring Boot , о котором мы говорили ранее.

6. Нападения

Нападения — это в основном сценарии, которые мы хотим протестировать в нашем приложении. Давайте рассмотрим каждый тип атаки и посмотрим, что он делает и как мы можем его настроить.

6.1. Нападение с задержкой

Этот тип атаки увеличивает задержку наших вызовов. Таким образом, наше приложение будет реагировать медленнее, и мы сможем отслеживать, как оно ведет себя, когда, например, база данных отвечает медленнее.

Мы можем настроить и включить этот тип атаки, используя файл свойств нашего приложения:

chaos.monkey.assaults.latencyActive=true
chaos.monkey.assaults.latencyRangeStart=3000
chaos.monkey.assaults.latencyRangeEnd=15000

Другой способ настроить, включить и выключить этот тип атаки — через конечную точку управления Chaos Monkey.

Давайте включим атаку задержки и добавим диапазон задержки от двух до пяти секунд:

curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyRangeStart": 2000,
"latencyRangeEnd": 5000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false
}'

6.2. Исключение Нападение

Это проверяет, насколько хорошо наше приложение может обрабатывать исключения. В зависимости от конфигурации он будет вызывать случайное исключение времени выполнения после включения.

Мы можем включить его, используя вызов curl, аналогичный нашей атаке на задержку:

curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyActive": false,
"exceptionsActive": true,
"killApplicationActive": false
}'

6.3. Убийца приложений

Это, ну, наше приложение умрет в какой-то случайный момент. Мы можем включить или отключить его с помощью простого вызова curl, как и предыдущие два типа атаки:

curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyActive": false,
"exceptionsActive": false,
"killApplicationActive": true
}'

7. Заключение

В этой статье мы рассказали о Chaos Monkey для Spring Boot . Мы видели, что он использует некоторые принципы хаос-инжиниринга и позволяет нам применять их к приложению Spring Boot .

Как всегда, полный код примеров можно найти на Github .