我对Rails应用程序的Varnish和Rack-Cache的用途感到有点困惑。在config/environments/production.rb中,可以使用下面的命令来设置缓存
config.static_cache_control = "public, max-age=3600"
鉴于此,如果您可以在Rails应用程序本身中设置缓存,那么Varnish和Rack-Cache的用途究竟是什么?
是什么原因导致默认的Rails应用程序使用机架缓存?
发布于 2012-10-17 13:01:13
静态缓存控制会影响缓存控制的http标头。与在中一样,服务器向中间缓存建议max-age=3600。
Varnish、Rack-Cache、Squid和其他公司在服务器上主动缓存生成的内容。数据库调用是昂贵的,而且,即使请求没有调用数据库,请求必须通过的基础设施越少,通常它就会越快。
Rack::Cache是支持符合HTTP标准的缓存的机架中间件。他们的FAQ page有一些关于它相对于其他缓存解决方案的利弊的很好的信息。这是一个question comparing rack::cache to varnish on heroku。Rails还具有ActiveSupport::Cache,用于处理片段和页面缓存。我不确定它们有什么不同,但默认情况下Rails中都包含了这两个特性。我之前说过rack::cache不是默认的,但我错了。
Varnish、Squid等作为独立的进程存在于etc服务器前面的Rails堆栈之外(例如Apache/Nginx/等)。它们具有高度可配置性、独立于应用程序,并具有一些高级功能(如Squid的ACL)。Varnish和其他工具的好处是最大限度地减少了请求获得服务所需的基础设施。如果它是新的,请求将命中Varnish并立即返回给客户端。这可能对高流量的网站有最大的好处,但对较小的应用程序来说可能有些过分了。
这里有一篇关于heroku detailing the use of rack::cache in Rails3的文章。还有一些关于在应用程序中进行页面/片段缓存以及使用memcached作为后端(这非常重要)的优秀广播。对于清漆和其他,您可以从this tutorial on varnish's site开始。
https://stackoverflow.com/questions/12927095
复制相似问题