Рубрики
Без рубрики

Введение в Обезьяну Хаоса

Узнайте, как внедрить элементы хаотической инженерии в приложение Spring Boot с помощью Chaos Monkey.

Автор оригинала: Adrian Precub.

1. введение

В этом уроке мы поговорим о Обезьяне хаоса для весенней загрузки.

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

2. Настройка

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


    de.codecentric
    chaos-monkey-spring-boot
    2.0.0

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

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

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

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

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

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

Другим полезным свойством является management.endpoint.chaosmonkey.enabled. Установка этого свойства в значение true позволит использовать конечную точку управления для нашей Обезьяны Хаоса:

http://localhost:8080/chaosmonkey

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

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

4. Как Это Работает

Обезьяна Хаоса состоит из Наблюдателей и Нападений. Наблюдатель-это компонент пружинной загрузки. Он использует Spring AOP , чтобы видеть, когда публичный метод выполняется в классах, аннотированных следующими аннотациями Spring:

  • Компонент
  • Контроллер
  • РестКонтроллер
  • Услуга
  • Хранилище

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

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

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

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

По умолчанию наблюдатель включен только для наших сервисов . Это означает, что наши атаки будут выполняться только для общедоступных методов в наших классах с аннотациями @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 для Spring , о котором мы говорили ранее.

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. Нападение на AppKiller

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

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

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

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

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