Уявіть, що в вас є величезний ресторан з безліччю кухонь (кожна кухня — це мікросервіс). Клієнти (користувачі) заходять у ресторан, і ви не хочете, щоб вони бігали між кухнями, шукаючи, де роблять суші або де готують піцу. Що робите? Ви наймаєте офіціанта (API Gateway), який приймає замовлення, передає їх на потрібну кухню і приносить клієнту готову страву. API Gateway — це той самий офіціант для вашого мікросервісного ресторану.
API Gateway — це шар між вашими клієнтами (наприклад, фронтендом, мобільним додатком або сторонніми системами) і вашими мікросервісами. Він спрощує взаємодію та керування запитами в розподіленій системі.
У складних мікросервісних додатках взаємодія напряму з кожним сервісом може створювати проблеми. Тут на сцену виходить API Gateway, який виступає як єдина точка входу для всіх запитів.
Основні функції API Gateway
- Маршрутизація запитів.
Уявіть API Gateway як диспетчера, який вирішує, куди саме направити запит. Наприклад, запити на/usersвідправляються в мікросервіс "Користувачі", а запити на/orders— в мікросервіс "Замовлення". - Безпека.
API Gateway може реалізовувати аутентифікацію та авторизацію. Наприклад, перевірити, чи є у клієнта валідний токен JWT і чи має він право викликати певний endpoint. - Балансування навантаження.
Коли в нас багато екземплярів одного мікросервісу (наприклад, три контейнери з мікросервісом "Платежі"), 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!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ