API Gateway, BFF, service discovery

↑ 8.3 Микросервисы и распределённые системы · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: senior

Зачем это на собесе

Как клиенты обращаются к десяткам сервисов и что делает шлюз.

Объяснение

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.

ЗадачаGatewayBFF
Маршрутизация, лимиты, TLSданет
Общая аутентификациядаиспользует
Агрегация под экраннет (или минимально)да
Логика клиентанетда

Service discovery — как сервисы находят друг друга: DNS Kubernetes (orders.default.svc), реестры (Consul, Eureka), клиентская балансировка. В Kubernetes достаточно Service и DNS.

Нюансы и подводные камни

  • Шлюз не место для бизнес-логики: он не должен стать новым монолитом.
  • Единая точка отказа: репликация и мониторинг.
  • Агрегация в шлюзе увеличивает задержку и связанность.
  • Сквозные заголовки (traceparent, Authorization) должны корректно пробрасываться.
  • Аутентификация в шлюзе не отменяет авторизацию в сервисах (zero trust).

Практика

  1. Настройте YARP маршрутизацию на два сервиса с health checks.
  2. Реализуйте BFF для веб-клиента, агрегирующий 3 сервиса.
  3. Добавьте rate limiting и JWT-проверку на шлюзе.

Вопросы с ответами

Связанные темы