API Gateway часто упоминается на собеседованиях по сисдизу, предлагаю кратко разобраться, что это.
Проводя аналогию, API Gateway можно сравнить с ресепшеном в отеле. Гость начинает взаимодействие с отелем с ресепшена. Гостю не нужно знать, как устроен отель внутри — ресепшен проверит паспорт и направит в нужный номер.
Так и API Gateway — это входная точка для всех запросов от пользователей. Он скрывает внутреннюю архитектуру и направляет запрос к нужному микросервису.
Клиент стучится GET /orders, API Gateway перенаправляет запрос в order-service.
То есть основная функция API Gateway — это маршрутизация запросов. Но он может выполнять и другие функции:
🟣 Первичная валидация запроса
Сразу на входе может отсеять мусорные запросы: кривые заголовки, IP из блэклиста, некорректный JSON. Экономит бэкенду нервы и ресурсы.
🟡 Аутентификация
Может проверить подпись JWT-токена, срок действия и другие поля. При этом валидный токен часто прокидывается дальше на бэк, так как бэку он тоже нужен: для проверки прав доступа ответа, для запросов к другим микросервисам.
🔵 Rate limiting
Если одновременно приехало много гостей, то их не пустят бродить по отелю в поисках номера.
API Gateway при каждом запросе проверяет, нет ли превышения лимита запросов за интервал времени. Если лимит превышен, запрос не пропускается к бэкенду. В разных API Gateway данные о лимитах могут храниться в памяти или отдельно в Redis.
🟢 Кэширование
Если кто-то хочет просто меню глянуть, ресепшен отдаст листовку.
Так же и API Gateway может отдать заранее закэшированный ответ, который не завязан на конкретного пользователя.
🟣 Терминирование TLS
Это означает, что API Gateway может расшифровать HTTPS и дальше прокинуть запрос в незашифрованном виде, если внутренняя сеть уже защищена.
Примеры API Gateway
Какие я встречала на проектах (сама не настраивала, это делали девопсы):
- Nginx — основные функции он может выполнять, но это не полноценный специализированный API Gateway
- Tyk (читается "тайк") — полноценный API Gateway
- Istio Ingress Gateway — часть сервис-меша Istio, можно настроить все функции API Gateway
Другие популярные open-source API Gateway, которые нашла в интернете, но вживую не сталкивалась:
- Kong
- Traefik
- Ambassador
- KrakenD
Когда на собесе стоит добавлять на схему API Gateway?
✅ если вырисовывается микросервисная архитектура, добавляйте
✖️ если получается обычный клиент-сервер с монолитом, не добавляйте.
Когда начинала писать пост, хотела рассказать еще про BFF, но решила, что лучше о нем в следующий раз.
#сисдиз
