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

55 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Envoy: outlier detection
[К материалам семинара](../readme.md)
В стенде работают Envoy и два бэкенда. Первый возвращает успешный ответ на `/`, второй с вероятностью 0.8 возвращает HTTP 500. Envoy наблюдает результаты обычных запросов и временно исключает проблемный бэкенд из балансировки. Это пассивное обнаружение: отдельные запросы проверки здоровья здесь не настроены.
## Запуск и наблюдение
Нужны Docker и Docker Compose. Выполните из этой директории:
```shell
docker compose up --build -d
```
После запуска приложений несколько раз отправьте запрос через прокси и сравните с прямыми запросами:
```shell
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](envoy.yaml) задано:
```yaml
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 в этом стенде отсутствует.
После работы:
```shell
docker compose down
```
Подробнее: [outlier detection в документации Envoy](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/outlier), [справочник параметров](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/outlier_detection.proto).