我将 Rack::Cache 设置为堆栈中最顶层(最后一个)的中间件。我的应用程序托管在 heroku cedar 上,因此 Rack::Cache 也负责静态资产。
它由 heroku memcached 产品支持,配置如下:
config.action_dispatch.rack_cache = {
:metastore => Dalli::Client.new,
:entitystore => 'file:tmp/cache/rack/body',
:allow_reload => false
}
config.static_cache_control = "public, max-age=2592000"
它运行得很薄。
我正在使用 ab 测试图像文件的性能。
ab -n100 -c10 https://example.com/foo.jpg
查看我的日志,所有请求都是缓存命中(“新鲜”)。但是性能很差,只有大约 6 个请求/秒。我知道 Rack::Cache 不会像专用的 http 代理那样执行,但我当然期望比这更高的吞吐量。
更新 我不知道我以前怎么没想到这一点,但我的基准确实是最大化我的互联网连接。如果我使用 robots.txt 而不是 jpg 进行相同的测试,我会得到 20 个请求/秒(并且仍然在下游最大)。