Определение простыми словами
Envoy — это высокопроизводительный прокси-сервер, который действует как посредник между клиентом и сервером. Он анализирует, фильтрует и маршрутизирует сетевой трафик, обеспечивая балансировку нагрузки, безопасность и наблюдение. Широко используется для построения сервис-мешей и оптимизации взаимодействия микросервисов.
Envoy помогает уменьшить сложность взаимодействия компонентов в распределённых приложениях, улучшить отказоустойчивость и повысить прозрачность работы сети благодаря встроенным метрикам и трассировке.
Сравнение
| Параметр | Envoy Proxy | HAProxy | Nginx |
|---|---|---|---|
| Тип | Layer 7 Proxy | Layer 4/7 Proxy | Layer 7 Proxy/Веб-сервер |
| Основное применение | Сервис-меш, микросервисы | Балансировка нагрузки, прокси | Веб-сервер, обратный прокси |
| Поддержка протоколов | HTTP/2, gRPC, TCP | HTTP, TCP | HTTP/1.1, HTTP/2 |
| Расширяемость | Плагины, фильтры (extensible) | Модификация конфигурации | Обширные модули |
| Наблюдаемость | Подробные метрики, трассировка | Ограниченные метрики | Метрики, логи |
Кейсы использования
- Реализация сервис-меша для управления сетевыми запросами между микросервисами.
- Балансировка нагрузки и маршрутизация в облачных и контейнерных средах.
- Обеспечение безопасности трафика с поддержкой TLS и авторизации.
- Сбор детализированной телеметрии и трассировка запросов для мониторинга.
- Организация межкластерной связи и управление политиками доступа.
Негативный пример: Использование Envoy для простого статического веб-хостинга избыточно и усложняет архитектуру без практической выгоды.
Технические детали
Envoy написан на C++ и оптимизирован для высокой производительности. Он поддерживает следующие возможности:
- Динамическая конфигурация через xDS API.
- Поддержка HTTP/2, gRPC, TCP, и UDP (экспериментально).
- Интеграция с системами аутентификации и авторизации (например, JWT).
- Механизмы повторных попыток, таймаутов, лимитирования и кэширования.
Пример базовой конфигурации Envoy (YAML):
static_resources:
listeners:
- name: listener_0
address:
socket_address:
address: 0.0.0.0
port_value: 10000
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: some_service }
http_filters:
- name: envoy.filters.http.router
clusters:
- name: some_service
connect_timeout: 0.25s
type: STATIC
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: some_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 8080
Дополнительная информация доступна в статье о сервис-мешах, микросервисах и прокси.
🔥 Где это применяется
Частые вопросы
Что такое Envoy?
Это современный прокси-сервер для управления трафиком в распределённых приложениях и микросервисах.
В чем отличие Envoy от традиционных прокси?
Envoy предоставляет сервис-меш функции, включая динамическую конфигурацию, расширяемость и глубокий мониторинг.
Можно ли использовать Envoy вместо Nginx?
Envoy лучше подходит для микросервисов и сервис-меша, Nginx — для статического контента и классического обратного прокси.