Код
#статьи

Что такое Envoy, зачем он нужен и как работает

Прокачиваем микросервисы и властвуем над сетевым трафиком.

Иллюстрация: Оля Ежак для Skillbox Media

Envoy — это современный прокси-сервер для работы с микросервисной архитектурой. Он управляет сетевыми взаимодействиями между микросервисами и служит промежуточным слоем между клиентами и сервисами, обеспечивая гибкость и масштабируемость приложений.

Представьте большой ресторан с множеством кухонь (микросервисов), каждая из которых готовит уникальные блюда. В этом случае Envoy — метрдотель, принимающий заказы от клиентов и направляющий их на соответствующие кухни. Он управляет потоком заказов и обеспечивает быструю и безопасную «доставку» блюд к столам клиентов.

В статье мы подробно поговорим об Envoy: рассмотрим его назначение, архитектуру, функции и взаимодействие с другими инструментами.

Содержание

Если вы только начинаете знакомиться с устройством приложений, рекомендуем перед изучением Envoy прочитать статью о микросервисной архитектуре. Она познакомит вас с терминологией, особенностями подхода, его структурой и отличиями от монолитной архитектуры.

Инфографика: Оля Ежак для Skillbox Media

Основные возможности

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. Если вы планируете использовать его в работе, вот несколько ресурсов для изучения:

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия DevOps-инженер Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована