如何根据用户位置将用户重定向到其他服务器?


8

我有一个使用ASP.NET开发的网站,而我的数据库是MySQL。目前,它托管在USA Servers中。但是,当我尝试在印度附近访问它时,动态内容的加载速度太慢。这是可以接受的,因为请求必须转到世界的另一端。在美国,它的速度非常快。我已经将该站点与cloudflare CDN相关联。但是CDN对于静态内容很有用。我的每一页几乎都有动态内容。

所以我想扩展这个网站。因此,如果一个请求来自美国,我想处理来自美国服务器的请求,如果一个请求来自ASIA,我希望它处理一个来自ASIAN服务器的请求。但是请记住,无论将它们重定向到何处,两台服务器上的内容都应该相同。(两个服务器应该同步)

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

Google,Facebook,Yahoo如何做到这一点?他们如何在全球范围内服务?我认为他们在每个大洲都有数据中心。它们如何彼此同步?

Answers:


10

除了@ Gabriel-Talavera回答的内容外,我还要补充一些注意事项:

  • 网络路由以及地理负载平衡与不同服务器之间的“数据同步”完全无关。它们是使用许多非常不同的技术解决的两个问题。

由于您的问题的标题似乎集中在网络方面,因此我将集中在第一部分(网络路由问题)。

正如您自己所看到的那样,小型ICT公司很难满足要求。但是,“全球性”公司(例如您在OP中提到的公司)将毫无疑问地采用它。

附带说明一下,我第一次听说“ anycast”是由于有CloudFlare BLOG帖子,他们在(...还有很多其他方面)讨论了如何将anycast用作D-的对策。 DOS攻击。


3

如果您将BIND用作外部DNS服务器,则可以根据位置使用BIND视图给出选择性的DNS响应。新版Windows Server的技术预览版还具有称为DNS策略的功能,该功能看起来非常有前途。

为了根据客户端位置和其他条件(例如用户代理或日程表)提供内容,F5拥有一个称为Global Traffic Manager的设备,该设备与负载均衡器结合使用可实现您所期望的功能。在云环境中,Amazon的Route 53可以实现相同的目的。

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


但是如果客户端使用其他DNS服务器(例如Google DNS或OpenDNS),则此方法将无法可靠运行。
约瑟夫说,请

使用mysql复制可能会显示两次写入之间的显着滞后,以及可供读取的数据。应该考虑一些扩展复制的事情,例如riak或其他nosql数据库。
小鸡

0

在某些情况下,您希望拥有:

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

不幸的是,以上所有这些的组合在物理上是不可能的。您将受到光速的束缚。

相反,您需要考虑自己的确切要求。对于某些数据,有限的精度就足够了。考虑一下YouTube视频上的观景台。大多数人不在乎视图计数器是否暂时关闭。如果尚未包括世界另一端10秒钟前发生的视图,但包括最近5秒钟前发生的视图,则它仍然足够准确。如果您对收视计数器的完整性感到放心,则可能会冒两个不同的人都认为他们是该特定视频的第100位观众的风险。但是大多数人会认为这样做所造成的伤害可以忽略不计。

在其他情况下,数据完整性更为重要。考虑两个人同时尝试使用相同的用户名进行注册。告诉两个人他们都获得了用户名是不可接受的,因此在这种情况下,您将选择速度较慢且完整性更好的方法。告诉两个人都使用了用户名是可以接受的,因此一种可行的方法是尝试在每个副本上保留用户名,并且仅当您对50%以上的副本成功时才报告成功。这种方法不太可能使用户等待半秒钟才能得到答复。但是用户不会经常经历此过程,以免受到延迟的困扰。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.