我们希望在英国和美国镜像我们的网站,原因有二。这样...
- 对于位于美国和欧洲的用户来说,该网站的速度很快。
- 这样,如果任何一个服务器出现故障,用户仍然可以访问该网站。
至于服务器之间的数据共享,我们将使用 MySQL 镜像,并且可能使用 rsync 来保持文件镜像。
如果我们只需要做第 1 点,那么我们可以编写一些代码,根据用户的 IP 将其重定向到任一站点,但这样做会导致单点故障。
有没有一种合理且便宜的方法可以根据用户的位置告诉他们不同的 IP?也许我们可以对我们的 DNS 服务器做一些有趣的事情?
答案1
“高可用性”总是很有趣:-)
在“简单”方面,你可以指定多个 A 记录。它以(通常)循环方式工作,并且无法指定默认情况下要服务的服务器。这意味着您最终会让英国人由美国服务器提供服务,反之亦然。这不是您想要的(至少因为我们美国人会被 colour 等单词中出现的所有额外“u”弄糊涂);-)
更复杂的解决方案是使用 DNS 服务,该服务使用的功能类似于您在评论中建议的功能。有一种技术叫做全局服务负载均衡也可以,其作用类似。
在更昂贵和更复杂的方面,你可以使用BGP 多站点多宿主,在那里你买一个自治系统编号 (ASN),并从两个站点向同一网络通告 BGP 路由。这在理论上可确保每个人都能获得“最近”(基于网络可访问性)的站点。
当然,你也可以雇佣阿卡迈为您分发数据和应用程序。收费很高。
如果您有资金和专业知识,我建议您使用 BGP 多宿主解决方案。如果没有,您可能需要考虑 DNS 解决方案。
答案2
正如 Matt 所说,有些公司会提供 CDN。
一种更便宜的方法是使用 RRDNS,
www.example.com A (UK address)
www.example.com A (US address)
uk.www.example.com A (UK address)
uk.www.example.com A (UK address)
uk.www.example.com A (UK address)
...
uk.www.example.com A (US address)
us.www.example.com A (US address)
us.www.example.com A (US address)
us.www.example.com A (US address)
...
us.www.example.com A (UK address)
并且在两台服务器上,尝试放置一个 cookie(如果没有)来指示客户端位于哪个大陆(节省重复的昂贵查找)。
维护每台服务器中“其他”系统的状态。当您在 www.example.com 地址上建立连接时,重定向到客户可用的最本地系统(例如 uk.www.example.com)。
在本地化的虚拟主机(英国和美国)上,每当 GET 请求进入时,如果是针对非本地虚拟主机,则检查该位置的首选主机是否可用,并将客户重定向到那里。
您可能希望实现更好的故障转移检测(避免脑裂)并检测服务器之间的循环,更不用说其他调整了。
它并不完美并且很大程度上依赖于您编写自己的重定向/故障转移处理。
更实际的解决方案可能是实施自己的位置敏感的 DNS 服务器 或者,有少数但数量不断增长的 DNS 提供商可以提供这样的服务(再次使用具有大量重复本地 A 和少量远程 A 记录的 RRDNS)。
C。