从Chef/Puppet/Ansible 等传统的“静态”配置管理工具中剥离全局状态,转而将配置存储在一些集中/分布式工具中,其中主要参与者似乎是:
- 动物园管理员(阿帕奇)
- 领事(Hashicorp)
- 尤里卡 (Netflix)
这些工具中的每一个都有不同的工作方式,但原理是相同的:
- 将您的环境变量和其他动态配置(即,可能会更改的内容)作为键/值对存储在这些工具中
- 在启动时通过客户端连接到这些工具/服务并下拉配置 KV 对。这通常需要客户端提供服务名称(“
MY_APP
”)和环境(“DEV
”、“PROD
”等)。
有一个出色的 Consul Java 客户端,它精美地解释了所有这些,并提供了充足的代码示例。
我对这些工具的理解是,它们建立在诸如 Zab、Paxos 和 Gossip 等共识算法之上,这些算法允许配置更新几乎像病毒一样传播,并最终保持一致性,遍及您的节点。所以这里的想法是,如果你有一个myapp
有 20 个节点的应用程序,比如说myapp01
通过myapp20
,如果你对其中一个节点进行配置更改,那么该更改将在几秒/分钟的时间内自然地“传播”到 20 个节点。
我的问题是:这些更新实际上是如何部署到每个节点的?在所有客户端 API(我在上面链接的那个,ZooKeeper API 或 Eureka API)中,我都没有看到某种可以设置并用于在集中式服务(例如 Consul)时通知客户端的回调功能集群)想要推送和重新加载配置更新。
所以我问:这应该如何工作(动态配置部署和客户端重新加载)?尽管 Consul 的 API 似乎是最先进的恕我直言,但我对这 3 个工具中的任何一个的任何可行答案都很感兴趣。