Получить доступ

Какая основная роль Spring Cloud Gateway?

MiddleSpring Cloud
Ещё спрашивают так:
  • Зачем нужен API Gateway?
Коротко

Spring Cloud Gateway — L7-шлюз на входе в систему: маршрутизация по пути, хосту и заголовкам к сервисам и сквозные политики — аутентификация, rate limiting, повторы, circuit breaker, CORS, переписывание путей.

  • Маршрут = предикаты (когда) + фильтры (что сделать) + адрес сервиса
  • Классический вариант — на WebFlux и Netty; есть вариант на Spring MVC (Gateway Server MVC)
  • Не класть в шлюз бизнес-логику — он становится узким местом и общей точкой изменений

А ещё Альтернативы: nginx, Envoy, Kong, ingress Kubernetes

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Задачи шлюза:

  • маршрутизация — /api/orders/** → сервис заказов, /api/users/** → пользователи; по заголовкам — канареечные версии;
  • аутентификация на входе — проверка JWT один раз, передача пользователя сервисам в заголовке;
  • ограничение частоты — RequestRateLimiter с Redis;
  • устойчивость — таймауты, повторы, circuit breaker на маршрут;
  • преобразования — переписывание путей, добавление заголовков, CORS;
  • наблюдаемость — единая точка метрик и трассировки входящего трафика.

Устройство: маршрут состоит из предикатов (Path, Host, Method, Header, Weight) и цепочки фильтров. Адрес — URL или lb://orders (через service discovery и клиентскую балансировку).

Реализация: исходный Gateway работает на WebFlux (Netty) — неблокирующий, держит много соединений. С 2023 года есть Gateway Server MVC на сервлетном стеке.

Чего не делать: бизнес-логику и агрегацию данных в шлюзе — он общий для всех команд и превращается в монолит на входе. Для агрегации под клиента — отдельный BFF.

Выбор: если весь стек на Spring и нужна гибкая логика на Java — Spring Cloud Gateway; если нужна максимальная производительность и инфраструктурное управление — Envoy, nginx, ingress-контроллер.

Пример

spring.cloud.gateway.routes:
  - id: orders
    uri: lb://orders
    predicates: [Path=/api/orders/**]
    filters:
      - StripPrefix=1
      - name: CircuitBreaker
        args: { name: orders, fallbackUri: forward:/fallback/orders }

Что хотят услышать

  • Задачи шлюза.
  • Предикаты, фильтры, маршруты.
  • Чего не делать в шлюзе, BFF.

Частые ошибки

  • Складывать бизнес-логику в шлюз.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Компилировать Java-код в bytecode
  • ✓Маршрутизировать входящий трафик к сервисам и применять cross-cutting политики
  • ✗Хранить JPA entities
  • ✗Заменять unit-тесты

Что спросят дальше

  • Что такое predicate и filter в Gateway?
  • Чем gateway отличается от service mesh?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем