我将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个请求/秒(并且仍然最大化下游)。
答案 0 :(得分:2)
我注意到您帖子中的网址是HTTPS。我在基于主机名的SSL的雪松堆上遇到了问题,即使日志表示队列时间为0毫秒且服务时间为5-10毫秒,某些请求(对于静态资产和其他)也会遇到高延迟。这是Heroku的支持响应(他没有提到的是,清漆不会缓存来自雪松应用程序的资源,无论如何,尽管它在运行基于主机名的SSL时存在于堆栈中):
我们并不完全确定导致这种情况的原因,但我们怀疑是清漆 是责备。通常,使用Cedar堆栈时,不存在Varnish。 但是,当使用SSL主机名附加组件时,会将Varnish添加回 响应过程。没有必要同时使用Rack :: Cache和 清漆。
我想建议从图片中删除Varnish以查看它是否存在 帮助。这样做的方法是将SSL移动到我们新的SSL加载项SSL 端点。 SSL Endpoint在技术上仍然处于测试阶段,但它会是 通常可以很快使用,它的成本与SSL主机名相同。 这是Heroku上SSL的未来,它在各方面都更好。
http://devcenter.heroku.com/articles/ssl-endpoint-beta2
用户:beta 传递: * ***移动的缺点是你必须更新DNS,但一旦这样做 完成后,Varnish将不在画面中,我们将能够获得一个 更好地了解它是否是问题。
我们还考虑了您当前的SSL端点的可能性 亚马逊ELB,很糟糕,需要更换。但如果是那样的话 例如,许多请求会很慢或失败,而不仅仅是随机的 单一的慢请求。换掉目前的ELB也会涉及到 DNS更改。迁移到新的SSL端点附加组件将成为一个 这样的情况将来会更容易 - 如果换掉ELB的话 必要时不需要进行DNS更改。
目前,我认为转向SSL端点将是最好的。
当然,我看到的潜伏期有时会上升到30-60秒的范围,这显然比你看到的要差很多。当我在我的一些(HTTPS)雪松应用程序上对静态资产运行相同的apache bench命令时,我做得不太好(10-15 req / s)。当我将并发性提高到50或100时,RPS上升到30个。然而,在Varnish前面的竹子HTTPS应用程序中,我可以获得超过50 req / s的静态资产。如果我的计算机可以处理更高的并发性,我怀疑它会更高。我的互联网连接是高延迟,因为它在蜂窝网络上。