7

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 个工具中的任何一个的任何可行答案都很感兴趣。

4

2 回答 2

0

您可以为此使用cfg4j。它是一个用于分布式服务的 Java 配置库。它支持 Consul 作为配置源之一。

于 2015-06-19T07:37:59.307 回答
0

这是一个很好的问题。我可以告诉 Consul HTTP 客户端是如何工作的。

我最初也认为它可以在推送机制中工作,但是当我最近在探索 Consul 时,我发现所有 Consul 客户端都会轮询服务器以获取他们想要查看的更改。虽然轮询机制有点不同,但 Consul 支持阻塞查询。这些是最大超时为 10 分钟的 HTTP 请求。此查询一直等待,直到监视的键/文件夹发生一些变化并返回最新的索引。如果索引更改,客户端会重新加载配置。欲了解更多信息:领事阻止查询

于 2019-06-03T02:23:08.420 回答