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 .