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

Памятка по сетевым уровням

Прежде чем погрузиться в сервисные сетки и шлюзы API, давайте вернемся к сетям. Ниже приведена модель сетевых уровней OSI:

Памятка вам понадобится, потому что о некоторых из этих слоев пойдет речь в следующих разделах.

Сервисная сетка

Сервисная сетка  —  это технология, которая управляет коммуникацией между сервисами в распределенной программной системе. Сервисные сетки управляют сетевыми коммуникациями типа Восток-Запад. Трафик Восток-Запад обозначает поток внутри центра обработки данных, кластера Kubernetes или распределенной системы.

Сервисные сетки состоят из двух важных компонентов:

  • Плоскость управления.
  • Плоскость данных.

Прокси-серверы, расположенные непосредственно рядом с приложением, называются плоскостью данных, а компоненты управления, координирующие поведение прокси-серверов, называются плоскостью управления.

Сервисная сетка позволяет отделить бизнес-логику приложения от параметров сети, надежности, безопасности и наблюдаемости.

Сеть и управление трафиком

Сервисная сетка позволяет выполнять динамическое обнаружение сервисов. Sidecar-прокси помогает в балансировке нагрузки и ограничении скорости. Также он может содействовать разделению трафика для выполнения A/B-типа тестирования, что будет полезно для канареечных релизов.

Наблюдаемость и надежность

Сервисная сетка поддерживает распределенную трассировку, которая помогает выполнять расширенный мониторинг (количество запросов, показатели успешности и задержки ответов) и отладку. Есть возможность даже воспользоваться коммуникацией “сервис-сервис” для лучшего понимания.

Поскольку сервисная сетка обеспечивает проверку работоспособности, повторные попытки, тайм-ауты и разрыв цепи, она повышает базовую надежность приложения.

Безопасность

Сервисная сетка допускает взаимный TLS между сервисами, что помогает повысить безопасность связи. Вы также можете реализовать в качестве политик безопасности списки контроля доступа (ACL).

Стоящий mesh/sidecar прокси-сервер поддерживает широкий спектр услуг и реализует политику трафика уровней L4/L7.

На рынке существует множество сервисных сеток. Ниже приведены некоторые из них:

В интернете можно найти множество статей, сравнивающих перечисленные сервисные сетки.

Шлюз API

Шлюз API действует как единая точка входа в кластер, центр обработки данных или группу распределенных служб. В топологии сети такое часто называют трафиком Север-Юг. Как правило, мобильные клиенты относятся к этому типу сетевого трафика.

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

Шлюз API принимает вызовы от клиентов и направляет их в соответствующие сервисы. При этом он также может транслировать протоколы.

У шлюза API много преимуществ:

  • Абстракция: шлюз API абстрагирует сложность микросервисов под ним и предоставляет клиентам единый опыт.
  • Аутентификация: шлюз API заботится об аутентификации и передает информацию о токене службам.
  • Управление трафиком: шлюз API регулирует входящий и исходящий трафик API.
  • Мониторинг/монетизация API: если вы планируете монетизировать API, шлюз API может помочь в этом, предоставив возможности для мониторинга запросов/ответов клиента.
  • Преобразования: шлюз API позволяет транслировать/преобразовать запросы/ответы API. Он также помогает с трансляцией протоколов.

Шлюзы API, как правило, оперируют только на седьмом уровне (L7) модели OSI.

Типы шлюзов API

С точки зрения развертывания есть два способа применения шлюзов API:

  • Внутренний шлюз API действует как шлюз для группы служб или для области продукта.
  • Пограничный шлюз API работает как шлюз для внешних потребителей или мобильных клиентов.

На рынке существует целый ряд API-шлюзов. Вот некоторые из них:

Когда и чем воспользоваться

Теперь, когда вы знаете, что такое сервисные сетки и API-шлюзы, попробуем понять, когда и чем из этого стоит воспользоваться.

Когда применять сервисную сетку

  • Когда нужно добиться связи сервисов уровней L4/L7 с обеспечением безопасности и мониторингом в рамках одного и того же продукта.
  • Когда у вас есть возможность развернуть прокси-серверы типа sidecar для каждого отдельного экземпляра сервиса и его реплик.
  • Когда сервисы могут совместно использовать один и тот же сертификат ЦС для установления безопасной связи (в различных продуктах такая возможность может отсутствовать).

Когда применять шлюз API

  • Когда нужно добиться сервисной связи уровня L7 с обеспечением безопасности и мониторингом для различных продуктов.
  • Когда вы хотите выставить API на рынок в качестве продукта (с монетизацией или без).
  • Когда вы хотите предоставить разработчикам полное управление жизненным циклом API.
  • Когда нужно транслировать протоколы служебных коммуникаций.

Сервисные сетки и шлюз API вместе

Сервисная сетка и шлюз API вполне могут существовать параллельно. Следующая диаграмма демонстрирует их совместное использование:

На диаграмме показано, что для области действия продукта как такового можно реализовать сервисную сетку (трафик Восток-Запад). Когда требуется связь между продуктами, можно воспользоваться внутренним шлюзом API (трафик Восток-Запад). Когда клиентам на границе необходимо взаимодействовать со службами, можно задействовать пограничный API-шлюз (трафик Север-Юг).

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Tanmay Deshpande: The Roles of Service Mesh and API Gateways in Microservice Architecture

Предыдущая статьяТематическое моделирование с помощью BERT
Следующая статьяВведение в метод Монте-Карло по схеме цепей Маркова