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

Spring Cloud: config, discovery, gateway, tracing

Config Server, Eureka/DiscoveryClient, Spring Cloud Gateway и распределённая трассировка.

Зачем Spring Cloud

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

Важная оговорка с самого начала: в Kubernetes заметную часть этих задач уже решает платформа. Поэтому полезно знать не только, как устроен каждый компонент, но и когда он не нужен.

Config Server

Spring Cloud Config Server — отдельный сервис, который раздаёт конфигурацию всем приложениям. Источник настроек — чаще всего Git-репозиторий: файлы вида orders-service-prod.yml лежат в нём, а сервис при старте спрашивает у Config Server свою конфигурацию по имени приложения и профилю.

Что это даёт: настройки меняются без пересборки артефакта, история изменений хранится в Git, одинаковые параметры не копируются по репозиториям сервисов. Обновить настройки без перезапуска помогает @RefreshScope и событие обновления.

Чего Config Server не решает — хранения секретов. Пароли и ключи в Git-репозитории остаются уязвимыми даже в закрытом репозитории. Для них используют Vault, облачный KMS или секреты Kubernetes. В Kubernetes обычную конфигурацию часто отдают через ConfigMap, и отдельный Config Server тогда не нужен.

Service discovery

Сервисы в облаке постоянно перезапускаются и меняют адреса, поэтому вызывать соседа по жёстко прописанному host:port нельзя. Service discovery позволяет обращаться по логическому имени: сервис при старте регистрируется в реестре, а клиент спрашивает у реестра живые экземпляры и выбирает один из них (балансировка на стороне клиента).

Классический реестр в Spring Cloud — Eureka из стека Netflix. В Kubernetes ту же роль выполняют объект Service и встроенный DNS: имя orders-service и так разрешается в живые поды. Поэтому в Kubernetes Eureka обычно избыточна.

API Gateway

Gateway — единая точка входа для внешнего трафика. Spring Cloud Gateway принимает запрос и по правилам маршрутизации передаёт его нужному сервису. На шлюзе удобно делать то, что одинаково для всех сервисов: завершение TLS, проверку токена, ограничение частоты запросов, добавление correlation id, постепенное переключение трафика на новую версию.

Главное правило: на шлюзе не должно быть бизнес-логики. Если в него начинают переносить правила предметной области, он превращается во второй монолит, который нужно выкатывать вместе со всеми сервисами.

spring:
  cloud:
    gateway:
      routes:
        - id: orders
          uri: lb://orders-service     # lb — балансировка через discovery
          predicates:
            - Path=/orders/**

Распределённая трассировка

Трассировка связывает один пользовательский запрос в цепочке сервисов: каждый сервис получает trace id из заголовка, создаёт свой span и передаёт контекст дальше. В системе вроде Zipkin или Jaeger видно, сколько времени запрос провёл в каждом сервисе и где возникла ошибка.

В Spring Boot 3 трассировку строят на Micrometer Tracing с мостом в OpenTelemetry. Spring Cloud Sleuth, о котором пишут старые материалы, больше не развивается — для Boot 3 он не подходит.

Как отвечать на собеседовании

Разберите компоненты по задачам, а не по названиям: Config Server — централизованная конфигурация (но секреты — в Vault или KMS), discovery — поиск по логическому имени, Gateway — единая точка входа без бизнес-логики, трассировка — путь запроса через сервисы на Micrometer Tracing и OpenTelemetry.

Сильный акцент — граница с платформой. В Kubernetes discovery даёт Service и DNS, конфигурацию — ConfigMap, а часть функций шлюза и трассировки может взять на себя service mesh вроде Istio. Выбирать компоненты стоит по тому, чего не хватает в инфраструктуре, а не подключать весь Spring Cloud по привычке.

Вопросы по теме

Читайте также

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

Знать тему — половина дела

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

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