API Gateway, BFF, service discovery
↑ 8.3 Микросервисы и распределённые системы · ← Предыдущая · → Следующая
Зачем это на собесе
Как клиенты обращаются к десяткам сервисов и что делает шлюз.
Объяснение
API Gateway — единая точка входа: маршрутизация, аутентификация, лимиты, TLS, кэш, агрегация, трансформации, наблюдаемость.
| Технология | Заметки |
|---|---|
| YARP (.NET) | программируемый reverse proxy, гибкость кода |
| Ocelot | шлюз для .NET |
| Envoy / Nginx / Traefik / Kong | универсальные прокси/шлюзы |
| Облачные (AWS API Gateway, Azure APIM) | управляемые |
{ "ReverseProxy": {
"Routes": { "orders": { "ClusterId": "orders", "Match": { "Path": "/api/orders/{**rest}" } } },
"Clusters": { "orders": { "Destinations": { "d1": { "Address": "http://orders:8080/" } }, "LoadBalancingPolicy": "RoundRobin" } } } }BFF (Backend For Frontend) — отдельный слой под конкретного клиента (web, mobile), собирающий и упрощающий данные под его экраны; у каждого клиента свой BFF.
| Задача | Gateway | BFF |
|---|---|---|
| Маршрутизация, лимиты, TLS | да | нет |
| Общая аутентификация | да | использует |
| Агрегация под экран | нет (или минимально) | да |
| Логика клиента | нет | да |
Service discovery — как сервисы находят друг друга: DNS Kubernetes (orders.default.svc), реестры (Consul, Eureka), клиентская балансировка. В Kubernetes достаточно Service и DNS.
Нюансы и подводные камни
- Шлюз не место для бизнес-логики: он не должен стать новым монолитом.
- Единая точка отказа: репликация и мониторинг.
- Агрегация в шлюзе увеличивает задержку и связанность.
- Сквозные заголовки (
traceparent,Authorization) должны корректно пробрасываться. - Аутентификация в шлюзе не отменяет авторизацию в сервисах (zero trust).
Практика
- Настройте YARP маршрутизацию на два сервиса с health checks.
- Реализуйте BFF для веб-клиента, агрегирующий 3 сервиса.
- Добавьте rate limiting и JWT-проверку на шлюзе.
Вопросы с ответами
Зачем API Gateway?
Единая точка входа для клиентов: маршрутизация, безопасность, ограничения, наблюдаемость.
Чем BFF отличается от gateway?
BFF настроен под конкретного клиента и агрегирует данные для его интерфейса; gateway — общий инфраструктурный слой.