如果我理解正确的话,对于静态文件我有两个选项:
- 使用 CDN 并将我所有的静态文件放在上面。
- 使用单独的域名仅存储静态文件,以便用户可以同时下载。
所以我认为要么选择一个,要么我需要一个单独的域名,然后使用 CDN 从该域名获取文件?因为我认为即使我有 CDN,我仍然需要在我的主站点或静态内容站点(如 static.domain.com)的某个地方保留静态内容的本地副本?
答案1
根据您设置 CDN 的方式,您可能需要一个单独的域来存储静态文件作为 CDN 缓存的来源。是否使用 CDN 取决于您的应用程序的性能要求,而不是网络架构。
如果您要提供大量内容,需要购买大量额外带宽,或者您对响应时间有严格要求,并希望将文件放置在靠近最终用户的位置,那么投资 CDN 可能是明智的选择。本质上,CDN 只是您自己的文件前面的缓存层,就像 Varnish 一样,但在地理上是分散的。
您看到最常见的安排是设置一个域 (origin.example.com) 来提供您的静态文件。但是,当您获取文件时,您指向的不是源,而是您设置的指向 CDN 的域 (static.example.com)。CDN 会自动将文件的缓存版本保存在一定数量的层中,并减少您的服务器(称为“源服务器”)上的负载。许多 CDN 仅使用单层缓存,称为边缘层,但有些还包括第二个层,称为中间层。在这种情况下,您可能有 n 个遍布全球的边缘服务器,它们查询区域主服务器(称为中间服务器)。然后,这些服务器将根据源进行刷新,以进一步减少源服务器获得的命中次数。
答案2
您不需要 CDN 或单独的域来有效地提供静态文件。缓存(反向)代理将非常有效。只需确保您已相应地设置了标头。我建议查看 Varnish 和 Nginx。
如果您关心扩展和性能,我还推荐 John Allspaw 和 Theo Schlossnagle 的著作。