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

Обновлено: 24 июня 2026 г. в 19:41

Обнаружение сервисов

средний

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

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

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

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

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

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

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

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

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

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

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

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

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

Контекст

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

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

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

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

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

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

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

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

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

Обнаружение через систему доменных имён (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, каталог сервисов, проверки работоспособности, списки управления доступом, 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) и .

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

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

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

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

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

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

Источники

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

  • DNS - Базовая механика разрешения имени, на которой строится часть стратегий обнаружения сервисов.
  • Архитектура сервисной сетки (service mesh) - Сервисная сетка добавляет маршрутизацию по политикам поверх обнаружения сервисов.
  • Паттерны межсервисной коммуникации - Как именно сервис зовёт соседа, решают вместе с тем, как он его находит — иначе паттерны коммуникации и обнаружения сервисов начнут противоречить друг другу.
  • Kubernetes Fundamentals - Практика обнаружения сервисов через платформу Kubernetes: Service, адреса экземпляров и систему доменных имён (DNS).
  • Паттерны отказоустойчивости - Обнаружение сервисов должно работать вместе с повторными попытками, автоматическим размыкателем и проверками состояния.

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