7

对于 Rails 应用程序的 Varnish 和 Rack-Cache 的用途,我有点困惑。在config/environments/production.rb缓存中可以设置类似的东西

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

鉴于此,如果您可以在 Rails 应用程序本身中设置缓存,那么 Varnish 和 Rack-Cache 的目的究竟是什么?

是什么导致默认的 Rails 应用程序使用 rack-cache?

4

1 回答 1

7

静态缓存控制会影响 Cache-Control 的 http 标头。如中,服务器建议中间缓存 max-age=3600。

Varnish、Rack-Cache、Squid 等主动缓存服务器上生成的内容。数据库调用很昂贵,即使请求不调用数据库,请求必须通过的基础设施越少,通常它会越快。

Rack::Cache 是机架中间件,支持符合 HTTP 标准的缓存。他们的常见问题页面有一些关于它相对于其他缓存解决方案的优缺点的很好的信息。这是一个将 rack::cache 与 heroku 上的清漆进行比较的问题。Rails 还有处理片段和页面缓存的 ActiveSupport::Cache。我不确定有什么区别,但默认情况下两者都包含在 Rails 中。我之前说过 rack::cache 不是默认的,但我错了。

Varnish、Squid 和其他作为单独的进程存在于 Web 服务器(例如 Apache/Nginx/等)前面的 Rails 堆栈之外。它们是高度可配置的、独立于应用程序的,并且具有一些高级特性(例如 Squid 的 ACL)。Varnish 和其他人的好处是最大限度地减少了请求必须经过的基础设施才能获得服务。如果它是新鲜的,请求命中 Varnish 并立即返回给客户端。这可能对高流量网站有最大的好处,但对于较小的应用程序来说可能有点过分了。

这是一篇关于 heroku 的文章,详细介绍了 Rails3 中 rack::cache 的使用。在应用内进行页面/片段缓存以及使用 memcached 作为后端(这非常重要)方面也有一些很好的 railscast。对于 varnish 和其他人,您可以从varnish 网站上的本教程开始。

于 2012-10-17T05:01:13.173 回答