← Назад ко всем вопросам

Что такое API Gateway и какие задачи он решает?

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

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

Зачем нужен API Gateway

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

  2. Маршрутизация запросов: API Gateway определяет, к какому микросервису направить запрос, основываясь на URL или других параметрах запроса.

  3. Безопасность: Он может выполнять аутентификацию и авторизацию, обеспечивая, что только авторизованные пользователи могут получить доступ к определенным ресурсам.

  4. Балансировка нагрузки: API Gateway может распределять входящие запросы между несколькими экземплярами микросервисов, чтобы обеспечить равномерную загрузку и высокую доступность.

  5. Кэширование: Он может кэшировать ответы от микросервисов, чтобы уменьшить нагрузку и ускорить время отклика для часто запрашиваемых данных.

  6. Трансформация данных: API Gateway может изменять формат данных, например, преобразовывать XML в JSON, чтобы соответствовать требованиям клиента.

  7. Мониторинг и логирование: Он может собирать метрики и логи, предоставляя информацию о производительности и использовании API.

Пример работы API Gateway

Рассмотрим пример, где API Gateway используется для управления запросами к системе интернет-магазина, состоящей из нескольких микросервисов: каталог товаров, корзина, заказы и пользователи.

Клиент -> API Gateway -> Микросервис каталога товаров
                      -> Микросервис корзины
                      -> Микросервис заказов
                      -> Микросервис пользователей

Пример кода

Предположим, у нас есть API Gateway, реализованный с использованием Node.js и Express.js, который маршрутизирует запросы к различным микросервисам.

const express = require('express');
const app = express();
const request = require('request');
​
app.use(express.json());
​
// Маршрутизация запросов к микросервису каталога товаров
app.use('/catalog', (req, res) => {
    const url = `http://catalog-service${req.url}`;
    req.pipe(request(url)).pipe(res);
});
​
// Маршрутизация запросов к микросервису корзины
app.use('/cart', (req, res) => {
    const url = `http://cart-service${req.url}`;
    req.pipe(request(url)).pipe(res);
});
​
// Маршрутизация запросов к микросервису заказов
app.use('/orders', (req, res) => {
    const url = `http://orders-service${req.url}`;
    req.pipe(request(url)).pipe(res);
});
​
// Маршрутизация запросов к микросервису пользователей
app.use('/users', (req, res) => {
    const url = `http://users-service${req.url}`;
    req.pipe(request(url)).pipe(res);
});
​
app.listen(3000, () => {
    console.log('API Gateway is running on port 3000');
});
  • express и request — библиотеки для создания сервера и пересылки HTTP-запросов.
  • app.use('/catalog', ...) — маршрутизирует все запросы, начинающиеся с /catalog, к микросервису каталога товаров.
  • req.pipe(request(url)).pipe(res) — перенаправляет запрос от клиента к соответствующему микросервису и возвращает ответ обратно клиенту.
  • app.listen(3000, ...) — запускает API Gateway на порту 3000.

API Gateway значительно упрощает управление микросервисами, обеспечивая централизованное управление и улучшая масштабируемость и безопасность системы.

Тема: Архитектура и распределённые системы
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки