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
ログを見ると、すべてのリクエストがキャッシュ ヒット (「フレッシュ」) です。しかし、パフォーマンスは悪く、1 秒あたり 6 リクエスト程度しかありません。Rack::Cache が専用の http プロキシほどうまく機能しないことはわかっていますが、これよりも高いスループットを期待していたことは確かです。
更新 前にこれについて考えたことはありませんでしたが、私のベンチマークは確かに私のインターネット接続を最大限に活用しています. jpg の代わりに robots.txt を使用して同じテストを行うと、1 秒あたり 20 のリクエストが得られます (それでもダウンストリームは最大になります)。