服务定位器 - 为什么不使用 DNS?
Service locator - why not use DNS?
有很多应用程序可以在分布式环境 AKA SOA 中充当服务定位器的角色。例如 Zookeeper 和 Consul。为什么不改用 DNS?
- 标准、知名、稳定
- 分布式、容错
- 可以将多个 IP 分配给同一个名称以在同构集群中实现负载平衡
- 可以提供额外的元数据
那么……为什么不呢?
当然可以使用 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 缓存会导致较长时间的系统不稳定,因此删除故障节点可能需要一些时间。
有很多应用程序可以在分布式环境 AKA SOA 中充当服务定位器的角色。例如 Zookeeper 和 Consul。为什么不改用 DNS?
- 标准、知名、稳定
- 分布式、容错
- 可以将多个 IP 分配给同一个名称以在同构集群中实现负载平衡
- 可以提供额外的元数据
那么……为什么不呢?
当然可以使用 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 缓存会导致较长时间的系统不稳定,因此删除故障节点可能需要一些时间。