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

Service locator - why not use DNS?

有很多应用程序可以在分布式环境 AKA SOA 中充当服务定位器的角色。例如 Zookeeper 和 Consul。为什么不改用 DNS?

那么……为什么不呢?

当然可以使用 DNS。很多时候你应该。但是,如果您的需求比 DNS 提供的更多,并且您需要在其之上构建自定义的东西,您可以检查现有的工具,如 ZooKeeper、Consul、etcd、Eureka 等。

如果您遇到他们可以解决的问题,您可能会决定使用它们。

例如,您可能想要检测您的服务何时出现故障或失去连接 - 并从您的服务列表中删除受影响的端点。所有提到的工具都提供开箱即用的功能。

Spotify 有一篇与此主题相关的精彩文章: https://labs.spotify.com/2013/02/25/in-praise-of-boring-technology

用于发现的 DNS 协议是一个不错的选择 - 这就是为什么 [SkyDNS](用于 etcd)1 and Consol 等工具支持它的原因。

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

感谢@igorbel 发表了有趣的文章,导致了更多关于该主题的有趣文章。

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

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