TGViewer
dev notes dev notes @junsenior · 1.39K subscribers
Post #205 1.09K
Сегодня рассмотрим ещё один простой паттерн - шаблон обнаружения сервисов.

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

Решение: реестр сервисов - некая база данных, с которой сервисы либо работают напрямую, либо за обнаружение сервисов и запись отвечает инфраструктура развертывания.
Рассмотрим первый и наиболее простой способ реализации обнаружения - работу с реестром напрямую. Для вызова сервиса клиент сначала обращается к реестру, получает его экземпляры, и затем начинает с ними работать. Тут подключается второй шаблон - шаблон саморегистрации (microservices.io/patterns/self-registration.html) сервиса. Экземпляр сервиса обращается к API реестра, чтобы зарегистрировать своё сетевое местоположение. Он так же может предоставить URL для проверки работоспособности - конечную точку, которую реестр периодически запрашивает, чтобы убедиться, что сервис работает в нормальном режиме. Затем отрабатывает второй шаблон - "Обнаружение на клиентской стороне": клиент извлекает из реестра список доступных экземпляров сервиса и выбирает один из них с учетом балансирования нагрузки (https://microservices.io/patterns/client-side-discovery.html).

Второй способ - обнаружение на стороне развертывания. Docker и Kubernetes имеют встроенный механизм обнаружения и регистрации. Платформа выдаёт каждому сервису DNS-имя, адрес и привязанный домен. Клиент делает запрос к DNS, а платформа сама решает, к какому из доступных экземпляров его направить. Этот механизм более предпочтительный, т.к. нам не нужно искать или реализовывать реестр, и не нужно писать имплементацию работы с ним на стороне каждого сервиса.
В процессе такой маршрутизации участвуют два шаблона: "Сторонняя регистрация" - экземпляры сервиса автоматически регистрируются внешним компонентом (https://microservices.io/patterns/3rd-party-registration.html) и "Обнаружение на стороне сервера" - клиент делает запрос к маршрутизатору, который отвечает за обнаружение (https://microservices.io/patterns/server-side-discovery.html).
More from @junsenior
  1. Sep 28, 2026Сошлись две вещи. Первая - мой проект safemap.ai, про который я уже писал выше - интеракти…
  2. Sep 17, 2026Post #356
  3. Sep 15, 2026Увидел тут в x.com статистику вакансий по PHP и статистику вакансий по hh.ru в целом. Я на…
  4. Sep 12, 2026Вдохновившись проектом, где делали интерактивную карту с тем, как работает Postgres (писал…
  5. Sep 8, 2026OpenAI выложили блогпост https://openai.com/index/navier-stokes-solution/ Мы публикуем реш…
  6. Sep 8, 2026Если кто не знал, вокруг этого сейчас разгорается очень большой скандал с OpenAI. Кратко,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →