V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
sajesemuy
V2EX  ›  分享创造

高性能 Web 缓存服务器 nuster 1.7.9.4 发布

  •  
  •   sajesemuy ·
    jiangwenyuan · 2018-02-05 08:35:33 +08:00 · 3701 次点击
    这是一个创建于 2265 天前的主题,其中的信息可能已经有所发展或是发生改变。

    nuster 1.7.9.4 已发布,本次更新主要修复了一个 url 中?位置不一样而 key 一样的 bug。

    nuster 是一个基于 HAProxy 的高性能缓存服务器。nuster 完全兼容 HAProxy,并且利用 HAProxy 的 ACL 功能来提供非常细致的缓存规则。特性包括

    • 完全兼容 HAProxy,支持所有 HAProxy 的特性和功能

    • 强大的动态缓存功能

      • 根据 HTTP method, uri, path, query, header, cookie 等等进行缓存
      • 根据 HTTP 请求和响应内容等等进行缓存
      • 根据环境变量服务器状态等等进行缓存
      • 根据 SSL 版本, SNI 等等进行缓存
      • 根据连接数量,请求速率等等进行缓存
      • 等等
    • 非常快

    • 删除缓存

    • 前后端 HTTPS

    • HTTP 压缩

    • HTTP 重写重定向

    性能:

    非常快, 单进程模式下是 nginx 的 3 倍,多进程下 nginx 的 2 倍,varnish 的 3 倍。详见性能比较

    本次更新

    • 增加

      • 新增了 uri 和 delimiter 关键字
    • 更新

      • query 长度未初始化
      • 不同请求可能产生一样的 key 的 bug
    第 1 条附言  ·  2018-02-05 10:11:14 +08:00
    19 条回复    2018-02-05 19:53:17 +08:00
    est
        1
    est  
       2018-02-05 09:07:00 +08:00 via Android
    nginx 没开启 proxy 的 http/1.1。。。性能很低。。。。
    shuizhengqi
        2
    shuizhengqi  
       2018-02-05 09:44:54 +08:00
    ...这 是当成 了发布平台吗
    sajesemuy
        3
    sajesemuy  
    OP
       2018-02-05 10:11:49 +08:00
    @est 没开启 proxy 是指?
    sajesemuy
        4
    sajesemuy  
    OP
       2018-02-05 10:12:11 +08:00
    @shuizhengqi 不好意思,请多担待:)
    suconghou
        5
    suconghou  
       2018-02-05 10:17:59 +08:00   ❤️ 1
    @sajesemuy 你没发现 release 的代码编译后,-v 查看 版本写的还是老版本吗
    sajesemuy
        6
    sajesemuy  
    OP
       2018-02-05 10:21:59 +08:00
    @suconghou 感谢
    est
        7
    est  
       2018-02-05 10:43:19 +08:00
    @sajesemuy

    proxy_http_version 1.1;
    proxy_set_header Connection "";
    sajesemuy
        8
    sajesemuy  
    OP
       2018-02-05 10:56:57 +08:00
    @est 这个是设置 nginx 和 upstream 的,因为 cache 已经在 nginx 里,所以并不会有区别。
    nginx 和客户端之间是 1.1,keep-alive。
    est
        9
    est  
       2018-02-05 11:22:40 +08:00
    @sajesemuy 你先改下试试呢?
    sajesemuy
        10
    sajesemuy  
    OP
       2018-02-05 11:45:14 +08:00
    @est 不需要啊,这个参数就是这个意思
    sajesemuy
        11
    sajesemuy  
    OP
       2018-02-05 11:55:10 +08:00   ❤️ 2
    好吧,实践检验一下

    不设置
    =======
    ```
    #proxy_http_version 1.1;
    #proxy_set_header Connection "";
    ```
    curl -i http://10.0.10.13:8083/INSTALL
    ```
    HTTP/1.1 200 OK
    Server: nginx
    Connection: keep-alive
    ```
    可见 nginx 发给后端的请求为 http1.0
    ```
    10.0.10.13 - - [05/Feb/2018:12:50:18 JST] "GET /INSTALL HTTP/1.0" 200 916
    - -> /INSTALL
    ```
    设置
    ===
    ```
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    ```
    nginx 发给后端的请求为 http1.1
    ```
    10.0.10.13 - - [05/Feb/2018:12:51:14 JST] "GET /INSTALL HTTP/1.1" 200 916
    - -> /INSTALL
    ```
    wrk 比较
    ======
    ```
    wrk -c 1000 -d 30 -t 100 http://10.0.10.13:8083/INSTALL
    Running 30s test @ http://10.0.10.13:8083/INSTALL
    100 threads and 1000 connections
    Thread Stats Avg Stdev Max +/- Stdev
    Latency 11.34ms 10.90ms 225.76ms 92.30%
    Req/Sec 1.04k 446.52 6.22k 61.21%
    3069181 requests in 30.10s, 3.28GB read
    Requests/sec: 101967.40
    Transfer/sec: 111.44MB

    wrk -c 1000 -d 30 -t 100 http://10.0.10.13:8083/INSTALL
    Running 30s test @ http://10.0.10.13:8083/INSTALL
    100 threads and 1000 connections
    Thread Stats Avg Stdev Max +/- Stdev
    Latency 12.97ms 15.53ms 363.39ms 90.47%
    Req/Sec 1.06k 614.42 14.93k 63.68%
    3042735 requests in 30.10s, 3.25GB read
    Requests/sec: 101089.02
    Transfer/sec: 110.48MB
    ```

    可见并无明显差别
    est
        12
    est  
       2018-02-05 11:55:54 +08:00
    @sajesemuy 赞实践!
    sajesemuy
        13
    sajesemuy  
    OP
       2018-02-05 11:56:51 +08:00
    @est 见上一条:)

    回复不能用 markdown 么^^
    Showfom
        14
    Showfom  
       2018-02-05 14:42:40 +08:00 via iPhone
    @sajesemuy 不能
    yytsjq
        15
    yytsjq  
       2018-02-05 14:57:43 +08:00
    不知道楼主对比测试过 OpenResty 的 srcache 缓存模块吗?

    我现在用的是 srcache+lua-resty-redis+redis 做的 WordPress 页面缓存

    https://github.com/openresty/srcache-nginx-module
    https://github.com/openresty/lua-resty-redis
    sajesemuy
        16
    sajesemuy  
    OP
       2018-02-05 15:21:13 +08:00
    @Showfom 什么不能
    sajesemuy
        17
    sajesemuy  
    OP
       2018-02-05 15:28:55 +08:00
    @yytsjq 没有测试过,srcache 是存在外部 memcache 或者 redis,应该会有消耗。我是内置了一个性能差不多和 redis 相当的 hashtable,估计会比 srcache 快。
    sajesemuy
        18
    sajesemuy  
    OP
       2018-02-05 15:29:20 +08:00
    @Showfom 哦,markdown 啊,谢谢:)
    sajesemuy
        19
    sajesemuy  
    OP
       2018-02-05 19:53:17 +08:00   ❤️ 1
    @yytsjq 做了一下测试,性能上 nuster 是 srcache+memcached 的三倍

    测试环境,软件硬件,内核参数,配置文件见
    https://www.v2ex.com/t/427703
    或者
    https://github.com/jiangwenyuan/nuster/wiki/Performance-benchmark:-nuster-vs-nginx-vs-varnish

    srcache 的配置和官网一致。


    openresty+srcache 结果

    wrk -c 1000 -d 30 -t 100 http://10.0.10.13:8083/helloworld
    Running 30s test @ http://10.0.10.13:8083/helloworld
    100 threads and 1000 connections
    Thread Stats Avg Stdev Max +/- Stdev
    Latency 9.52ms 8.42ms 239.68ms 85.90%
    Req/Sec 1.24k 152.67 2.72k 71.13%
    3725352 requests in 30.10s, 859.77MB read
    Requests/sec: 123765.07
    Transfer/sec: 28.56MB


    nuster 结果

    wrk -c 1000 -d 30 -t 100 http://10.0.10.13:8081/helloworld
    Running 30s test @ http://10.0.10.13:8081/helloworld
    100 threads and 1000 connections
    Thread Stats Avg Stdev Max +/- Stdev
    Latency 3.33ms 1.95ms 205.90ms 79.42%
    Req/Sec 3.04k 330.76 5.29k 69.99%
    9101575 requests in 30.10s, 2.09GB read
    Requests/sec: 302383.66
    Transfer/sec: 71.23MB

    nuster 的 RPS 差不多是 openresty+srcache 的三倍
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2860 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 14:29 · PVG 22:29 · LAX 07:29 · JFK 10:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.