为动态网站使用CDN

时间:2016-06-29 05:35:55

标签: performance caching cdn

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

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

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

任何人都可以评论我的推理中存在哪些缺陷,和/或我没有考虑到什么?同样很高兴知道我可以为像我这样的网站做出哪些替代性能优化。提前谢谢。

2 个答案:

答案 0 :(得分:2)

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

只要您使用CDN仅提供静态资产,就不会出现设置问题。

此外,您可能希望查看支持HTTP / 2的CDN。这将为您提供更好的性能。查看cdncomparison.com以了解热门CDN提供商之间的比较。

答案 1 :(得分:1)

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

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

如果您每秒大约有一次新上传,则表示每秒可能会有更多被动访问者。如果您可以让CDN处理大约99%的请求,那么实际点击量会降低到服务器的戏剧性。如果您熟悉缓存的内容以及缓存时间长短,并且根据您的匿名用户和经过身份验证的用户的特定组合,您可以轻松地将服务器负载减少一两个级别。另一方面,您可以相应地加快访问者的页面加载时间。

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

  • 对于HTML文档,用户是否已登录?如果不是,并且没有其他特定的cookie跟踪或类似的事情发生,那么资产是静态的,并且可以公开用于所有意图和目的,并且可以被缓存。确定文档的最大年龄,然后让CDN缓存它。当你每秒达到1000次点击时,即使将其缓存一秒也会产生巨大的差异。

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

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