Главная Веб-разработка Что такое Envoy, зачем он нужен и как работает

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

от admin

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

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

Представьте большой ресторан с множеством кухонь (микросервисов), каждая из которых готовит уникальные блюда. В этом случае 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 — это мощный прокси-сервер, способный эффективно взаимодействовать со множеством инструментов для оптимизации управления микросервисами. Давайте рассмотрим основные из них.

Что дальше

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

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

Микросервисная архитектура — это подход к проектированию программного обеспечения, при котором приложение разделяется на множество небольших независимых сервисов. Каждый микросервис выполняет определённую функцию и взаимодействует с другими через сеть, обычно посредством API. Такая структура облегчает обновление, масштабирование и развитие приложения, поскольку изменения в одном микросервисе не влияют на остальные.

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

Метрдотель — это старший официант или администратор в ресторане. Он отвечает за организацию работы обслуживающего персонала, встречает и рассаживает гостей, следит за качеством обслуживания.

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

Экземпляры одного сервиса в микросервисной архитектуре — это идентичные копии микросервиса, работающие параллельно. Рассмотрим, к примеру, микросервис обработки заказов в интернет-магазине. Запуск нескольких его экземпляров позволяет одновременно обрабатывать большое количество заказов. При увеличении трафика можно добавить дополнительные экземпляры, что обеспечивает быструю обработку заказов даже в периоды пиковой нагрузки.

Контейнерные оркестраторы — это инструменты, которые упрощают работу с контейнерами (изолированными средами для приложений). Они автоматизируют процессы развёртывания, управления и масштабирования контейнеров. Например, если у вас много контейнеров, оркестраторы помогут эффективно управлять ими и распределять ресурсы. Среди популярных контейнерных оркестраторов можно выделить Kubernetes и Docker Swarm.

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

Похожие статьи