Существует тенденция к разрыву глобального состояния традиционных «статических» средств управления конфигурацией, таких как Chef/Puppet/Ansible, и вместо этого хранения конфигураций в каком-то централизованном/распределенном инструменте, из которых появляются основные игроки :Как настроить конфигурационные средства, такие как Консоль «push» config для клиентов?
- Zookeeper (Apache)
- консул (Hashicorp)
- Эврика (Netflix)
Каждый из этих инструментов работает по-разному, но принцип тот же:
- Храните Env вары и другие динамические конфигурации (то есть материал, который подлежит изменению) в этих инструментов, как пар ключ/значение
- Подключайтесь к этим инструментам/услугам через клиентов при запуске и вытаскивайте свои пары KV конфигурации. Обычно это требует, чтобы клиент предоставил имя службы («
MY_APP
») и среду («DEV
», «PROD
» и т. Д.).
Существует excellent Consul Java client, который объясняет все это красиво и предоставляет примеры кода.
Мои понимание этих инструментов является то, что они построены на вершине алгоритмов консенсуса, такие как Заб, Паксос и сплетни, которые позволяют обновлению конфигурации распространяться почти вирусно, с возможной последовательностью, на протяжении ваших узлов. Таким образом, есть идея, что если у вас есть приложение , в котором есть 20 узлов, скажем myapp01
до myapp20
, если вы сделаете изменение конфигурации для одного из них, это изменение будет естественно «распространяться» по всем 20 узлам в течение секунд/минут.
Моя проблема: как эти обновления фактически развертывать на каждом узле? Ни в одном из клиентских API (тот, с которым я связан выше, API ZooKeeper или API Eureka) я вижу какую-то функцию обратного вызова, которую можно настроить и использовать для уведомления клиента, когда централизованная служба (например, консул кластер) хочет нажимать и перезагружать обновления конфигурации.
Итак, я спрашиваю: как это должно работать (динамическое развертывание конфигурации и перезагрузка на клиентах)? Меня интересует любой жизнеспособный ответ для любого из этих 3 инструментов, хотя API Консула, кажется, самый передовой ИМХО.
Вы можете просто отправить запрос консулу, чтобы получить KV. – Suvitruf
Спасибо @Suvitruf (+1) - но вы уверены, что нет другого пути? [Консул использует Gossip] (https://www.consul.io/docs/internals/gossip.html), и вся суть Сплетни заключается в том, чтобы [распространяться ** эпидемически **] (https: //en.wikipedia. org/wiki/Gossip_protocol # Gossip_communication), вроде как «Server Push» в языке HTTP. Поэтому я ожидал, что API Консула позволит клиентам регистрировать обратные вызовы, которые могут быть уведомлены в режиме реального времени (** не ** через опрос), как только будут перенаправлены обновления. Идеи? – smeeb
Не знаю, действительно. Я использую консул только для сервисов, без КВ.И из приложений периодически отправляет запрос TTL для проверки работоспособности и отправляет запрос на получение услуги с параметром передачи? (И здесь я могу получить специальные параметры из массива тегов, например). – Suvitruf