在公共云中发现服务器的最佳方法?

在公共云中发现服务器的最佳方法?

我想制作一个 ubuntu 服务器映像,在公共云中运行,以便发现同一映像中的其他服务器上线的时间。我想出了这个解决方案列表,但我不确定哪个是最好的?

可能的解决方案:

  • 使用链路层发现协议 (LLDP) 的第 2 层组播,与 CDP 非常相似
  • 为自己分配一个链路本地地址然后发送广播
  • Avahi(Linux 上的零配置实现,与 Apple 的 Bonjour 非常相似)
  • 使用 DHCP 服务器跟踪服务器

更多可能的解决方案:(服务器必须已经有 IP 地址)

  • SNMP 广播/多播
  • SSDP 多播消息(简单服务发现协议)(用于 UPnP)
  • 我不确定,但也许是 m(多播)DNS 或 DNS-SD(服务发现)

还有其他方法可以发现节点吗?大型云集群中通常怎么做?

答案1

公共云提供商通常不支持广播/多播方法,因此任何依赖这些方法的解决方案都不是“最佳”的。至少对于包含平台独立性重要组成部分的“最佳”值而言。

在单播领域,您有很多选择,其中很大一部分取决于您想用这些图像做什么以及哪个服务实际上正在进行发现。

如果你完全使用单一云基础设施提供商,那么常见的方式是询问基础设施那里有什么。您将获得一个带有 IP 地址的服务器列表,然后可以使用它来构建动态集群。

如果您出于某种原因无法做到这一点,可能是您使用多个提供商,或者您需要已知活动主机的列表,那么您将不得不采用某种特定于应用程序的方法来构建动态集群。实现此目的的方法多种多样,但我见过以下几种:

  • 为节点提供一些提示,让它们在联机时进行检查,应用程序会维护一个签入列表,并进行心跳以确保列表中只有活动节点。可以将其想象成 bit-torrent 种子。
  • 服务注册与实际的服务注册服务,其中您已经列出了一些。
  • 服务注册使用自建的注册服务,比如用Redis拼凑起来的东西。

最适合您的方法取决于您要做什么。但请先进行 API 查找,只有当这些方法对您不起作用时才使用花哨的方法。

答案2

据我所知,正确的做法是使用云提供商提供的 API。尝试从主机执行此操作有点“不切实际”。请使用您付费购买的优质太空时代基础设施。

相关内容