System Design Space

    Глава 122

    Обновлено: 15 февраля 2026 г. в 22:10

    Service Discovery

    Прогресс части0/17

    Паттерны обнаружения сервисов в микросервисной архитектуре: registry, DNS-based discovery, health checking, load balancing и failure handling.

    Контекст

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

    Коммуникация между сервисами становится хрупкой без корректного discovery и routing слоя.

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

    Service discovery решает базовую задачу распределенной среды: как сервисы находят друг друга в условиях динамических инстансов, failover и масштабирования. Надежный discovery-контур снижает time-to-recovery и уменьшает каскадные инциденты.

    Модели discovery

    Client-side discovery

    Клиент сам получает список инстансов из registry и выбирает endpoint через local load balancing.

    Server-side discovery

    Клиент обращается к стабильной точке входа (LB/proxy), а маршрутизация к сервисам скрыта внутри инфраструктуры.

    DNS-based discovery

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

    Client-side discovery

    SDK делает lookup в registry, хранит локальный пул инстансов и маршрутизирует запросы на стороне клиента.

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

    • Максимальный контроль маршрутизации и retry-логики на стороне клиента.
    • Быстрая реакция на локальные метрики latency и error-rate.
    • Независимость от центрального proxy в data path.

    Ограничения

    • Нужно поддерживать discovery SDK во всех сервисах и языках.
    • Сложнее обеспечить единообразные правила на всей платформе.
    Подходит для: Нагруженные внутренние сервисы с единым SDK и зрелой платформой observability.
    Pipeline: registration -> health -> lookup -> routing
    registry v42

    Request Queue

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

    Discovery plane

    Клиент сам выполняет lookup и локально выбирает endpoint по policy.

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

    service-a-01

    healthy
    zone: cluster-aload: 1served: 0

    service-a-02

    healthy
    zone: cluster-bload: 2served: 0

    service-a-03

    healthy
    zone: cluster-cload: 1served: 0
    Готово

    Готово к симуляции discovery-потока.

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

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

    • Service registry: хранит актуальные endpoint-ы и метаданные инстансов.
    • Health checks: readiness/liveness сигнализируют, можно ли направлять трафик на инстанс.
    • Heartbeat/session TTL: автоматическое удаление неактивных нод из discovery-контура.
    • Load balancing policy: round-robin, least-loaded, locality-aware routing.
    • Retry/timeout policy: защита от кратковременных сбоев и сетевых колебаний.

    Foundation

    DNS

    DNS - базовый building block для многих service discovery реализаций.

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

    Trade-offs

    Consistency vs availability registry

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

    TTL freshness vs DNS/query overhead

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

    Centralized control vs local autonomy

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

    Dynamic endpoints vs cache staleness

    Кеши ускоряют lookups, но могут держать устаревшие адреса во время failover.

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

    • Реализована автоматическая deregistration логика при падении/изолировании ноды.
    • Проверено поведение discovery в partition-сценариях и при контроллерных сбоях.
    • Настроены retries/timeouts с jitter и ограничением повторов.
    • Есть мониторинг stale endpoints и latency lookup в discovery path.
    • Сервисные имена и ownership стандартизированы на уровне платформы.

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

    References