Heroku雪松堆栈中机架缓存与清漆的缺点?

Joh*_*hir 21 heroku varnish rack-cache

之前的2个Heroku应用程序堆栈带有一个Varnish层,它根据http头自动反向代理缓存内容.

新的Heroku雪松堆没有这个Varnish层.Heroku建议使用rack-cachememcache.

与以前使用清漆层的堆叠相比,这是否有缺点?使用机架缓存,服务缓存层的服务器是否更少,并且以不太优化的方式?

Joh*_*y C 17

毫无疑问,从Heroku的竹子到雪松堆栈,去除清漆层是缓存性能(延迟和吞吐量)的巨大降级.例如,您的应用程序请求与dyno时间的缓存命中竞争,并且可能排在后面.

缺点,仅举几个例子,是:解释的ruby(与编译的C)应用程序级别(与代理级别)基于memcached(基于进程内存)基于阻塞I/O(与非阻塞I/O相比) .任何关于这两种缓存策略都可以大规模竞争的建议都是荒谬的.你不会在小范围内看到太大的差异.但是如果你每秒有数百甚至数千个缓存命中率,那么清漆基本上不会降级,而雪松堆栈则需要许多dynos才能以高效的方式提供静态资产.(我看到雪松上的缓存命中时间为5-10ms dyno处理时间).

Cedar的构建方式不是为了提高性能,而是为您的应用程序引入新的灵活性.虽然它允许你进行非阻塞I/O操作,如长轮询和对静态资产缓存参数的细粒度控制,但很明显,如果你的目标是互联网规模,heroku希望你带来自己的缓存/带宽.


Tom*_*Tom 9

我不知道机架缓存性能与原始请求相比如何与Varnish相比.最好的办法是创建一个简单的应用程序基准测试并切换堆栈.

值得注意的是,因为heroku.com堆栈是Nginx-> Varnish-> App,只要你设置了正确的HTTP标头,你的App层将会做更少的工作.由于大多数交付将由Varnish处理,以及Varnish非常快,这将释放您的Dyno以实际应用程序处理请求.

随着herokuapp.com堆栈更早地点击您的应用程序,这取决于您和您的应用程序有效处理缓存,这可能意味着您选择使用rack-cache来缓存整页输出,或者您可以选择使用memcached来处理数据库请求或两者.

最后,它取决于你的应用程序在做什么,如果它为很多用户提供相同的静态内容,那么你将受益于Varnish,但如果你有一个用户登录并与内容交互的应用程序,那么你赢了看不到可能从Varnish中受益,因此缓存部分内容或原始数据库查询可能会更有效.如果您安装New Relic插件,您将能够看到引擎盖下的内容,看看哪些因素会降低您的应用速度.