Автор оригинала: 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 .