我遇到的问题如下:我有一个分布式应用程序(3 个地理分布节点),它根据请求返回大型数据集。为了减少网络流量,我需要将客户端请求定向到分布式应用程序的最近实例。我考虑了几种选择,但对于每种选择我都有问题,希望您能提出意见:
选项 1:使用 DNS 解析多个 IP 地址。例如: - 如果我从英国机器拨打电话,则拨打 server.copmany.com - DNS 将其解析为相关系统的英国 IP 地址。 - 如果我从美国机器拨打电话,则拨打 server.copmany.com - DNS 将其解析为相关系统的美国 IP 地址。
问题:可以为这样的事情配置 DNS 吗?
选项 2:使用负载均衡器,它可以将 IP 地址解析到最近的服务器。
问题:虽然我认为这是可能的,但我不能承受的是响应通过负载均衡器返回,而是直接返回到调用系统。
选项 3:您是否遇到过针对此类问题的其他解决方案?
谢谢,迈克
答案1
我会选择选项 1。
不知道您使用的是哪个 DNS 服务器,但可以使用支持 GeoIP 的 BIND 来实现,并为来自不同国家的不同用户提供多种视图。谷歌搜索“BIND GeoIP”会为您提供大量如何设置的教程。
否则,有第三方服务(关键词:“托管 DNS,地理位置”)提供此服务。
答案2
如果只是 HTTP,您可以为相应的站点提供 301,而不必执行可能更简单的地理 DNS。
有一件事可能不太好用,那就是任播,虽然它看起来不错,但它不能(在没有显著帮助的情况下)处理客户端在节点之间切换的情况。
答案3
通过 DNS
我确信 Bind 支持视图,因为我以前用过它们。其他服务器可能也支持。使用视图,您可以根据请求的 IP 地址提供任何您想要的区域信息 -http://www.zytrax.com/books/dns/ch7/view.html
使用循环 DNS 来解析三个 IPS 中的一个。不过,这不会关心请求来自哪里
我在谷歌上找到了这个(http://www.dnsmadeeasy.com/services/global-traffic-director/)——也许你会觉得很有趣