CDN 架构 - 最佳实践和设计

CDN 架构 - 最佳实践和设计

我是一个网站开发人员,该网站严重依赖图片、视频等静态内容。我们当前的设置非常简单,基本上有一台服务器充当我们的 CDN,然后通过 rsync 由 Web 服务器进行更新。这种设置的简单性有几个缺点,主要是我们还必须在 Web 服务器之间 rsync 任何更改。

我们现在正在寻找一种不那么脱节的架构。一个想法是使用可以安装在每个 Web 服务器上的 NAS,这意味着我们不必依赖 rsync,但会引入单点故障。

有人了解成功的、相当大容量(大约每月 10tb)的 cdn 设置和架构吗?

答案1

首先,你没有使用“内容分发网络“(CDN),您只有一个专用于提供静态内容的 Web 服务器。如果您使用 CDN 作为搜索词进行搜索,那么您会得到错误的答案,因为这是错误的词。

你可以考虑使用真正的 CDN,它将你的静态数据缓存在全球许多地方更贴近并更快地为您的最终用户提供服务。由于 CDN 将数据缓存在更靠近最终用户的位置,因此网络延迟较低,从而加快了下载速度。它还提供了可扩展性优势,几乎完全卸载了您自己的服务器提供的静态内容。MaxCDN 和 Amazon CloudFront 是常见的低成本选择。

如果你的需求较小,您也可以只使用几个网络服务器来提供静态内容。这很简单。在这种情况下,您的问题似乎是关于部署即把静态文件发送到网络服务器。有很多方法可以做到这一点,这取决于你使用的软件以及你的内部工作流程,也许你应该提出另一个问题,提供更精确的信息。

答案2

如果是静态内容,为什么不使用大型缓存反向代理,无论您使用 Apache 代理还是 nginx,甚至是轻量且快速的 lighttpd。

另一个想法是使用 DRBD,即网络上的 RAID 1。2 台服务器将互相镜像磁盘。它们必须是主/主模式,但由于它主要是只读的,因此您可能不需要运行集群软件。否则,您可以使用 ocfs2(Oracle 磁盘集群)。至少这样,任何服务器死亡都会镜像到另一台服务器的磁盘上。

我认为 rsync 很好,只是您需要使其可扩展。例如。创建一个后端 dns 结构,其 CNAMES 为“clusterhost-1、clusterhost-2 等”指向您的内容/网络主机,主内容服务器执行 DNS AXFR 传输以获取域列表(grepping 出不是 clusterhost 的内容)并浏览它们所有并 rsync 它们。如果您有新服务器,请为其添加新的 CNAME,它将在下一轮自动 rsync。如果您想使一个服务器脱机而不使用,请删除该主机的 CNAME,它将不会被更新。反向代理也是如此,您可以通过创建多个 CNAME 并将它们添加到代理列表并更改记录以指向您想要的任何后端来控制负载。

希望这能给您一些想法。

相关内容