Современный подход

Есть альтернативный подход: мы забираем логику у клиента и отдаем её балансировщику нагрузки. Клиент просто делает запрос на один стабильный адрес, а всё остальное происходит под капотом.

  1. Новый инстанс микросервиса поднимается и регистрирует свой IP в Service Registry.
  2. Service Registry регулярно проверяет здоровье инстансов (Health Checks).
  3. Балансировщик нагрузки (например, Nginx или HAProxy) синхронизируется с Registry и всегда имеет актуальный список адресов.
  4. Клиент отправляет запрос в балансировщик. Тот сам выбирает живой инстанс и проксирует трафик.
  • Плюсы: Клиент остается простым и тонким. Централизованное управление трафиком.
  • Минусы: Балансировщик становится узким местом и требует высокой доступности.
Как это автоматизируется в проде?

Сегодня никто не прописывает конфиги руками. Индустрия использует следующие подходы:

Интеграция с оркестраторами (Kubernetes)
В K8s Service Discovery работает из коробки. Компонент CoreDNS и сущность Service автоматически отслеживают IP-адреса живых подов. Твоему приложению достаточно обратиться по имени сервиса (например, http://payment-service), и Kubernetes сам отбалансирует трафик. Тебе вообще не нужно поднимать внешний Service Registry.

Современные прокси (Traefik / Envoy)
Эти балансировщики умеют нативно интегрироваться с Docker, Kubernetes и Consul. Они сами слушают события о появлении новых контейнеров и перестраивают свои правила маршрутизации на лету, без перезагрузки.

Динамические конфигурации (Consul Template)
Если ты используешь классический Nginx, утилита Consul Template будет следить за изменениями в реестре, автоматически переписывать файл nginx.conf и мягко перезагружать (reload) балансировщик.