Rack :: Cache性能不佳

时间:2012-04-01 18:45:47

标签: ruby-on-rails ruby heroku rack-cache

我将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个请求/秒(并且仍然最大化下游)。

1 个答案:

答案 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的静态资产。如果我的计算机可以处理更高的并发性,我怀疑它会更高。我的互联网连接是高延迟,因为它在蜂窝网络上。