System Design Space
Граф знанийНастройки

Обновлено: 7 мая 2026 г. в 18:26

Обнаружение сервисов (service discovery)

средний

Как сервисы находят актуальные адреса друг друга: реестр сервисов, DNS, проверки работоспособности, балансировка трафика и поведение при отказах.

Обнаружение сервисов выглядит мелочью ровно до тех пор, пока сервисов и окружений не становится слишком много для ручных адресов и статических конфигов.

Для реального проектирования глава помогает увидеть, как реестр сервисов, DNS, время жизни записей, проверки работоспособности, балансировка трафика и переключение на резерв образуют общий контур управления связью между сервисами.

Для интервью и инженерных разборов она полезна тем, что помогает заранее обсуждать устаревшие адреса, отказ реестра сервисов и расщепление кластера, а не вспоминать о них уже после инцидента.

Практическая польза главы

Практика проектирования

Проектируйте обнаружение сервисов вокруг динамических экземпляров и автоматического переключения на резерв.

Качество решений

Задавайте стратегию реестра сервисов, времени жизни записей и распространения сигналов работоспособности.

Аргументация на интервью

Обосновывайте выбор между обнаружением на стороне клиента и на стороне инфраструктуры по задержке и операционной простоте.

Анализ отказов

Предусматривайте устаревшие адреса, отказ реестра сервисов и расщепление кластера в контуре управления.

Контекст

Паттерны межсервисной коммуникации

Коммуникация между сервисами становится хрупкой, если адреса экземпляров и правила маршрутизации расходятся с реальным состоянием системы.

Открыть главу

решает базовую задачу распределённой среды: как сервисы находят друг друга при динамических экземплярах, переключении на резерв и масштабировании. Надёжный контур обнаружения соединяет , , и правила восстановления после сбоев.

Модели обнаружения

Обнаружение на стороне клиента

Клиент получает список из и сам выбирает адрес через локальную .

Обнаружение на стороне инфраструктуры

Клиент обращается к стабильной точке входа, например LB или прокси, а выбор конкретного экземпляра скрыт внутри инфраструктуры.

Обнаружение через DNS

Сервисы публикуются как DNS-имена; клиенты используют стандартное , и кэши DNS.

Обнаружение на стороне клиента

SDK обращается к реестру сервисов, хранит локальный пул экземпляров и маршрутизирует запросы на стороне клиента.

Сильные стороны

  • Максимальный контроль маршрутизации и повторных попыток на стороне клиента.
  • Быстрая реакция на локальные метрики задержки и ошибок.
  • Независимость от центрального прокси на рабочем пути запроса.

Ограничения

  • Нужно поддерживать SDK обнаружения во всех сервисах и языках.
  • Сложнее обеспечить единообразные правила на всей платформе.
Подходит для: Нагруженные внутренние сервисы с единым SDK и зрелой платформой наблюдаемости.
Поток: регистрация -> проверка -> поиск адреса -> маршрут
реестр v42

Очередь запросов

SD-REQ-101Web
billing / tenant:acme
SD-REQ-102Mobile
profile / user:42
SD-REQ-103Partner
orders / order:7712
SD-REQ-104Web
billing / tenant:globex

Контур обнаружения

Клиент сам получает адреса и локально выбирает экземпляр по политике.

Ожидание запроса

service-a-01

работает
зона: cluster-aнагрузка: 1обработано: 0

service-a-02

работает
зона: cluster-bнагрузка: 2обработано: 0

service-a-03

работает
зона: cluster-cнагрузка: 1обработано: 0
Готово

Готово к симуляции потока обнаружения.

Последнее решение: —

Ключевые компоненты

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

Смежная практика

Архитектура сервисной сетки (service mesh)

Во многих компаниях каталог сервисов дополняется прокси-маршрутизацией через сервисную сетку.

Открыть главу

Индустриальные подходы

Kubernetes Service и DNS

Где подходит: Команды, где основная среда выполнения уже Kubernetes, а маршрутизация трафика стандартизирована через Service и DNS.

Типовой стек: Service, EndpointSlice, CoreDNS, проверки готовности и активности, kube-proxy/IPVS.

Сильные стороны

  • Минимум отдельной инфраструктуры реестра: встроено в платформу выполнения.
  • Переезд экземпляров и автоматически отражаются в пуле адресов.

Риски и ограничения

  • Для сценариев с несколькими кластерами нужны дополнительные механизмы: MCS, федеративный DNS или .
  • Некорректные настройки клиента или могут замедлять .

Каталог Consul

Где подходит: Гибридные среды с VM и Kubernetes, несколько дата-центров и команды с явным платформы.

Типовой стек: Агенты Consul, каталог сервисов, проверки работоспособности, ACL, Consul Connect.

Сильные стороны

  • Единый для разных сред выполнения и сетевых сегментов.
  • Богатые метаданные и политики доступа для управляемого обнаружения сервисов.

Риски и ограничения

  • Требуется аккуратная эксплуатация контура управления: топология Raft/gossip, политика обновлений и резервное копирование.
  • Без строгой дисциплины проверок работоспособности в каталоге накапливаются .

Eureka и балансировка на стороне клиента

Где подходит: Java/Spring-экосистема и , где важна предсказуемая задержка.

Типовой стек: Eureka Server, Spring Cloud Netflix, балансировка на стороне клиента и политики устойчивости.

Сильные стороны

  • Выбор адреса на стороне клиента убирает лишний через центральный прокси.
  • Хорошо сочетается с политиками повторных попыток и в SDK клиента.

Риски и ограничения

  • Нужна стандартизация клиентских библиотек, иначе поведение обнаружения расходится между сервисами.
  • В разноязычном стеке сложнее поддерживать единый протокол и единую модель эксплуатации.

Облачное обнаружение и Envoy/xDS

Где подходит: Платформы в AWS/GCP, где важны управляемый контур управления и интеграция с облачными сервисами.

Типовой стек: AWS Cloud Map или Traffic Director + Envoy/xDS, иногда вместе с управляемой сервисной сеткой.

Сильные стороны

  • Меньше операционной нагрузки на собственные кластеры реестра сервисов.
  • Нативная интеграция с IAM, VPC и облачной экосистемой наблюдаемости.

Риски и ограничения

  • Риск на уровне API, сетевых политик и операционных процессов.
  • Важно тестировать региональные деградации и лимиты API контура управления.

Основа

DNS

DNS: базовый механизм разрешения имён для многих реализаций обнаружения сервисов.

Открыть главу

Компромиссы

Консистентность и доступность реестра

Слишком строгая консистентность может ухудшить доступность обнаружения сервисов при сетевых проблемах.

Время жизни записи и нагрузка на DNS

Короткое время жизни записи ускоряет обновление маршрутов, но повышает нагрузку на DNS и .

Центральное управление и автономия клиента

Централизованный контур управления удобен, но увеличивает при ошибках конфигурации.

Динамические адреса и устаревший кэш

Кэши ускоряют получение адреса, но могут держать устаревшие записи во время переключения на резерв.

Практический чек-лист

  • Есть автоматическое при падении или изоляции экземпляра.
  • Проверено поведение обнаружения сервисов при и сбоях контроллеров.
  • Настроены повторные попытки и тайм-ауты со и ограничением повторов.
  • Есть мониторинг устаревших адресов сервисов и задержки получения адреса.
  • Сервисные имена и стандартизированы на уровне платформы.

Источники

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки