Caching 节点故障时的服务发现缓存更新

Caching 节点故障时的服务发现缓存更新,caching,dns,mesos,service-discovery,grpc,Caching,Dns,Mesos,Service Discovery,Grpc,我正在尝试为我的系统采用服务发现机制。我有一组节点,它们将通过gRpc相互通信。因为在一些框架中,如Mesos,一个新的节点在发生故障后会出现一个不同的ip地址和一个不同的端口,所以我考虑使用服务发现,这样每个节点都可以有一个与节点故障无关的集群配置 我目前的选择是使用DNS或像etcd或zookeeper这样的强一致性键值存储我的问题是理解健康节点中的名称映射缓存在节点上下移动时如何失效和更新。 我能想到的可能方法是: 当健康节点检测到连接问题时,它们将失效 他们的缓存条目立即关闭,并继续拉D

我正在尝试为我的系统采用服务发现机制。我有一组节点,它们将通过gRpc相互通信。因为在一些框架中,如Mesos,一个新的节点在发生故障后会出现一个不同的ip地址和一个不同的端口,所以我考虑使用服务发现,这样每个节点都可以有一个与节点故障无关的集群配置

我目前的选择是使用DNS或像etcd或zookeeper这样的强一致性键值存储我的问题是理解健康节点中的名称映射缓存在节点上下移动时如何失效和更新。

我能想到的可能方法是:

  • 当健康节点检测到连接问题时,它们将失效
    他们的缓存条目立即关闭,并继续拉DNS注册表 直到节点再次可连接
  • 当一个节点处于上下状态时,DNS注册表将事件广播到所有正常节点。似乎这可能需要来自DNS注册表的心跳
  • 每个节点中的缓存都有一个TTL字段,在TTL间隔内,每个节点都必须与节点故障共存,直到缓存项过期并再次从DNS注册表中提取
  • 我的问题是,哪种选择(你可以列举更多)是现实情况,为什么它比其他选择更好?

    你看了吗?如果您正在为Mesos寻找dns解决方案,这是最简单的方法。对于动态端口,如果您使用,您可以为您的每个应用程序使用固定端口,并解决此问题。它看起来可以满足您的要求。它在每个节点上都有代理,当节点关闭时,它和它运行的所有任务都被标记为不健康。它使用gossip协议来传播关于集群和raft中的变化的信息,作为一致性算法。它可以通过定期查询Mesos的状态来填充,或者如果使用Marathon,它可以利用事件,请参阅