我正在研究ZooKeeper、Consul和Eureka等共识型工具,它们似乎都在推销相同的解决方案:
- 服务发现
- 动态、集中的配置管理
- 同步原语
- 共识算法
然而,我对这些东西了解得越多,就越难以理解服务发现与动态的集中式配置管理(KV 对)系统有何不同。
我对服务发现的理解(到目前为止)是它允许节点动态搜索、查找和连接到远程服务。因此,如果一个应用程序使用一个AuthService
进行身份验证、授权,它会使用服务发现来找到一个AuthService
节点,比如说,http://auth103.example.org:9103
并使用它。
我对动态配置系统的理解是,它们为节点提供了一个集中的基础设施,可以动态地从配置服务器接收更新以及向配置服务器发布更新。因此,如果应用程序实例决定需要更新其所有其他实例的配置,它将联系配置服务并更新,例如,numPurgerThreads
配置。然后,配置服务将更新所有其他应用程序实例,以便它们正确更新各自的配置。
但这些不都是同一个问题吗?
在这两种情况下,您:
- 连接到某种查找服务
- 查询数据;或者
- 向其发布数据,然后将其波及到其他节点
服务发现是动态配置的吧?!?!
我真正想要的是:我不能只用这些工具之一实现一个配置服务,巧合的是,它也解决了服务发现问题?或者是否有理由让我需要一个用于配置/KV 管理的 Consul 集群,以及另一个用于服务发现的 Consul 集群?