如何根据用户的位置将用户redirect到不同的服务器?

我有一个使用ASP.NET开发的网站,MY DB是MySQL。 目前它在美国服务器托pipe。 但是,当我尝试访问印度附近的dynamic内容加载太慢。 这是可以接受的,因为要求必须去世界的另一边。 在美国它真的很快。 我已经连接这个网站与cloudflare CDN。 但CDN对静态内容很有用。 我的每一个网页几乎都有dynamic内容。

所以我想扩大这个网站。 所以,如果来自美国的请求,我想处理来自美国服务器的请求,如果来自亚洲的请求,我希望从ASIAN服务器处理。 但请记住,无论他们被redirect的内容应该在两台服务器上是相同的。 (两台服务器应该同步)

那么如何实现这个架构呢?

谷歌,Facebook,雅虎如何做到这一点? 他们如何为世界各地服务? 我认为他们在每个大陆都有数据中心。 他们如何同步?

除了@ Gabriel-Talavera所回答的问题外,我还会添加一些注释:

  • networking路由以及地理负载平衡与不同服务器之间的“数据同步”完全无关。 这是用大量不同技术解决的两个问题。

由于您的问题的标题似乎集中在networking方面,所以我将重点讨论第一部分(networking路由问题)。

  • 从严格的networkingangular度来看,通过“选播地址 ”可以实现多个地点/数据中心的负载分配。 有关Anycast的一个有用的讨论可以在其他SFpost中find:
    • 什么是“任播”,它有什么用处?
    • 使用任播IP需要什么?

正如你们自己看到的那样,小型ICT公司很难满足这些要求。 但是,“全球”公司(就像你在OP中提到的那些公司),采用它就没有问题。

作为一个便笺,我第一次听说“任播”是感谢CloudFlare的博客 ,他们在其中讨论了(还有很多其他的东西),还可以采用任何播客作为D- DOS攻击。

如果您使用BIND作为您的外部DNS服务器,您可以根据BIND视图的位置提供select性的DNS响应 。 Windows Server新版本的技术预览版也具有称为DNS策略的function,看起来非常有前景。

要根据客户端位置和其他条件(如用户代理或日程表)提供内容,F5有一个名为“全局stream量pipe理器”的设备,与其负载均衡器一起使用可以实现您正在查找的内容。 在云环境中,亚马逊的Route 53可以完成同样的任务。

为了保持数据同步,你必须有一个存储后端能够同步复制,或使用MySQL提供的复制,这将保持复制数据的一致性。

有些情况下你想要:

  • 可序列化事务的数据完整性保证。
  • 数据可以由全球用户更新。
  • 数据可以用低延迟更新。

不幸的是,上述所有的组合在物理上是不可能的。 你会受到光速的限制。

相反,你需要考虑你的确切要求。 对于一些数据来说,有限的准确性就足够了。 考虑YouTubevideo上的查看计数器。 大多数人不关心,如果查看计数器暂时有点closures。 如果还没有包括世界另一边10秒前发生的观点,但包括5秒前发生的观点被包括在内,那还是足够准确的。 如果你是放心的观点柜台的完整性,你冒着两个不同的人可能都认为他们是该特定的video100号观众的风险。 但是大多数人会认为这样做所造成的伤害微不足道。

在其他情况下,数据完整性更重要。 考虑两个人同时尝试使用相同的用户名注册。 告诉两个人,他们得到的用户名是不可接受的,所以在这种情况下,你会select一个更好的完整性更慢的方法。 告诉两个人用户名已被接受是可以接受的,所以一种可能的方法是尝试在每个副本上保留用户名,并且如果你成功复制了超过50%的副本,则只报告成功。 这种方法不太可能让用户等待半秒钟以获得答复。 但用户不会经常经历这个过程,以至于被这个延迟所困扰。

在其他情况下,您可能需要良好的完整性和快速更新,但只有一个人可以更新这个特定的数据。 在这种情况下,您可以将权威的数据副本放在您认为接近该用户的服务器上,并让其他服务器拥有大多数最新的caching版本。