如果我的网站有 3 台服务器,我该如何将用户从地理位置引导到正确的位置?
主服务器位于澳大利亚,但内容同步到美国服务器。作为英国人,我到美国服务器的 ping 时间不到 100 毫秒,但澳大利亚是 300-600 毫秒。
我可以通过哪些选项将流量引导至正确的服务器?
- 宽IP?
- 在他们访问的第一个服务器上检测并查找 IP,然后重定向到另一个域?
Googe 是如何做到的?
答案1
我认为最好的方法是使用以下方法重新编译 BINDGeoDNS补丁
然后你就可以通过视图来控制客户端
查看“北美”{
match-clients { country_US; country_CA; country_MX; };
zone "example555.com" {type master;file "pri/example555-north-america";};
答案2
Google 使用一种称为“任播”的技术来实现这一点。它们使用分配给世界各地的多台机器的相同 IP。长话短说,根据 BGP 系统,使用最便宜且通常最短的路径。
通常,多宿主时会导出到同一个 IP 的多条路径……多个 ISP 接入您的网络,因此有多种方式可以到达那里。您选择最便宜/最快的路径。使用任播,一切都以相同的方式发生,但不同的路径会通向物理上相距遥远的不同机器,而不仅仅是通向同一台机器的多种路径。对于最终用户来说,这并不重要,因为他们从其中任何一个获得的内容都是相同的。
由于此技巧需要拥有 BGP ID 和至少一个 /24 块的地址,而您无法将其用于其他任何用途,因此您可能不会使用他们的解决方案。您可以通过 Akamai Technologies 和其他几家公司将静态内容外包出去。我不知道是否有任何提供商会以这种方式处理动态内容。
您也可以使用 MaxMind 的 GeoIP 等服务。这可能是最具成本效益的,但您必须进行一些前期编码,以便根据对 IP 数据的检查重定向用户。请注意,他们确实提供了一个免费数据库,对于国家/地区级别的方向,这可能已经足够了。Disserman 的 BIND 补丁想法也可能很好用,使用 DNS 回复来引导人们而不是重定向。这可能会让一些技术含量很高的用户感到困惑,或者在调试奇怪的问题时,不同的主机认为相同的名称指向不同的地方。
答案3
后一种方法是可行的,并且实际上被很多服务器所采用,但您也可以考虑全局负载平衡,因为这将解决这个问题并且有助于业务连续性。
答案4
如果网站由三台服务器提供相同的服务,请使其透明并且不要重定向。在不同的域名上拥有相同的内容是没有意义的。
此外,如果其中一台服务器出现故障,那么采用这种技术可以让您进行故障转移。