System Design
API Gateway
Цели урока
- Понять роль API Gateway как единой точки входа
- Изучить cross-cutting concerns: auth, rate limiting, transformation
- Освоить BFF pattern для разных типов клиентов
- Реализовать rate limiting с Redis (sliding window)
- Избегать anti-patterns: fat gateway, SPOF, no circuit breaker
Предварительные знания
- Основы микросервисной архитектуры
- Понимание HTTP/REST API
Что такое API Gateway
**API Gateway** - единая точка входа для всех клиентов. Маршрутизирует запросы к микросервисам, выполняет cross-cutting concerns.
Gateway - это **reverse proxy** с дополнительными возможностями: auth, rate limiting, request transformation, aggregation.
Почему SSL termination на API Gateway - хорошая практика?
Функции API Gateway
Gateway выполняет **cross-cutting concerns** - функциональность, которую не хочется дублировать в каждом сервисе.
**Anti-pattern: Fat Gateway**. Gateway должен делать routing и cross-cutting concerns. Бизнес-логика остаётся в сервисах!
Какую функцию НЕ должен выполнять API Gateway?
Backend for Frontend (BFF)
**BFF** - специализированный gateway для каждого типа клиента. Mobile, Web, TV имеют разные потребности в данных.
**Ownership**: BFF принадлежит команде клиента. Mobile team владеет Mobile BFF. Это позволяет им двигаться независимо от backend.
BFF также решает проблему **aggregation** - объединения данных из нескольких сервисов в один ответ.
Mobile app показывает home screen с данными из 5 сервисов. Без BFF каждый запрос занимает 50ms. Сколько времени займёт загрузка?
Rate Limiting
**Rate Limiting** защищает backend от перегрузки и abuse. Gateway - идеальное место для централизованного лимитирования.
**Разные лимиты**: per-user (authenticated), per-IP (anonymous), per-endpoint (expensive operations). Комбинируйте для гибкости.
API позволяет 100 req/min. Пользователь сделал 99 запросов в 12:00:59, затем ещё 100 в 12:01:01. Fixed Window пропустит сколько запросов?
Решения и Anti-patterns
Выбор Gateway зависит от требований: managed для простоты, self-hosted для контроля.
| Gateway | Тип | Особенности | Когда использовать |
|---|---|---|---|
| Kong | Open Source | Plugins, Lua, K8s native | Гибкость, self-hosted |
| AWS API Gateway | Managed | Lambda, pay-per-request | AWS ecosystem |
| Envoy | Proxy | gRPC, observability | Service mesh ready |
| Nginx | Self-hosted | High perf, reverse proxy | Простые случаи |
| Traefik | Cloud native | Auto-discovery, Let's Encrypt | Kubernetes |
| Cloudflare | Edge | CDN + Gateway + DDoS | Global distribution |
**Anti-patterns** - типичные ошибки при проектировании Gateway:
**HA**: Gateway перед Load Balancer. Минимум 2 инстанса в разных availability zones.
BFF делает 4 параллельных запроса к сервисам. Один из сервисов отвечает за 5 секунд. Что произойдёт без таймаута?
Ключевые принципы API Gateway
- **API Gateway** - единая точка входа для всех клиентов
- **Cross-cutting concerns**: routing, auth, rate limiting, SSL termination
- **BFF pattern** - специализированный gateway для каждого типа клиента
- **Rate Limiting**: Token Bucket или Sliding Window + Redis
- **HA обязательна**: минимум 2 инстанса + Load Balancer
- **Не fat gateway**: только routing и infra, бизнес-логика в сервисах
Связанные темы
Gateway - часть инфраструктуры микросервисов
- Load Balancer — LB перед несколькими gateway инстансами
- Service Mesh — Service-to-service communication после gateway
- Caching — Response caching на gateway уровне