1

我正在研究ZooKeeperConsulEureka等共识型工具,它们似乎都在推销相同的解决方案:

  • 服务发现
  • 动态、集中的配置管理
  • 同步原语
  • 共识算法

然而,我对这些东西了解得越多,就越难以理解服务发现与动态的集中式配置管理(KV 对)系统有何不同。

我对服务发现的理解(到目前为止)是它允许节点动态搜索、查找和连接到远程服务。因此,如果一个应用程序使用一个AuthService进行身份验证、授权,它会使用服务发现来找到一个AuthService节点,比如说,http://auth103.example.org:9103并使用它。

动态配置系统的理解是,它们为节点提供了一个集中的基础设施,可以动态地从配置服务器接收更新以及向配置服务器发布更新。因此,如果应用程序实例决定需要更新其所有其他实例的配置,它将联系配置服务并更新,例如,numPurgerThreads配置。然后,配置服务将更新所有其他应用程序实例,以便它们正确更新各自的配置。

但这些不都是同一个问题吗?

在这两种情况下,您:

  1. 连接到某种查找服务
  2. 查询数据;或者
  3. 向其发布数据,然后将其波及到其他节点

服务发现动态配置的吧?!?!

我真正想要的是:我不能只用这些工具之一实现一个配置服务,巧合的是,它也解决了服务发现问题?或者是否有理由让我需要一个用于配置/KV 管理的 Consul 集群,以及另一个用于服务发现的 Consul 集群?

4

2 回答 2

1

好吧,如果你这样看,这些都只是数据库的风格,或者如果你愿意的话,数据存储,正如你所描述的那样:

Connect to a lookup service of some sort
Query it for data; or
Publish data to it, which then ripples out to other nodes

您提到的所有用例都需要多个客户端连接到的某种数据存储。对于不同的用例,它们中的一些比其他的更优化的原因是它们的接口、数据模型、一致性保证等。

具体来说,在服务发现的情况下,一个不错的功能可能是故障检测 - 例如,ak/v 存储允许在服务不再连接时删除服务数据。这样,您可以将服务注册到您的服务发现工具,并知道当服务出现故障或失去连接时,它将不再存在于存储的数据中。

于 2015-06-23T09:29:47.967 回答
0

只是为了澄清一些术语,(imo)动态配置系统可以在运行时更新它们的状态,这与预先定义所有内容(即配置文件)的静态相反。集中式 CM意味着有一个地方可以存储所有配置数据。所以集中式 CM 既可以是静态的也可以是动态的,对吧?

IMO,服务发现有一个CM没有的组件,这是一个自动检测服务的协议

猜想您需要一个动态 CM(KV 存储)来实现服务发现,但您不能仅使用服务发现(协议)来实现 CM 存储。以DHCP为例(希望我们同意它是一个服务发现协议?) - 动态主机配置协议,所以它有一个配置方面,但也有一个协议,它不仅仅是一个简单的 KV 存储。顺便说一句,它是分散的,只是为了说明 CM 不必集中的前一点。

所以服务发现有一个配置方面,但 CM 没有(必然)有一个服务发现。这是否意味着 SD 是 CM 的子集?我会说不。

于 2015-07-23T08:14:03.383 回答