Механизм обнаружения сервисов микросервисов — это метод динамического поиска экземпляров сервисов для связи в архитектуре микросервисов.
В основном он полагается на центр регистрации для реализации регистрации услуг, запросов и поддержки балансировки нагрузки, тем самым улучшая масштабируемость и гибкость системы.
1. Основные понятия
Обнаружение сервисов относится к процессу автоматического обнаружения и идентификации доступных сервисов в распределенной системе.
В архитектуре микросервисов, поскольку сервисы разделены на несколько небольших и автономных сервисов, разбросанных по разным серверам, для обеспечения эффективного взаимодействия между сервисами требуется механизм обнаружения сервисов.
2. Основные шаги
Регистрация услуги:
При запуске экземпляра микросервиса он регистрирует информацию о своем сетевом расположении (например, IP-адрес и номер порта) и идентификатор службы в центре регистрации служб.
Этот процесс регистрации обычно происходит автоматически и не требует вмешательства человека.
Центр регистрации отвечает за хранение регистрационной информации всех экземпляров службы и поддержку динамической регистрации и отмены регистрации экземпляров службы.
Запрос на обслуживание:
Когда микросервису необходимо вызвать другой микросервис, он запрашивает в реестре сервиса доступный в данный момент сетевой адрес требуемого сервиса.
Центр регистрации возвращает список адресов экземпляров службы, и вызывающая сторона может выбрать экземпляр службы для связи в соответствии с политикой балансировки нагрузки.
3. Ключевые компоненты
Реестр услуг:
Это основной компонент механизма обнаружения служб, который отвечает за управление и хранение регистрационной информации всех экземпляров службы.
Он предоставляет интерфейсы API для экземпляров службы для регистрации и отмены операций, а также поддерживает потребителей служб для запроса регистрационной информации экземпляров службы.
Поставщик услуг:
Это экземпляр микросервиса, предоставляющий конкретную услугу.
Он зарегистрирует свою собственную информацию о службе в реестре служб при запуске и отменит регистрацию своей собственной информации о службе при выходе.
Потребитель услуг:
Это экземпляр микросервиса, которому необходимо вызывать другие сервисы.
Он получает сетевой адрес требуемой службы путем запроса реестра служб и устанавливает с ним связь.
4. Как реализовать механизм обнаружения сервисов
Механизм обнаружения сервисов можно разделить на два типа: обнаружение клиента и обнаружение сервера в зависимости от метода реализации:
режим обнаружения клиента:
Клиент отвечает за обращение к центру регистрации, получение списка доступных сервисов и непосредственное взаимодействие с экземплярами сервисов в соответствии с политикой балансировки нагрузки.
Преимущество заключается в том, что клиент может гибко формулировать стратегии балансировки нагрузки, снижая зависимость от центра регистрации услуг.
Недостаток заключается в том, что клиенту необходимо реализовать сложную логику обнаружения, что увеличивает сложность кода и затраты на обслуживание.
Режим обнаружения сервера:
Клиент отправляет запрос на сервер (обычно шлюз API или прокси-сервер службы), а сервер отвечает за запрос в центр регистрации и пересылку запроса на реальный экземпляр службы.
Преимущество состоит в том, что это упрощает реализацию клиента, снижает сложность кода и затраты на обслуживание.
Недостатком является то, что это увеличивает задержку системы и количество точек сбоя, поскольку все запросы необходимо пересылать через сервер.
5. Преимущества механизма обнаружения сервисов
Уменьшите связанность между сервисами:
Микросервисам не обязательно знать сетевой адрес друг друга напрямую, им достаточно взаимодействовать только через центр регистрации сервисов.
Улучшение масштабируемости и гибкости системы:
Поскольку услуги динамически изменяются (например, расширение, сокращение, миграция и т. д.), центр регистрации служб может обновлять информацию об экземплярах служб в режиме реального времени, чтобы гарантировать, что связь между службами не будет затронута.
Поддерживает балансировку нагрузки и аварийное переключение:
Клиент может получить список адресов нескольких экземпляров службы из центра регистрации службы и выбрать один из них для связи на основе политики балансировки нагрузки. Когда экземпляр службы недоступен, реестр службы может автоматически пометить его как неработоспособный и не отправлять к нему запросы.
6. Общие инструменты обнаружения сервисов
Эврика:
Инструмент обнаружения сервисов, разработанный Netflix, использующий режим обнаружения клиентов. Он очень легкий, простой в интеграции и использовании.
Консул:
Инструмент центра обнаружения и настройки сервисов, разработанный HashiCorp. Он обеспечивает относительно полное решение, включая проверку работоспособности службы и другие функции, а также поддерживает протоколы HTTP и DNS.
Работник зоопарка:
Apache ZooKeeper — это служба распределенной координации с открытым исходным кодом, которую также можно использовать для обнаружения служб. Он предоставляет распределенные блокировки, службы именования и другие функции, а также поддерживает множество клиентских библиотек.
В микросервисной архитектуре механизм обнаружения сервисов реализует функции динамической регистрации и запроса экземпляров сервисов через центр регистрации, уменьшая связанность между сервисами и улучшая масштабируемость и гибкость системы.