API Gateway
Единая точка входа перед группой сервисов: маршрутизирует запросы, проверяет авторизацию, режет лимиты и терминирует TLS.
Что такое API Gateway
API Gateway (API-шлюз) — сервис, стоящий перед вашими бэкендами и принимающий весь внешний трафик. Клиент знает один адрес — шлюз, а тот разбирается, в какой сервис отправить запрос, и попутно делает то, что иначе пришлось бы писать в каждом сервисе: проверку токена, лимиты, логирование, TLS.
Проблема, которую он решает, появляется вместе с микросервисами. Без шлюза мобильному приложению нужно знать адреса десятка сервисов, а каждая команда пишет свою проверку авторизации — по-своему и с собственными багами. Шлюз выносит общее в одно место.
┌──────────────┐
клиенты ──HTTPS──▶ │ API Gateway │──▶ /v1/orders → orders-svc
│ authn, лимиты │──▶ /v1/users → users-svc
│ TLS, логи │──▶ /v1/generate → gpu-inference
└──────────────┘
Что он делает
- Маршрутизация. По пути, хосту или заголовку выбирает нужный сервис.
- Аутентификация. Проверяет JWT, API-ключ или OAuth-токен и не пропускает дальше чужих. Бэкенд получает уже проверенный запрос с id пользователя в заголовке.
- Rate limiting. Режет частоту запросов на клиента и возвращает
429— защита и от перебора, и от случайного цикла в чужом коде. - Терминация TLS. Сертификат лежит на шлюзе, внутрь трафик идёт по HTTP в закрытом контуре.
- Трансформация. Меняет заголовки, склеивает ответы нескольких сервисов, отдаёт наружу REST, а внутрь ходит gRPC.
- Наблюдаемость. Единая точка, где видно все запросы: логи, метрики, трейсинг.
- Версионирование.
/v1/и/v2/разводятся на разные бэкенды без изменений в клиентах.
Gateway, балансировщик и reverse proxy
Границы размыты — один и тот же Nginx может быть всеми тремя. Разница в уровне задач:
| Load balancer | Reverse proxy | API Gateway | |
|---|---|---|---|
| Основная задача | размазать нагрузку по репликам | скрыть бэкенд, отдать статику, кешировать | управлять API целиком |
| Знает о бизнес-логике | нет | нет | да: пути, версии, тарифы |
| Авторизация | нет | редко | штатно |
| Лимиты на клиента | нет | базовые | по ключу и тарифу |
| Уровень | L4 или L7 | L7 | L7 |
Практически: балансировщик отвечает на вопрос «на какую из одинаковых реплик отправить», шлюз — «что это за запрос, можно ли его вообще пропускать и в какой сервис он идёт». В реальной схеме они стоят рядом: балансировщик перед несколькими экземплярами шлюза, а шлюз — перед сервисами.
Чем поднимают
- Traefik — автоматически подхватывает маршруты из меток Docker и выпускает сертификаты Let's Encrypt.
- Kong, APISIX, Envoy — полноценные шлюзы с плагинами: аутентификация, лимиты, трансформации.
- Nginx — если нужны только маршрутизация, TLS и простые лимиты, отдельный шлюз часто избыточен.
- Kubernetes — роль шлюза играют Ingress-контроллер или Gateway API.
- Облачные шлюзы — управляемый сервис, типичная связка для serverless-функций.
Маршрутизация лимитов в Nginx для тяжёлого GPU-эндпоинта:
limit_req_zone $http_authorization zone=api:10m rate=10r/s;
location /v1/generate {
limit_req zone=api burst=20 nodelay;
proxy_pass http://gpu_inference;
proxy_read_timeout 300; # инференс отвечает не мгновенно
}
Чего опасаться
Шлюз — единая точка отказа: лёг он — недоступно всё. Отсюда минимум две реплики и health check на бэкендах. Второй риск — превращение шлюза в свалку бизнес-логики: правила трансформации накапливаются, и однажды выкатка фичи требует правки конфигурации шлюза. Логика — в сервисах, на шлюзе — только сквозные задачи.
Для одного монолита или пары сервисов шлюз не нужен: Nginx с проксированием закрывает те же потребности без лишнего компонента.
Связанные термины
- API — то, чем управляет шлюз
- load balancer — соседний компонент, решающий другую задачу
- Микросервисы и монолит — архитектура, порождающая потребность в шлюзе
- Nginx — самый доступный способ начать
- Traefik — шлюз для контейнерных окружений
- JWT и токены — что шлюз проверяет на входе
Готовы запустить GPU-задачу?
Запустить GPU-сервер