Введение в Chaos Monkey

Введение в 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.