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

时间:2015-07-14 11:04:07

标签: dns soa microservices

有许多应用程序可以在分布式环境AKA SOA中扮演服务定位器的角色。例如,Zookeeper和Consul。为什么不使用DNS呢?

  • 标准,众所周知,稳定
  • 分布式,容错
  • 可以为同一群集中的负载平衡分配多个IP到相同的名称
  • 可以提供其他元数据

所以...为什么不呢?

3 个答案:

答案 0 :(得分:2)

当然可以使用DNS。很多时候你应该。但是,如果您的需求大于DNS提供的需求并且您需要在其上构建自定义内容,则可以检查已有的工具,如ZooKeeper,Consul,etcd,Eureka等。

如果您遇到问题,可以决定使用它们。

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

Spotify与本主题相关的一篇很好的文章: https://labs.spotify.com/2013/02/25/in-praise-of-boring-technology

答案 1 :(得分:1)

感谢@igorbel提供有趣的文章,引导更多有趣的文章。

至于答案,由于以下原因,DNS无法成为好的解决方案:

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

答案 2 :(得分:0)

发现的DNS协议是一个不错的选择 - 这就是为什么[SkyDNS](对于etcd)1Consol这样的工具正是为了这个目的而支持它。

最好使用这些只有DNS的工具,因为它们提供了诸如领导者选举,健康检查等其他功能。