Есть альтернативный подход: мы забираем логику у клиента и отдаем её балансировщику нагрузки. Клиент просто делает запрос на один стабильный адрес, а всё остальное происходит под капотом.
- Новый инстанс микросервиса поднимается и регистрирует свой IP в Service Registry.
- Service Registry регулярно проверяет здоровье инстансов (Health Checks).
- Балансировщик нагрузки (например, Nginx или HAProxy) синхронизируется с Registry и всегда имеет актуальный список адресов.
- Клиент отправляет запрос в балансировщик. Тот сам выбирает живой инстанс и проксирует трафик.
- Плюсы: Клиент остается простым и тонким. Централизованное управление трафиком.
- Минусы: Балансировщик становится узким местом и требует высокой доступности.
Как это автоматизируется в проде?
Сегодня никто не прописывает конфиги руками. Индустрия использует следующие подходы:
Интеграция с оркестраторами (Kubernetes)
В K8s Service Discovery работает из коробки. Компонент и сущность CoreDNS автоматически отслеживают IP-адреса живых подов. Твоему приложению достаточно обратиться по имени сервиса (например, Service), и Kubernetes сам отбалансирует трафик. Тебе вообще не нужно поднимать внешний Service Registry.http://payment-service
Современные прокси (Traefik / Envoy)
Эти балансировщики умеют нативно интегрироваться с Docker, Kubernetes и Consul. Они сами слушают события о появлении новых контейнеров и перестраивают свои правила маршрутизации на лету, без перезагрузки.
Динамические конфигурации (Consul Template)
Если ты используешь классический Nginx, утилита Consul Template будет следить за изменениями в реестре, автоматически переписывать файл и мягко перезагружать (reload) балансировщик.nginx.conf