V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
boro
V2EX  ›  NGINX

VPS 上 Varnish 与 Nginx 反向代理 那个更加出色?

  •  
  •   boro · 2015-03-24 00:56:48 +08:00 · 4676 次点击
    这是一个创建于 3534 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,希望大家分享下自己的实际案例。
    Thanks!
    9 条回复    2015-03-24 10:35:14 +08:00
    sNullp
        1
    sNullp  
       2015-03-24 01:26:20 +08:00
    Varnish
    见:/t/141198
    sNullp
        2
    sNullp  
       2015-03-24 01:26:56 +08:00
    sorry 忘加了空格 /t/141198
    lsylsy2
        3
    lsylsy2  
       2015-03-24 01:30:53 +08:00 via Android
    @sNullp 有测试过其他的诸如traffic server,squid(2和3)之类么?
    sNullp
        4
    sNullp  
       2015-03-24 01:36:38 +08:00
    @lsylsy2 有测过 squid 3
    如果我没记错的话,squid 不能完全支持这种慢速的 backend(在第一个请求完成前来第二个请求会再次访问 backend)。nginx 直到最近才有个参数可以号称支持,但是非常 buggy。
    Showfom
        5
    Showfom  
       2015-03-24 01:39:36 +08:00
    大内存 Varnish
    小内存 Nginx

    当然如果可以的话上 SSD 性能更佳
    sNullp
        6
    sNullp  
       2015-03-24 01:43:49 +08:00
    @lsylsy2 sorry, 我把 varnish 和 squid 说反了。
    squid 是我最后使用的针对大文件的反代。就是因为 nginx 和 varnish 在这种场合下都有难处理的 behavior(要么是请求会被block很久,要么是 Range 请求返回 200 而不是 206)。
    iCodex
        7
    iCodex  
       2015-03-24 01:50:13 +08:00 via Android
    @sNullp varnish 可以处理range的,但确实对大文件处理上不如squid
    sNullp
        8
    sNullp  
       2015-03-24 02:25:07 +08:00
    @iCodex 是可以,但是就像我说的在文件很大仍在 streaming 的时候 range 请求被 block 直到整个文件传下来,要么也可以配置成再访问一次后端,但仍然很慢(没有利用第一次得到的数据)
    可以用我上面那个脚本测试一下,当时不同 server 的 behavior 我现在也记不太清楚了。半年前的事情了。。。
    lecher
        9
    lecher  
       2015-03-24 10:35:14 +08:00 via iPad   ❤️ 3
    这个还要看命中率的问题,就缓存处理效果来说
    varnish可配置的参数非常多,纯内存处理非常快,用来做rest接口的反代非常好用,但是如果命中率太低热点数据不集中,会出现内存被挤满但是处理很慢的情况,因为内存满之后会反复清理掉数据,去后端重新获取数据。不适合做大数据缓存,比如图片请求处理的缓存,此外就是没有持久缓存磁盘的策略,重启服务之后需要做数据预热处理,才能上线使用,不然后端容易被请求堆满,有雪崩效应的风险。做纯反代
    squid内存处理比varnish弱一些,但是优势在于本地存储策略可以配置的空间很大,用来做长时间不会变动的请求比较方便,比如静态html页面,图片。但是对于带参数请求的处理没有varnish的策略好,清理缓存的策略不太方便,用超时触发向后端确认请求是否失效的策略,需要设置时间的长度很微妙,需要根据实际情况去调整。重启服务只需要读取本地数据就能完成大部分数据的预热是优势。
    nginx很轻量,基本功能就是反代,需要使用其它功能需安装扩展插件,缓存策略很弱,更新需要手动清理缓存,否则只能等超时重新缓存。
    如果只有vps,建议nginx处理足矣,在请求量小内存也不是特别大的时候,nginx完全够用,varnish对内存需求太大,只做纯反代不缓存略显浪费。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1237 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 23:45 · PVG 07:45 · LAX 15:45 · JFK 18:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.