Я ищу инструменты консенсусного типа, такие как ZooKeeper, Consul и Eureka, и все они, похоже, продают тот же набор решений:
- Обнаружение службы
- Динамическое централизованное управление конфигурацией
- Примитивы синхронизации
- Алгоритмы консенсуса
Однако чем больше я читаю об этих вещах, тем больше мне трудно понять, чем обнаружение служб действительно отличается от динамической централизованной системы управления конфигурацией (пара KV).
Мое понимание (пока) обнаружения служб заключается в том, что оно позволяет узлам динамически искать, находить удаленные службы и подключаться к ним. Таким образом, если приложение использует AuthService
для аутентификации, авторизации, оно будет использовать обнаружение служб, чтобы найти узел AuthService
в, скажем, http://auth103.example.org:9103
и использовать его.
Мое понимание систем динамической конфигурации состоит в том, что они предоставляют централизованную инфраструктуру для узлов, чтобы динамически получать обновления с серверов конфигурации, а также публиковать обновления на них. Поэтому, если экземпляр приложения решает, что ему необходимо обновить конфигурацию для всех других экземпляров, он свяжется со службой конфигурации и обновит, скажем, numPurgerThreads
config. Затем служба конфигурации обновит все другие экземпляры приложения, чтобы они правильно обновили свои соответствующие конфигурации.
Но разве это не одна и та же проблема?
В обоих случаях вы:
- Подключитесь к какой-либо службе поиска
- Запросить данные; или
- Публикуйте в нем данные, которые затем передаются другим узлам.
Обнаружение служб - это динамическая конфигурация, верно?!?!
На самом деле я стремлюсь к следующему: Не могу ли я просто реализовать одну службу конфигурации с одним из этих инструментов, который по совпадению также решает проблему обнаружения служб? Или есть причина, по которой мне нужно, скажем, 1 кластер Consul для управления конфигурацией / KV, а другой, скажем, кластер Consul для обнаружения служб?