Представьте, что у вас есть огромный ресторан со множеством кухонь (каждая кухня — это микросервис). Клиенты (пользователи) заходят в ресторан, и вы не хотите, чтобы они метались между кухнями, выясняя, где делают суши или где готовят пиццу. Что вы делаете? Вы нанимаете официанта (API Gateway), который принимает заказы, передаёт их на нужную кухню и приносит клиенту готовое блюдо. API Gateway — это тот самый официант для вашего микросервисного ресторана.
API Gateway — это слой между вашими клиентами (например, фронтендом, мобильным приложением или сторонними системами) и вашими микросервисами. Он упрощает взаимодействие и управление запросами в распределённой системе.
В сложных микросервисных приложениях взаимодействие напрямую с каждым сервисом может быть проблематичным. Здесь на сцену выходит API Gateway, выступающий в роли единой точки входа для всех запросов.
Основные функции API Gateway
- Маршрутизация запросов.
Представьте API Gateway как диспетчера, который решает, куда именно направить запрос. Например, запросы на/usersотправляются в микросервис "Пользователи", а запросы на/orders— в микросервис "Заказы". - Безопасность.
API Gateway может реализовывать аутентификацию и авторизацию. Например, проверить, есть ли у клиента валидный токен JWT и имеет ли он право вызывать определённый эндпойнт. - Балансировка нагрузки.
Когда у нас много экземпляров одного микросервиса (например, три контейнера с микросервисом "Платежи"), API Gateway может распределять запросы между ними, чтобы избежать перегрузок. - Мониторинг и логирование.
API Gateway также может собирать статистику о количестве запросов, их типах, ошибках и времени обработки. Это помогает понять, как ваше приложение используется. - Ограничение скорости запросов (Rate Limiting).
Часто API используется внешними клиентами или партнёрами. API Gateway ограничивает количество запросов от одного клиента, чтобы защитить ваше приложение от перегрузки. - Изменение формата данных.
Если клиенты ожидают данные в другом формате (например, фронтенд работает с одними полями, а микросервис возвращает другие), API Gateway может преобразовывать запросы и ответы.
Зачем нужен API Gateway?
Если у вас всего один монолитный сервер, то необходимость в API Gateway минимальна. Однако в микросервисах он жизненно необходим. Вот почему:
- Единая точка входа.
Вместо того, чтобы клиенты обращались к десяткам микросервисов, они взаимодействуют только с API Gateway. Это упрощает работу клиентов, так как им не нужно знать структуру вашей серверной части. - Сокрытие внутренней структуры микросервисов.
Ваши микросервисы могут быть изменены, перемещены или даже заменены, но клиенты этого не заметят благодаря API Gateway. Он абстрагирует внутреннюю архитектуру системы. - Управление доступом.
API Gateway выступает в роли "охранника", удостоверяющегося, что доступ к вашим сервисам имеют только авторизованные пользователи. - Поддержка мобильных устройств и фронтенда.
API Gateway может предоставлять разные интерфейсы для различных типов клиентов. Например, более легковесный API для мобильного приложения и более насыщенный API для браузера.
Примеры использования API Gateway
- Netflix, как пионер микросервисной архитектуры, использует API Gateway для маршрутизации запросов пользователей к соответствующим сервисам, а также для обеспечения персонализированного опыта (например, рекомендаций).
- Amazon обрабатывает миллионы запросов в секунду и реализует API Gateway для управления запросами от разных клиентов, включая веб-приложения, мобильные телефоны и устройства с голосовым управлением.
- В маркетплейсах с сотнями микросервисов API Gateway помогает централизованно управлять взаимодействием между микро-сервисами покупателей, продавцов и обработки заказов.
Как работает API Gateway?
- Клиент посылает запрос к API Gateway
Клиенты (мобильные приложения, веб-браузеры) не знают ничего о микросервисах. Все их запросы направляются к API Gateway. - API Gateway анализирует запрос
На основании запроса (его пути, метода HTTP, заголовков и т.д.) API Gateway решает, какой микросервис должен обработать запрос. - Маршрутизация запроса
API Gateway перенаправляет запрос к нужному микросервису. Например:- Запрос
https://api.example.com/usersперенаправляется на микросервис "Пользователи". - Запрос
https://api.example.com/ordersотправляется микросервису "Заказы".
- Запрос
- Обратный поток ответа
После обработки запроса микросервис возвращает ответ. API Gateway может модифицировать его (например, добавить заголовки) и отправляет клиенту.
API Gateway в микросервисной архитектуре: визуализация
Клиенты -> [ API Gateway ] -> [ Сервис A ]
Мобильное (Маршрутизация) [ Сервис B ]
приложение [ Сервис C ]
и фронтенд
Доступные решения для API Gateway
На рынке существует множество решений для API Gateway. Вот некоторые из них:
| Решение | Описание |
|---|---|
| Spring Cloud Gateway | Инструмент от экосистемы Spring. Отлично интегрируется с другими Spring-проектами |
| Kong Gateway | Высокопроизводительное решение, поддерживающее расширяемость с помощью плагинов |
| AWS API Gateway | Управляемое API Gateway-решение от Amazon для работы в облаке |
| NGINX | Лёгкое, но мощное решение для маршрутизации и балансировки |
| Traefik | Отличный вариант для контейнеризированных сервисов (например, Kubernetes, Docker) |
В нашем курсе мы сосредоточимся на Spring Cloud Gateway, так как это естественный выбор для приложений на Spring Boot.
Практическое применение знаний
Полезность API Gateway на собеседовании и в реальной работе сложно переоценить. Если вы расскажете, как корректно внедрили API Gateway в микросервисное решение, это покажет ваш профессионализм и умение проектировать сложные системы. Разработка API Gateway также часто становится частью технического задания в крупных проектах.
На следующей лекции мы начнем разбирать практическую реализацию API Gateway с использованием Spring Cloud Gateway!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ