两个服务如何在没有静态地址的情况下相互发现?

时间:2014-01-24 08:20:04

标签: soa service-discovery autodiscovery

假设我有两个需要共享和/或交换数据的服务。两个实例彼此分开,并且他们不知道其他部分的位置。

现在,为了让他们能够共享和/或交换数据,他们需要相互连接。

他们如何在不需要明确配置IP地址的情况下找到对方?换句话说:他们怎么能自动发现对方?

基本上,我有两个想法:

  • 拉:您需要在他们注册的地方提供中央服务。然后,您可以向服务请求服务的地址,然后该服务将返回这些数据。虽然这有效,但它的缺点是它只会将问题转移到下一个级别:如果我有多个服务实例,并且我不希望他们提前相互了解怎么办?

  • 推送:每个服务都广播自己的地址,以便其他服务让它知道。每项服务都会不时重复这一过程。缺点:这在互联网上几乎无效。

我知道如何以智能方式解决这个问题吗?

PS:如果你想这么说,我正在寻找一种处理动态IP的方法,而不需要中央DNS服务器。

2 个答案:

答案 0 :(得分:1)

broadcast packets are not forwarded everywhere on a network, but only to devices within a broadcast domain.

如果您的设备位于不同的广播域,那么广播将无法正常工作。

您可能必须实施自己的中央服务,除非您可以使用其中一个免费的动态DNS服务器,例如:Free

答案 1 :(得分:1)

通常的方法是让一些容错服务器注册服务,然后查找其他服务 - Curator framework实现zookeeper以上的服务。

如果您想要自动发现,那么您应该实现某种gossip协议,以便服务器以可靠的方式知道哪些服务器在那里。您应该记住,正确使用八卦协议是棘手的(例如,由于实施中存在问题,以前的一些亚马逊云故障)