Files
hse-2026/materials/06-failures/seminar/envoy-outlier-detection/readme.md
T
2026-10-14 20:13:57 +03:00

4.2 KiB
Raw Blame History

Envoy: outlier detection

К материалам семинара

В стенде работают Envoy и два бэкенда. Первый возвращает успешный ответ на /, второй с вероятностью 0.8 возвращает HTTP 500. Envoy наблюдает результаты обычных запросов и временно исключает проблемный бэкенд из балансировки. Это пассивное обнаружение: отдельные запросы проверки здоровья здесь не настроены.

Запуск и наблюдение

Нужны Docker и Docker Compose. Выполните из этой директории:

docker compose up --build -d

После запуска приложений несколько раз отправьте запрос через прокси и сравните с прямыми запросами:

curl -i http://localhost:8080/
curl -i http://localhost:9001/
curl -i http://localhost:9002/

В PowerShell вместо curl используйте curl.exe. Ответы содержат версию бэкенда (v1 или v2). Для опыта достаточно пути /; путь /kittens дополнительно обращается к внешнему API.

При повторных запросах через Envoy проблемный бэкенд временно исключается, а затем снова допускается к трафику. Прямые запросы к порту 9002 позволяют видеть, что процесс продолжает работать и возвращать ответы, в том числе ошибки. Последовательность случайна: по одному успешному ответу или короткой серии нельзя заключить, что бэкенд исключён.

Что означают настройки

В конфигурации Envoy задано:

outlier_detection:
  consecutive_5xx: 2
  interval: "5s"
  base_ejection_time: "10s"
  max_ejection_percent: 100
  • consecutive_5xx: исключение после двух последовательных ответов 5xx от одного бэкенда, наблюдаемых Envoy. Это не любые две ошибки во всём потоке запросов.
  • interval: период фонового анализа и проверки возврата исключённых бэкендов. Достижение порога последовательных ошибок обрабатывается при запросах, без ожидания следующего такого интервала.
  • base_ejection_time: базовая длительность исключения. При повторных исключениях срок может расти; возврат не гарантирован ровно через 10 секунд.
  • max_ejection_percent: разрешённая доля исключённых бэкендов. Значение 100 позволяет исключить все; это настройка данного учебного примера.

Исключение меняет маршрутизацию в данном прокси. Оно не останавливает бэкенд и не доказывает, что тот аварийно завершился. Возврат по таймеру тоже не подтверждает исправление приложения: новый запрос может снова завершиться ошибкой.

Адреса бэкендов заданы в конфигурации. Интеграция с Consul в этом стенде отсутствует.

После работы:

docker compose down

Подробнее: outlier detection в документации Envoy, справочник параметров.