r3tam blog

API Gateway против Service Mesh: выбираем коммуникационный слой для микросервисов

API Gateway против Service Mesh: выбираем коммуникационный слой для микросервисов

Когда микросервисная архитектура вырастает за пределы десятка сервисов, перед командой неизбежно встаёт вопрос: как организовать коммуникацию между сервисами и при этом не утонуть в инфраструктурном коде? Ответ традиционно ищут в двух технологиях — API Gateway и Service Mesh. Они обе управляют трафиком, обе умеют аутентифицировать, шифровать и маршрутизировать запросы, но делают это на разных уровнях и для разных целей.

Путаница между API Gateway и Service Mesh — одна из самых частых архитектурных ошибок в микросервисных проектах. Команды либо пытаются заменить одно другим, либо дублируют функциональность, либо, что ещё хуже, навешивают бизнес-логику на网关, превращая его в распределённый монолит. В этой статье мы разберём, чем различаются эти технологии, как они дополняют друг друга и в каком случае какую выбрать.

Север-Юг и Восток-Запад: два измерения трафика

Прежде чем говорить о конкретных инструментах, важно понять фундаментальное различие между двумя типами сетевого трафика в микросервисной архитектуре.

North-South (север-юг) — это трафик между внешними клиентами (браузерами, мобильными приложениями, сторонними API) и вашими внутренними сервисами. Он пересекает границу между публичным интернетом и приватной сетью. Этот трафик требует аутентификации, ограничения частоты запросов, трансформации запросов и управления версиями API — потому что вы не контролируете клиента.

East-West (восток-запад) — это трафик между внутренними сервисами. Когда ваш сервис заказов вызывает сервис платежей, это east-west трафик. Он остаётся внутри вашей приватной сети. Этот трафик требует шифрования, обнаружения сервисов, балансировки нагрузки, повторных попыток и автоматического прерывания цепи — потому что вы контролируете обе стороны, но сеть ненадёжна.

Эти два измерения требуют принципиально разных подходов к управлению. API Gateway традиционно живёт на границе системы и обрабатывает north-south трафик. Service Mesh работает внутри и управляет east-west трафиком. Понимание этой границы — ключ к правильному архитектурному решению.

API Gateway: парадный вход в мир микросервисов

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

Основные функции API Gateway

Аутентификация и авторизация. Шлюз проверяет API-ключи, JWT-токены и OAuth2-токены. Он отвечает на вопрос «есть ли у этого мобильного приложения право вызывать эндпоинт /payments?» до того, как запрос достигнет вашего сервиса платежей. Это полностью выносит логику аутентификации из сервисов.

Rate Limiting. Шлюз защищает бэкенды от DDoS-атак и случайных всплесков трафика, ограничивая количество запросов от одного потребителя. В production обычно используется распределённое ограничение на базе Redis, чтобы лимиты работали согласованно на всех репликах шлюза.

Маршрутизация и трансформация запросов. URL-пути, заголовки и параметры запроса преобразуются и перенаправляются к нужным сервисам. Шлюз может переводить запросы из REST в gRPC, добавлять или удалять заголовки, агрегировать ответы от нескольких сервисов в один.

Завершение TLS и балансировка нагрузки. Шлюз терминирует внешнее TLS-соединение, проверяет сертификаты и распределяет запросы между экземплярами сервисов.

Кеширование ответов. Для идемпотентных GET-запросов шлюз может кешировать ответы, снижая нагрузку на бэкенды на 60–80% для heavily-read эндпоинтов.

Популярные реализации

| Решение | Архитектура | Сильные стороны |

|---------|-------------|-----------------|

| Kong Gateway | Плагинная, на базе OpenResty | Богатая экосистема плагинов, enterprise-функции (AI Gateway) |

| Apache APISIX | Высокопроизводительный, etcd-based | Динамическая конфигурация, низкая задержка, hot-reload |

| Envoy Gateway | C++, xDS API | Cloud-native, интеграция с Istio, Kubernetes Gateway API |

| AWS API Gateway | Managed | Нулевой ops, интеграция с AWS-экосистемой |

| Traefik | Go, Auto TLS | Простота, автоматические сертификаты, Kubernetes-native |

Service Mesh: невидимая инфраструктура для сервисов

Если API Gateway — это парадный вход, то Service Mesh — это внутренние коридоры вашей системы. Service Mesh — это выделенный инфраструктурный слой для управления коммуникацией между сервисами. Он реализуется через шаблон Sidecar Proxy: лёгкий прокси-контейнер (обычно на базе Envoy) разворачивается рядом с каждым подом и перехватывает весь входящий и исходящий трафик.

Главное преимущество такого подхода — прозрачность для приложения. Сервисы не знают о существовании mesh и не требуют изменения кода. Вся сетевая логика настраивается декларативно на уровне инфраструктуры.

Основные функции Service Mesh

Mutual TLS (mTLS). Каждое соединение между сервисами шифруется, и обе стороны предъявляют сертификаты для взаимной аутентификации. Это означает, что скомпрометированный сервис не сможет выдать себя за другой. Mesh управляет выпуском и ротацией сертификатов автоматически — приложения никогда не работают с TLS-файлами напрямую.

Управление трафиком. Декларативные правила маршрутизации — взвешенное разделение трафика для canary-релизов, политики повторных попыток, circuit breaker, таймауты. Всё настраивается без изменения кода приложений.

Наблюдаемость (Observability). Автоматическая распределённая трассировка (каждый вызов сервиса генерирует span), метрики трафика (частота запросов, частота ошибок, задержки по парам сервисов) и карты зависимостей сервисов — всё без инструментирования кода.

Авторизация между сервисами. Политики вида «orders может вызывать payments, но не billing» настраиваются через AuthorizationPolicy и не зависят от языка реализации сервисов.

Популярные реализации

Istio — самый функциональный service mesh. Мощное управление трафиком, авторизация и интеграция с Kubernetes-экосистемой. Основной недостаток — сложность: Istio добавляет к каждому поду sidecar на 100–200 МБ памяти и удваивает количество сетевых хопов. Для команд, которым нужен тонкий контроль трафика и multi-cluster поддержка, сложность оправдана.

Linkerd — лёгкая альтернатива с минимальным профилем ресурсов. Обеспечивает mTLS, наблюдаемость и базовое управление трафиком. Если ваши основные потребности — mTLS и автоматическая наблюдаемость без сложных политик трафика, Linkerd часто оказывается лучшим выбором.

Cilium — использует eBPF вместо sidecar-прокси, что снижает задержку до <1 мс на хоп. Современный подход без традиционного оверхеда sidecar.

Сравнительная таблица

| Критерий | API Gateway | Service Mesh |

|----------|-------------|--------------|

| Тип трафика | North-South (внешний) | East-West (внутренний) |

| Уровень OSI | L7 (прикладной) | L4/L7 (транспортный/прикладной) |

| Модель развёртывания | Централизованный (edge) | Децентрализованный (sidecar на сервис) |

| Аутентификация | JWT, OAuth2, API Keys | mTLS, SPIFFE |

| Rate Limiting | Глубокий, по потребителям | Базовый |

| Service Discovery | Не нативно | Автоматическое |

| Наблюдаемость | Метрики эндпоинтов | Распределённая трассировка, топология |

| Отказоустойчивость | Retry, circuit breaker | Retry, circuit breaker, таймауты |

| Влияние на код | Не требует (через конфиг) | Не требует (sidecar) |

| Потребление ресурсов | Минимальное | ~100–200 МБ на sidecar |

| Задержка | <5 мс (warm) | 1–10 мс на хоп |

Когда использовать только API Gateway

API Gateway без Service Mesh — абсолютно рабочая конфигурация для многих сценариев:

  • У вас 3–15 сервисов и вы не делаете canary-релизы каждый день. Mesh в этом случае будет стоить дороже, чем приносить.
  • Вы не используете Kubernetes — разворачиваете сервисы на виртуальных машинах или в номадном кластере без поддержки sidecar.
  • У вас публичное API с внешними клиентами, но внутренняя коммуникация проста и не требует mTLS или распределённой трассировки.
  • Вы только начинаете переход на микросервисы и хотите минимизировать операционную сложность.

В этих сценариях API Gateway даёт наибольшую ценность с наименьшей сложностью: централизованная аутентификация, rate limiting и маршрутизация с минимальными затратами на инфраструктуру.

Когда использовать только Service Mesh

Обратная ситуация — Service Mesh без Gateway — встречается реже, но возможна:

  • Ваши сервисы не имеют внешнего API (внутренняя платформа, worker-процессы, event-driven архитектура).
  • Вся аутентификация — service-to-service через mTLS, внешних клиентов нет.
  • Вам нужна автоматическая наблюдаемость для отладки каскадных отказов и узких мест.

В такой конфигурации Gateway избыточен: внешнего трафика нет, аутентификация делается через mTLS, а маршрутизация и наблюдаемость обеспечиваются mesh.

Совместное использование: два слоя безопасности

В зрелой production-архитектуре оба слоя используются вместе и решают разные задачи:

Внешний периметр (API Gateway):

  • Терминирует TLS и валидирует клиентские сертификаты
  • Аутентифицирует внешних пользователей (JWT, OAuth2)
  • Применяет rate limiting по потребителям (1000 req/min по API key)
  • Маршрутизирует и трансформирует запросы
  • Логирует все внешние обращения

Внутренняя сеть (Service Mesh):

  • Шифрует весь east-west трафик через mTLS
  • Обеспечивает автоматическую трассировку запросов
  • Реализует circuit breaker и retry политики между сервисами
  • Контролирует доступ (Service A может вызывать Service B, но не C)

Пример сквозного прохождения запроса

Внешний клиент отправляет запрос на api.example.com. API Gateway (Kong, AWS API Gateway или Spring Cloud Gateway) терминирует TLS, валидирует JWT клиента, проверяет rate limit (например, 1000 запросов в минуту по API-ключу), трансформирует запрос — заменяет внешний токен на подписанный внутренний identity-заголовок. Затем запрос направляется к целевому сервису внутри кластера. Sidecar Service Mesh перехватывает входящий запрос, проверяет mTLS от сервис-аккаунта Gateway, сверяет AuthorizationPolicy и, если доступ разрешён, пропускает запрос к контейнеру приложения. Всё это происходит прозрачно для кода сервиса.

Критерии выбора: decision matrix

| Сценарий | Рекомендация |

|----------|--------------|

| Публичное API с внешними клиентами | API Gateway |

| Внутренняя коммуникация 10+ сервисов | Service Mesh |

| И то, и другое | Оба слоя |

| Простой монолит или 1–2 сервиса | Только reverse proxy (nginx) |

| Сложные микросервисы (20+) на Kubernetes | Оба слоя |

| Нужен mTLS между всеми сервисами | Service Mesh |

| Нужен rate limiting для внешних клиентов | API Gateway |

| Canary-релизы и A/B-тестирование | Service Mesh (или оба) |

| Разные команды, разные релизы сервисов | Оба слоя — Gateway скрывает топологию |

| Меньше 50 сервисов — оправдан ли mesh? | Зависит от потребности в mTLS и наблюдаемости |

Антипаттерны и подводные камни

Дублирование функциональности. Если и Gateway, и Mesh настроены на retry, при сбое они могут создать «retry-шторм» — каждый слой повторяет запрос, умножая нагрузку. Выберите одно место: лучше mesh, потому что он ближе к сервису и видит больше контекста.

Gateway как распределённый монолит. Команды часто добавляют в Gateway кеширование, персонализацию, агрегацию данных, а затем и базу данных. Gateway должен оставаться тонким и заниматься только routing, auth, rate limiting и observability. Аудит конфигурации gateway раз в квартал помогает выявить разрастание.

Mesh ради mesh. Если у вас 15 сервисов и 5 разработчиков, Istio из коробки добавит 100–200 МБ памяти на каждый под и удвоит количество сетевых хопов. Операционная сложность может перевесить выгоду. Оценивайте mesh только когда явно нужны mTLS и автоматическая наблюдаемость.

mTLS в двух местах. Если у вас mesh, mTLS внутри — его работа. Gateway терминирует внешний TLS и общается с внутренним сервисом тоже через mTLS, который выписывает mesh. Не настраивайте mTLS повторно в коде сервисов.

Вендор-локин. Конфигурация Istio не переносится на Linkerd за день. Перед выбором mesh оцените, насколько вы готовы к тому, что выбор будет «навсегда». То же касается gateway: API Gateway от AWS — это не Kong с другой кнопкой.

Тренды 2026 года

Kubernetes Gateway API как стандарт. Ingress-NGINX устарел в марте 2026 года, на смену пришёл Gateway API. HTTPRoute, GRPCRoute и Policy Attachment становятся стандартным способом конфигурации. Инструмент ingress2gateway v1.0 помогает мигрировать существующие Ingress-конфигурации.

eBPF-решения снижают оверхед mesh. Cilium и Linkerd 3.x используют eBPF вместо sidecar-прокси на пользовательском уровне, снижая задержку до <1 мс на хоп. Это делает Service Mesh практичным даже для latency-sensitive приложений.

AI Gateway как новая категория. С распространением MCP (Model Context Protocol) и AI-агентов появился новый подкласс gateway — AI Gateway. Kong AI Gateway, Apache APISIX ai-proxy и MCP-шлюзы управляют LLM-трафиком с token-based rate limiting, модельной маршрутизацией, PII-фильтрацией и контролем стоимости на уровне инфраструктуры.

Заключение

API Gateway и Service Mesh — не конкурирующие технологии, а взаимодополняющие слои сетевой инфраструктуры. Gateway защищает внешний периметр: кто и как входит в вашу систему. Mesh управляет внутренней коммуникацией: как сервисы общаются друг с другом.

Правило простое: начинайте с API Gateway — он даёт наибольшую ценность на ранних этапах. Добавляйте Service Mesh когда внутренняя коммуникация становится достаточно сложной, чтобы оправдать операционные затраты. В зрелой архитектуре используйте оба слоя с чёткой границей ответственности — и тогда вы избежите как дублирования функциональности, так и пробелов в безопасности.

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

FAQ

1. Можно ли использовать Service Mesh вместо API Gateway?

Только если у вас нет внешних клиентов. Service Mesh не предназначен для управления внешним трафиком: в нём нет полноценной аутентификации пользователей, rate limiting по потребителям, управления API-ключами и developer portal.

2. Нужен ли API Gateway если уже есть Service Mesh?

Да, если у вас есть внешние клиенты. Mesh отлично управляет внутренним трафиком, но не заменяет edge-функции Gateway — аутентификацию внешних пользователей, rate limiting по API-ключам, версионирование API.

3. Сколько сервисов нужно для оправданного внедрения Service Mesh?

Однозначного ответа нет, но практика показывает, что mesh начинает окупаться при 20–50+ сервисах в кластере. Если у вас 5–10 сервисов, API Gateway + хорошо написанные сервисы дадут 90% необходимого без сложности mesh.

4. Какой Service Mesh выбрать в 2026?

Смотрите на три варианта: Istio Ambient (без sidecar для снижения ресурсов), Linkerd (простота и минимальный оверхед) и Cilium (eBPF, максимальная производительность). Для типового Kubernetes-кластера Linkerd — безопасный старт.

5. Влияет ли Gateway на производительность?

Современный Gateway добавляет 1–5 мс медианной задержки при прогретом кеше. Service Mesh c sidecar добавляет 1–10 мс на хоп в зависимости от глубины стека вызовов. eBPF-решения снижают задержку до <1 мс.