Rails Rack:Cache 好像没啥用嘛

edokeh · 2012年04月17日 · 最后由 edokeh 回复于 2012年09月12日 · 4096 次阅读

前几天看 Rails 3.1 更新日志时候发现增加了 Rack:Cache,并且因此移除了原有的 page cache 我研究了一下,发现这个东西其实就是个 ruby 版 varnish 嘛,而且既然是 ruby 版的,那么性能上肯定是不如 varnish 了 对于大一点的网站,部署时前端放个 varnish 应该是家常便饭了,这时候就不需要它了 而小一点的网站,如果最前面放 nginx 之类的,这时候 Rack:Cache 的性能应该不如 nginx 处理 page cache 产生的静态文件吧?

总体感觉这玩意好像在实际中没啥用,不知道我的理解对不对?

我也是这样觉得,特别是 Rails 3.2,加了很多不是每个应用都需要的 middleware,你可以根据情况写个 inititalizer 去除掉

quote: http://quake.iteye.com/blog/1473073

其实对于我们的应用来说,很多都是不需要的,比如整页 Cache/ETag/X-Request-Id 等,我们的应用都是动态请求,所以都是强制无 Cache,我列了一下可以去除的和他们的用途:


Rack::Cache                 整页缓存
Rack::Runtime               记录X-Runtime(方便客户端查看执行时间)
ActionDispatch::RequestId       记录X-Request-Id(方便客户端查看请求具体在集群中的哪台执行)
ActionDispatch::RemoteIp        防止IP伪造(可以在web server上做)
ActionDispatch::Callbacks       设置callback
Rack::ConditionalGet            设置If-None-Match and If-Modified-Since
Rack::ETag              设置ETag
ActionDispatch::BestStandardsSupport    设置X-UA-Compatiblecd(可以在web server上做)


#1 楼 @quakewang 巧了,你那篇文章前几天刚看过,挺好的 不过一般来说 ConditionalGet 和 Etag 这两个中间件还是有必要的嘛

如果有 CDN 之类或反向代理之类的 Rack::Cache 还是有意义的

#3 楼 @huacnlee 不太理解,请问能详细讲讲嘛? 服务器架构领域不是特别清楚,按照以往我的理解,varnish 不就是一种反向代理?

#4 楼 @edokeh 这个细节我也不太了解。我只是隐约记得好像是有关系的。

#4 楼 @edokeh 和 varnish 不冲突的 app server 可以根据业务逻辑,判断是要生成新的页面 render 给反向代理还是只 render 一个状态码。

#6 楼 @hooopo 好神啊,四个月前的帖子居然还有人回 其实问题已经想明白了,确实不冲突,或者不叫 “冲突”,应该叫 “重复”,两者原理上是一样的,不过处于缓存的不同层级而已 就好像多个 varnish 前面可以再挂个 varnish 一样

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册