如何将 HTTP 流量分配到最近的服务器?

如何将 HTTP 流量分配到最近的服务器?

这是一个由两部分组成的问题。我在多伦多有一个 DigitalOcean Droplet,上面有一个灯组(当然还有一个网站)。我想创建该 Droplet 的快照,并在旧金山和阿姆斯特丹部署一个克隆。

  1. 如何根据位置以最小的延迟完成到服务器的路由?

  2. 如何实时克隆这些网站。例如,如果我编辑网站,更改会反映在所有服务器上吗?

谢谢

答案1

您可以使用AWS Route 53 基于延迟的路由。我非常有信心您可以将 R53 与非 AWS 源一起使用。

另外,CloudFlare 有一个流量管理器它可以进行“地理导航”。它可能仍处于测试阶段,我不知道它是免费版还是付费版。

更新 我刚刚注意到你的第二个问题。我假设你的目标主要是页面加载时间,其次是服务可用性。我进一步假设该网站是 Wordpress,因为使用现成的软件比使用定制软件更难实现我下面建议的操作。

如果您希望两个站点同时同步提供流量,则必须考虑某种多主数据库复制。这并不那么简单,但有一些技术可以做到这一点。Digital Ocean 有一个教程在这里。RSync 或 BitTorrent sync 将处理文件复制。

如果您的唯一目标是快速响应时间,那么您可能也应该使用带有 CDN 的单个服务器来确保您的静态资源在本地提供服务 - CloudFlare 非常适合此目的。您对页面的一次请求的延迟可能不是那么大,大约多 100 毫秒,其他资源将从最近的节点提供服务。

如果您的唯一目标是在发生故障时实现冗余,您可能仍会考虑将数据库设置为主/只读副本类型的方案。将所有流量路由到一台服务器,数据库和文件实时复制到第二站点。如果主站点发生故障,您将故障转移到第二站点。如果发生这种情况,您需要弄清楚当主站点恢复在线时该做什么,如何让一切恢复同步。在这种情况下,多主服务器可能仍然是最简单的,可以保持同步。

不幸的是,您要做的事情并不完全是微不足道的,并且根据您的使用情况,可能会变得中等到极其复杂。我们确实需要了解您的目标,以便提供更好的解决方案。

答案2

蒂姆对您的第一个问题给出了很好的解决方案。

第二个,(不幸的是)不是,这属于“缓存失效”问题。有几种解决方案:

  • 使用一台服务器并使用 CDN 服务(Cloudflare/CloudFront)来缓存内容。您可以设置 TTL 来处理缓存失效(即“最终一致性”模型),或者,
  • 使用一台服务器并使用CDN服务,并在更新内容后发送清除请求。
  • 保留三台服务器,然后您将需要开发 API 来自己进行清除。

相关内容