我从著名的 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/