【问题标题】:Employing a CDN for a dynamic website为动态网站使用 CDN
【发布时间】:2016-06-29 20:20:21
【问题描述】:

我有一个网站论坛,用户可以在该论坛的主页上相互交换照片和文字。主页显示 20 个最新对象 - 无论是照片还是文字。第 21 个对象被推出视野之外。每 5 秒上传一张新照片。每秒发布一个新的文本字符串。大约 20 秒后,出现在顶部的照片在底部消失了。

我的问题是:如果我在混合中引入 CDN,我会获得性能提升吗?

由于内容在变化,看来我不应该这样做。但是,当我从逻辑上考虑它时,似乎我会通过为我的照片引入 CDN 来提高性能。就是这样。想象一张照片被张贴,在 t=1 时出现在页面上并一直保留到 t=20。第一个访问页面的人(接近 t=1)将使照片被拉到边缘服务器。此后,任何访问该照片的人都将从 CDN 接收它;这将持续到 t=20,之后照片消失。这是名副其实的性能提升。

谁能评论我的推理有什么缺陷,和/或我没有考虑什么?也很高兴知道我可以为像我这样的网站进行哪些替代性能优化。提前致谢。

【问题讨论】:

    标签: performance caching cdn


    【解决方案1】:

    你说得对。只要有人在图像可见的 20 秒内访问该照片,它就会被拉到边缘服务器。然后在后续请求中,其他访问者将收到来自最近边缘服务器的缓存响应。

    只要您使用 CDN 仅交付静态资产,您的设置就应该没有问题。

    此外,您可能希望了解支持 HTTP/2 的 CDN。这将为您提供改进的性能。查看 cdncomparison.com 了解流行 CDN 提供商之间的比较。

    【讨论】:

      【解决方案2】:

      您需要考虑所有请求访问您的服务器,其中包括主要动态生成的 HTML 文档,还包括所有静态资源,如 CSS 文件、Javascript 文件,是的,图像文件(静态和用户上传的内容)。 HTML 文档将引用其他几个资产,每个资产都需要单独下载,因此会导致服务器命中。假设每个访问者都有一个空的本地缓存,那么单个页面加载可能会为您的服务器带来大约 50 次资源命中。

      如果是特定于用户(因为他们已经登录),那么需要 由您的服务器处理的唯一请求可能是动态生成的 HTML 文档。 所有其他 49 个资源请求对于所有访问者都是相同的,并且可以轻松地被分流到 CDN。 这些只会 [每个区域] 访问您的服务器一次,然后由 CDN 缓存,很少打扰您的再次服务器。您甚至可以让 CDN 缓存 public HTML 文档,例如对于未登录的用户,您可以让 CDN 缓存 HTML 文档约 5 秒,具体取决于您希望网站显示的最新程度;因此 CDN 可以处理整个浏览会话,而根本不会访问您的服务器。

      如果您每秒大约有一个新的上传,这意味着每秒可能会有更多的被动访问者。如果您可以让 CDN 处理约 99% 的请求,那戏剧性地减少了对您的服务器的实际点击量。如果您对缓存的内容和缓存时间以及取决于您的匿名用户和经过身份验证的用户的特定组合很聪明,那么您可以轻松地将服务器负载减少一两个数量级。另一方面,您正在相应地加快访问者的页面加载时间。

      对于每一个 HTML 文档和其他资产,认真考虑是否可以缓存以及缓存多长时间:

      • 对于 HTML 文档,用户是否已登录?如果不是,并且没有其他特定的 cookie 跟踪或类似的事情发生,那么资产是静态的,对于所有意图和目的都是公开的,并且可以被缓存。确定文档的最长期限并让 CDN 缓存它。当您每秒获得 1000 次点击时,即使只缓存一秒钟也会产生巨大的影响。

      • 如果用户 已登录,请将缓存杂注设置为private,但仍让访问者的浏览器缓存几秒钟。这些标题必须由您的论坛软件在生成文档时决定。

      • 对于所有其他不受访问限制的资产:让 CDN 将其缓存 很长 时间,您几乎可以忘记再次提供这些特定文件。可以为 Web 服务器中的整个目录静态配置这些标头。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        • 1970-01-01
        • 2011-07-06
        • 1970-01-01
        • 2023-03-07
        • 2018-01-30
        • 1970-01-01
        相关资源
        最近更新 更多