【问题标题】:What is the point of Varnish and Rack-Cache for a Rails app?Rails 应用程序的 Varnish 和 Rack-Cache 有什么意义?
【发布时间】:2012-10-07 06:49:52
【问题描述】:

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

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

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

什么原因导致默认的 Rails 应用使用 rack-cache?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 caching varnish rack-cache


    【解决方案1】:

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

    这是一篇关于 heroku detailing the use of rack::cache in Rails3 的文章。在应用内进行页面/片段缓存以及使用 memcached 作为后端(这非常重要)方面也有一些很好的 railscast。 varnish 等可以以this tutorial on varnish's site开头。

    【讨论】:

    • 您所描述的内容听起来像是服务器端缓存。 Rails 本身不是内置了对服务器端缓存的支持吗?
    • 我在深夜写了那个答案,并没有说得很清楚。我会更新它。 Rails3 有来自 ActiveSupport::Cache 的缓存支持,所以我不确定 rack::cache 是否冗余。我也会详细介绍清漆的使用,请稍等。
    • 我纠正了一些错误信息(对此感到抱歉)。 Rack::cache 和 ActiveSupport::cache 都是 rails 的一部分。我不确定有什么区别。
    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2012-01-17
    • 2012-06-05
    • 2018-09-01
    相关资源
    最近更新 更多