Что такое Envoy, зачем он нужен и как работает
Прокачиваем микросервисы и властвуем над сетевым трафиком.
Иллюстрация: Оля Ежак для Skillbox Media
Envoy — это современный прокси-сервер для работы с микросервисной архитектурой. Он управляет сетевыми взаимодействиями между микросервисами и служит промежуточным слоем между клиентами и сервисами, обеспечивая гибкость и масштабируемость приложений.
Представьте большой ресторан с множеством кухонь (микросервисов), каждая из которых готовит уникальные блюда. В этом случае Envoy — метрдотель, принимающий заказы от клиентов и направляющий их на соответствующие кухни. Он управляет потоком заказов и обеспечивает быструю и безопасную «доставку» блюд к столам клиентов.
В статье мы подробно поговорим об Envoy: рассмотрим его назначение, архитектуру, функции и взаимодействие с другими инструментами.
Содержание
- Зачем нужен Envoy
- Как он работает
- Как взаимодействует с другими инструментами
- Подборка ресурсов для изучения Envoy Proxy
Если вы только начинаете знакомиться с устройством приложений, рекомендуем перед изучением Envoy прочитать статью о микросервисной архитектуре. Она познакомит вас с терминологией, особенностями подхода, его структурой и отличиями от монолитной архитектуры.
Основные возможности
Envoy решает ключевые проблемы микросервисной архитектуры — он обеспечивает эффективную маршрутизацию, балансировку нагрузки, повышение безопасности, а также мониторинг и трассировку запросов.
Маршрутизация запросов. В микросервисной архитектуре приложения состоят из множества небольших сервисов, которые совместно работают над общей задачей. Когда пользователи отправляют запросы, важно направлять их к нужным сервисам. С ростом приложения увеличивается количество подключённых микросервисов и маршрутизация усложняется.
Envoy позволяет гибко настраивать правила маршрутизации запросов по различным параметрам: загруженности, версии сервиса, типу данных и другим критериям. Эта функциональность упрощает взаимодействие между микросервисами и повышает адаптивность системы.
Возьмём интернет-магазин, запускающий новую версию каталога товаров. С помощью Envoy вы можете разделить трафик: направить большинство пользователей к старому каталогу, а доступ к новой версии предоставить только сотрудникам и тестировщикам. Такой подход обеспечит стабильную работу интернет-магазина и безопасное тестирование обновлений.
Читайте также:
Балансировка нагрузки. В микросервисной архитектуре приложения часто включают несколько экземпляров одного сервиса, работающих параллельно для повышения производительности. Однако при большом количестве запросов может возникнуть проблема: некоторые серверы могут быть перегружены, в то время как другие остаются свободными. Такой дисбаланс может привести к задержкам и сбоям в работе приложения.
Envoy равномерно распределяет запросы между доступными экземплярами сервисов. Он автоматически направляет трафик к менее загруженным серверам, предотвращая ситуации, когда одни серверы перегружены, а другие простаивают. Благодаря этому обеспечивается оптимальное использование ресурсов и стабильная работа всей системы.
Представьте популярную онлайн-игру, где тысячи пользователей могут одновременно подключиться к одной сессии. Чтобы избежать задержек, Envoy следит за распределением запросов: когда один сервер загружен, он направляет новые подключения на менее загруженные. Так игроки получают бесперебойный доступ даже в периоды пиковой активности.
Читайте также:
Безопасность. В микросервисной архитектуре многие приложения обрабатывают конфиденциальные данные пользователей: номера карт, адреса, телефоны и другую личную информацию. Однако передача этих данных между сервисами создаёт риск их перехвата злоумышленниками.
Envoy применяет шифрование и аутентификацию для защиты информации от несанкционированного доступа при передаче. Например, он шифрует данные кредитных карт клиентов при их отправке от веб-сервера к платёжному процессору. Поэтому, даже если злоумышленник перехватит эти данные, он не сможет их расшифровать и использовать.
Читайте также:
Мониторинг и трассировка. В микросервисной архитектуре некоторые сервисы могут периодически давать сбой и вызывать задержки. В больших приложениях бывает сложно быстро определить проблемный микросервис.
Envoy предоставляет инструменты для мониторинга и трассировки производительности сервисов. С их помощью разработчики могут отслеживать, как запросы проходят через систему и где могут возникнуть узкие места. Например, если пользователи жалуются на медленную загрузку веб-страницы, Envoy может показать, какие сервисы обрабатывают запросы и сколько времени это занимает. Если один из сервисов работает медленно, разработчики смогут сразу его выявить и принять меры.
Читайте также:
Архитектура и компоненты
Envoy обладает модульной архитектурой, которую легко настраивать и расширять. Разработчики могут добавлять или модифицировать компоненты Envoy, адаптируя его под нужды своего приложения.
Допустим, вы разрабатываете банковский онлайн-сервис. На начальном этапе вам необходимы базовая маршрутизация запросов и балансировка нагрузки. Однако по мере роста приложения возникает потребность в аутентификации пользователей и мониторинге производительности. Модульная архитектура Envoy позволяет легко внедрять новые фильтры для аутентификации и инструменты сбора метрик, не переписывая всю систему. А позже вы сможете также просто добавлять новые функции.
Подобную гибкость обеспечивают несколько ключевых компонентов:
- Listeners (прослушиватели). Это точки входа, через которые Envoy получает запросы. Например, один прослушиватель может обрабатывать HTTP-трафик, а другой — TCP-соединения.
- Routes (маршруты). После получения запроса Envoy определяет, куда его направить. Если запрос поступает на URL /api/products, то Envoy может направить его к сервису, обрабатывающему данные о товарах.
- Clusters (кластеры). Envoy объединяет экземпляры сервисов в кластеры. Например, у вас может быть кластер из трёх серверов, обрабатывающих запросы к каталогу товаров. Envoy распределяет запросы между этими серверами и предотвращает их перегрузку.
- Filters (фильтры). Envoy позволяет добавлять фильтры для обработки запросов и ответов на различных этапах прохождения трафика. С помощью фильтров можно реализовать аутентификацию пользователей или шифрование данных перед их отправкой.
Рассмотрим, как компоненты архитектуры Envoy взаимодействуют между собой на примере оформления заказа в интернет-магазине. Когда покупатель нажимает кнопку «Купить», формируется запрос к серверу.
Envoy принимает запрос через прослушиватель (listener) и направляет его к сервису обработки заказов с помощью маршрутов (routes).
Запрос попадает в кластер серверов (clusters), ответственных за обработку заказов. На этом этапе в интернет-магазине могут быть активированы различные фильтры (filters). Например, фильтр аутентификации проверяет учётные данные пользователя и после передаёт запрос на обработку.
Если в процессе обработки один из серверов окажется перегруженным, Envoy автоматически перенаправит запросы к другим серверам в кластере. Это обеспечивает быструю и надёжную обработку заказа для пользователя.
Интеграция с внешними системами
Envoy — это мощный прокси-сервер, способный эффективно взаимодействовать со множеством инструментов для оптимизации управления микросервисами. Давайте рассмотрим основные из них.
Контейнерные оркестраторы. Инструменты вроде Kubernetes управляют развёртыванием и масштабированием контейнеризованных приложений. Envoy интегрируется с Kubernetes в качестве посредника между клиентами и сервисами, отвечая за маршрутизацию трафика и балансировку нагрузки.
Сервисные сетевые платформы. Такие платформы, как Istio, управляют трафиком и обеспечивают безопасность в сети микросервисов. Envoy функционирует в этой экосистеме как прокси-сервер, маршрутизируя запросы и контролируя взаимодействие между сервисами. Он реализует функции безопасности — аутентификацию, авторизацию и мониторинг.
Инструменты мониторинга отслеживают производительность приложений и интегрируются с Envoy для сбора метрик. Например, можно подключить сервисы Prometheus и Grafana: первый соберёт данные о работе Envoy, а второй преобразует их в наглядные графики состояния сервисов.
Системы аутентификации в сочетании с Envoy защищают приложение от несанкционированного доступа и обеспечивают безопасность данных. Например, интеграция с OAuth и OpenID Connect позволяет проверять личность пользователей и контролировать их доступ к ресурсам.
Инструменты для логирования собирают и анализируют записи о событиях, происходящих в приложении. Эти данные позволяют отслеживать работу системы, обнаруживать ошибки и понимать, как пользователи взаимодействуют с приложением. Envoy может интегрироваться с инструментами ELK Stack, которые преобразуют логи в наглядную информацию о функционировании системы.
Что дальше
Мы рассмотрели основные возможности Envoy. Если вы планируете использовать его в работе, вот несколько ресурсов для изучения:
- Официальная документация Envoy — руководство по настройке и применению прокси-сервера с описанием его функциональности. Для новичков доступно базовое руководство Getting Started.
- Ответы на часто задаваемые вопросы по работе с Envoy, а также блог разработчиков проекта на платформе Medium.
- Форум по Envoy Proxy на Stack Overflow и страница проекта на GitHub.
- Бесплатные англоязычные онлайн-курсы по основам Envoy Proxy.
- Katacoda: Envoy Scenarios — интерактивные учебные сценарии, позволяющие опробовать Envoy без установки на свой компьютер.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!