Введение в Chaos Monkey
1. Вступление
В этом руководстве мы поговорим оChaos Monkey для Spring Boot.
Этот инструмент помогает намintroduce some of the principles of chaos engineering into our Spring Boot web applications, добавляя задержку к нашим конечным точкам REST, выдавая ошибки или даже убивая приложение.
2. Настроить
Чтобы добавить Chaos Monkey в наше приложение, нам нужен единственныйMaven dependency в нашем проекте:
de.codecentric
chaos-monkey-spring-boot
2.0.0
3. конфигурация
Как только мы настроим зависимость в нашем проекте, нам нужно настроить и запустить наш хаос.
Мы можем сделать это несколькими способами:
-
При запуске приложения использовать профиль sspringchaos-monkey (рекомендуется)
-
Использованиеchaos.monkey.enabled=true property
Запустив приложение с профилем пружиныchaos-monkeywe don’t have to stop and start the application if we want to enable or disable it во время работы нашего приложения:
java -jar your-app.jar --spring.profiles.active=chaos-monkey
Еще одно полезное свойство -management.endpoint.chaosmonkey.enabled. Установка этого свойства в значение true включит конечную точку управления для нашей Chaos Monkey:
http://localhost:8080/chaosmonkey
С этой конечной точки мы можем видеть статус нашей библиотеки. Вот полныеlist of endpoints и их описание, которое поможет изменить конфигурацию, включить или отключить Chaos Monkey и другие более детальные элементы управления.
Используя все доступныеproperties, мы можем более точно контролировать то, что происходит в нашем сгенерированном хаосе.
4. Как это работает
Chaos Monkey состоит из Наблюдателей и Нападений. Watcher - это компонент Spring Boot. Он используетSpring AOP, чтобы увидеть, когда открытый метод выполняется в классах, аннотированных следующими аннотациями Spring:
-
Составная часть
-
контроллер
-
RestController
-
обслуживание
-
вместилище
В зависимости от конфигурации в файле свойств нашего приложенияour public methods will be either assaulted or not одним из следующих параметров:
-
Latency Assault - добавляет случайную задержку к запросу
-
Exception Assault - генерирует случайное исключение во время выполнения
-
AppKiller Assault - приложение умирает
Давайте посмотрим, как мы можем настроить нашего наблюдателя и нападения для более контролируемого нападения.
5. наблюдатель
По умолчанию Watcher включен только для нашихservices. Это означает, что наши атаки будут выполняться только для общедоступных методов в наших классах, аннотированных@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
Имейте в виду, что после запуска приложенияwe cannot dynamically change the watcher using the Chaos Monkey for Spring Boot management port, о котором мы говорили ранее.
6. Нападения
Нападения - это в основном сценарии, которые мы хотим протестировать в нашем приложении. Давайте рассмотрим каждый тип атаки и посмотрим, что он делает и как мы можем его настроить.
6.1. Latency Assault
Этот тип атаки добавляет задержку к нашим звонкам. This way our application responds slower and we can monitor how it behaves when for example the database responds slower.с
Мы можем настроить и включить или этот тип атаки, используя файл свойств нашего приложения:
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. Exception Assault
Это проверяет, насколько хорошо наше приложение может обрабатывать исключения. Based on configuration it will throw a random Runtime Exception один раз включен.
Мы можем включить его с помощью вызова curl, похожего на нашу задержку:
curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyActive": false,
"exceptionsActive": true,
"killApplicationActive": false
}'
6.3. AppKiller Assault
На этот раз наше приложение умрет в какой-то случайной точке. Мы можем включить или отключить его с помощью простого вызова curl, как два предыдущих типа нападения:
curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyActive": false,
"exceptionsActive": false,
"killApplicationActive": true
}'
7. Заключение
В этой статьеwe talked about Chaos Monkey for Spring Boot. Мы видели, что он использует некоторые принципыchaos engineering и позволяет нам применять их к приложениюSpring Boot.
Как всегда, полный код примеров можно найти вover on Github.