我一直在赶上Scaling Rails截屏视频。在包含高级HTTP缓存(使用反向代理缓存(如Varnish和Squid等))的episode 11中,他们建议只有在已经耗尽了Rails应用程序中页面,操作和片段缓存的可能性时才考虑使用反向代理缓存以及memcached等,但这与这个问题无关)。Rails的页面缓存与HTTP反向代理缓存
我不明白的是,如何使用HTTP反向代理缓存可以为已经使用页面缓存的应用程序提供性能提升。为了简化问题,让我们假设我在这里讨论单个主机。
这是我的两种技术是如何工作的理解(也许我是错的):
页面缓存Rails的过程最初击中,然后产生直接由服务的静态HTML文件用于后续请求的Web服务器,只要该请求的缓存有效即可。如果缓存已经过期,则Rails会再次被点击,并且为更新的内容重新生成静态文件,以便为下一个请求做好准备
使用HTTP反向代理缓存时,Rails进程会在代理需要确定内容陈旧或不陈旧。这是通过使用各种HTTP标头完成的,如
ETag
,Last-Modified
等。如果内容是新鲜的,Rails将响应代理服务器的HTTP 304 Not Modified,并且代理服务器将其缓存的内容提供给浏览器,或者甚至更好地用它自己的响应HTTP 304.如果内容是陈旧的,然后Rails的提供更新的内容到缓存它的代理,然后将其用于浏览器
如果我的理解是正确的,那么不会在更短的命中页面缓存结果到Rails进程?确定内容是否过时并不是所有情况,这意味着比反向代理缓存更好的性能。为什么你可以同时使用这两种技术?
谢谢。如果你不介意在答案中扩大一点,我会很乐意听到你喜欢它的原因。 – 2010-01-29 16:29:19
另一件值得一提的事情是,页面缓存是每个应用程序主机,并且如果您使用反向代理,则可以合并该代理。 – jonnii 2010-01-29 16:42:22
好点,我编辑了这个问题来反映这一点。 – 2010-01-29 16:45:57