Если вы занимаетесь микросервисами, то, возможно, вам приходилось слышать об этих терминах. Люди часто путаются между ними. В этой статье мы подробно расскажем о сервисных сетках (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-шлюз (трафик Север-Юг).
Читайте также:
- Как работает проверка доступности API в Swift
- Как перейти от Flask к FastAPI
- AutoScraper и Flask: создание API для любого сайта менее чем за 5 минут
Читайте нас в Telegram, VK и Дзен
Перевод статьи Tanmay Deshpande: The Roles of Service Mesh and API Gateways in Microservice Architecture