ruby-on-rails - etags和服务器群

标签 ruby-on-rails performance caching scalability

我从著名的 Scaling Rails 截屏视频中了解到,当您的网站变得越来越大时,代理缓存就是最佳选择。代理缓存使用 etag 等,因为 etag 可以更具体,并且强大的验证器可能是可行的方法。但是,我也听说在服务器场场景中,etag 不是正确的解决方案,因为它可能会因服务器而异(如何?)

这似乎是矛盾的,即如果它们正在运行大型负载平衡服务器群,则很可能会实现基于电子标签的代理缓存。那么,如果电子标签在这种情况下失败了,他们该怎么办呢? :last_modified 并不是一个很好的选择。

在 Rails 应用程序中,假设我的帖子索引操作中的 etag 是

:etag => "all_posts_#{Post.count}".

如果是负载平衡服务器场,这会因服务器而异吗?

最佳答案

通常,当他们谈论不同服务器的 Etag 时,它与 Apache 提供的静态连接有关。默认Apache includes the file's inode in the Etag 。如果文件不在共享资源上(例如 NFS 导出的 NAS),则文件的 inode 在每台服务器上都会不同。通常,建议将 Apache 配置为:

FileETag MTime Size

但即使不同服务器的修改时间不同,也可能存在差异。

但是,对于非静态内容,您将在代码中生成 Etag,因此它在多个服务器上都是相同的。

关于ruby-on-rails - etags和服务器群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860243/

相关文章:

ruby-on-rails - Rails - 使用 :include to find objects based on their child's attributes

c++ - 寻找加速功能的方法

ruby-on-rails - 运行 compass watch 时参数数量错误

javascript - PhantomJS+Capybara+RSpec 获取默认的 PhantomJs 示例域

ruby-on-rails - Elasticsearch 查询未返回正确的数据

java - 在 Java 下创建进程变慢?

c# - 在托管代码中,我应该注意什么以保持良好的性能?

php - 在 php 中强制重新缓存 WSDL

c# - 用户持久性 : asp. 网络缓存:

javascript - 如何阻止chrome缓存