服务定位器-为什么不使用DNS?

服务定位器-为什么不使用DNS?,dns,soa,microservices,Dns,Soa,Microservices,在分布式环境(也称为SOA)中,有许多应用程序可以扮演服务定位器的角色。例如,动物园管理员和领事。为什么不改用DNS呢 标准、知名、稳定 分布式、容错 可以将多个IP分配给同一名称,以便在同构群集中进行负载平衡 可以提供额外的元数据 所以。。。为什么不呢?当然可以使用DNS。很多时候你应该这样做。但是,如果您的需求大于DNS提供的,并且您需要在其上构建自定义的东西,那么您可以检查现有的工具,如ZooKeeper、Concur、etcd、Eureka和其他工具 如果你有他们能解决的问题,你可能

在分布式环境(也称为SOA)中,有许多应用程序可以扮演服务定位器的角色。例如,动物园管理员和领事。为什么不改用DNS呢

  • 标准、知名、稳定
  • 分布式、容错
  • 可以将多个IP分配给同一名称,以便在同构群集中进行负载平衡
  • 可以提供额外的元数据

所以。。。为什么不呢?

当然可以使用DNS。很多时候你应该这样做。但是,如果您的需求大于DNS提供的,并且您需要在其上构建自定义的东西,那么您可以检查现有的工具,如ZooKeeper、Concur、etcd、Eureka和其他工具

如果你有他们能解决的问题,你可能会决定使用他们

例如,您可能希望检测服务何时停机或失去连接,并从服务列表中删除受影响的端点。所有提到的工具都提供了这种开箱即用的功能

Spotify有一篇与此主题相关的精彩文章:

用于发现的DNS协议是一个很好的选择-这就是为什么像[SkyDNS](用于etcd)这样的工具支持它,并且正是为了这个目的


最好使用这些仅用于DNS的工具,因为它们提供了额外的功能,如领导人选举、健康检查等。

感谢@igorbel提供了有趣的文章,从而获得了更多关于该主题的有趣文章

至于答案,DNS不是一个好的解决方案,因为:

  • 复杂的集中式配置。这确实使添加新主机变得复杂
  • 大量且不可预测的传播时间。删除失败的节点可能需要一些时间,因为分层DNS缓存会导致较长时间的系统不稳定

我非常有效地将其用作“服务目录”。我和一位开发人员将裸机构建脚本绑定到我的隐藏主服务器上的一个非特权用户帐户,在那里我可以将他的自动构建文件包含到主DNS基础设施中。工作得很好。为了解决可用性问题,您最好在带有主动探测的服务前面安装一个类似于实际负载平衡器的东西。