Varnish和Rack-Cache对于Rails应用程序有什么意义?

7

我对于Varnish和Rack-Cache在Rails应用中的目的有些困惑。在config/environments/production.rb文件中,可以像下面这样设置缓存:

config.static_cache_control = "public, max-age=3600"

既然如此,在Rails应用程序本身中设置缓存,那Varnish和Rack-Cache的目的究竟是什么呢?

而且,是什么导致默认的Rails应用使用rack-cache呢?

1个回答

7
Static Cache Control会影响Cache-Control的HTTP头文件。也就是说,服务器建议中间缓存max-age = 3600。
Varnish、Rack-Cache、Squid等服务器上都主动缓存生成的内容。数据库调用非常昂贵,即使请求不会调用数据库,请求需要经过的基础架构越少,通常速度就会越快。
Rack :: Cache是支持HTTP标准兼容缓存的Rack中间件。他们的FAQ页面有一些关于它与其他缓存解决方案的优缺点的好信息。这里有一个在Heroku上比较rack::cache和varnish的问题。Rails还有ActiveSupport :: Cache来处理片段和页面缓存。我不确定两者之间的区别,但两者都默认包含在Rails中。我之前说rack::cache不是默认值,但我错了。
Varnish、Squid和其他类似的工具存在于Rails堆栈之外,作为一个独立的进程在Web服务器(例如Apache/Nginx等)前面。它们高度可配置、应用程序无关,并具有一些高级功能(例如Squid的ACL)。Varnish和其他工具的好处在于将请求需要通过的基础设施最小化。如果请求是新鲜的,则会命中Varnish并立即返回给客户端。这对于高流量网站可能会产生最大的效益,但对于较小的应用程序可能过于复杂。
这里有一篇关于Heroku的文章详细介绍了如何在Rails3中使用rack::cache。还有一些很好的railscasts,介绍如何在应用程序中进行页面/片段缓存以及如何使用Memcached作为后端(这非常重要)。对于Varnish和其他工具,您可以从Varnish网站上的此教程开始学习。

1
你所描述的听起来像是服务器端缓存。Rails本身难道没有内置的服务器端缓存支持吗? - user782220
我在深夜写了那个答案,没有表达得很清楚。我会更新它。Rails3从ActiveSupport::Cache中具有缓存支持,所以我不确定rack::cache是否与此重复。我也会详细介绍varnish的使用,给我一点时间。 - GorrillaMcD
我纠正了一些错误信息(对此感到抱歉)。Rack::cache和ActiveSupport::cache都是Rails的一部分。但我不确定它们之间的区别是什么。 - GorrillaMcD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接