VPS 上 Varnish 与 Nginx 反向代理 那个更加出色?
- 0次
- 2021-05-26 14:24:02
- idczone
如题,希望大家分享下自国外服务器己的实际案例。
Thanks!
Varnish
见:/t/141198
sorry 忘加了空格 /t/141198
有测试过其他的诸如traffic server,squid(2和3)之类么?
有测过 squid 3
如果我没记错的话,squid 不能完全支持这种慢速的 backend(在第一个请求完成前来第二个请求会再次访问 backend)。nginx 直到最近才有个参数可以号称支持,但是非常 buggy。
大内存 Varnish
小内存 Nginx
当然如果可以的话上 SSD 性能更佳
sorry, 我把 varnish 和 squid 说反了。
squid 是我最后使用的针对大文件的反代。就是因为 nginx 和 varnish 在这种场合下都有难处理的 behavior(要么是请求会被block很久,要么是 Range 请求返回 200 而不是 206)。
varnish 可以处理range的,但确实对大文件处理上不如squid
是可以,但是就像我说的在文件很大仍在 streaming 的时候 range 请求被 block 直到整个文件传下来,要么也可以配置成再访问一次后端,但仍然很慢(没有利用第一次得到的数据)
可以用我上面那个脚本测试一下,当时不同 server 的 behavior 我现在也记不太清楚了。半年前的事情了。。。
这个还要看命中率的问题,就缓存处理效果来说
varnish可配置的参数非常多,纯内存处理非常快,用来做rest接口的反代非常好用,但是如果命中率太低热点数据不集中,会出现内存被挤满但是处理很慢的情况,因为内存满之后会反复清理掉数据,去后端重新获取数据。不适合做大数据缓存,比如图片请求处理的缓存,此外就是没有持久缓存磁盘的策略,重启服务之后需要做数据预热处理,才能上线使用,不然后端容易被请求堆满,有雪崩效应的风险。做纯反代
squid内存处理比varnish弱一些,但是优势在于本地存储策略可以配置的空间很大,用来做长时间不会变动的请求比较方便,比如静态html页面,图片。但是对于带参数请求的处理没有varnish的策略好,清理缓存的策略不太方便,用超时触发向后端确认请求是否失效的策略,需要设置时间的长度很微妙,需要根据实际情况去调整。重启服务只需要读取本地数据就能完成大部分数据的预热是优势。
nginx很轻量,基本功能就是反代,需要使用其它功能需安装扩展插件,缓存策略很弱,更新需要手动清理缓存,否则只能等超时重新缓存。
如果只有vps,建议nginx处理足矣,在请求量小内存也不是特别大的时候,nginx完全够用,varnish对内存需求太大,只做纯反代不缓存略显浪费。