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

反向代理比原接口性能还低是怎么回事呢,能不能改善

  •  
  •   bombless ·
    bombless · 2021-01-19 18:36:16 +08:00 · 2593 次点击
    这是一个创建于 1185 天前的主题,其中的信息可能已经有所发展或是发生改变。
    反向代理本身的配置就是很普通的


    location / {
    #proxy_buffering off;
    root html;
    index index.html index.htm;
    #proxy_buffers 8 4m;
    #proxy_busy_buffers_size 25m;
    #proxy_buffer_size 512k;
    #proxy_ignore_headers "Cache-Control" "Expires";
    #proxy_max_temp_file_size 0;
    proxy_connect_timeout 300;
    proxy_read_timeout 300;
    proxy_send_timeout 300;
    proxy_intercept_errors off;
    proxy_pass http://api;
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    #proxy_set_header Forwarded "$proxy_add_forwarded;proto=$scheme";
    }

    这样的,还有:


    worker_rlimit_nofile 655350;
    events {
    worker_connections 5000000;
    }

    我测的是列表接口,从原接口用 jmeter 给 1000 个线程,原接口得到的吞吐量是 200 多个操作每秒,
    但反向代理的接口只有 20 多不说,有 20%的请求返回的是 read timeout
    接收数据量原接口是 6MB/s,反向代理出的接口是 500KB/s

    测试的时候 nginx 那台机器的 cpu 和内存占用都没什么波动,所以机器性能不够应该不是主要原因

    至于说为什么反向代理是因为 nginx 的这台机器才在公网上

    反向代理没开缓存是因为这个是个 post 接口,客户端已经发出去了接口不会改为 get 了,并且这里会统计用户访问数所以也不好缓存


    就想了解一下反向代理的接口能不能吞吐和原接口接近呢,有没有懂的说说
    8 条回复    2021-01-19 22:00:16 +08:00
    jk1030
        1
    jk1030  
       2021-01-19 18:44:35 +08:00   ❤️ 1
    1.为什么不考虑下公网的带宽呢
    2.加了代理层肯定比原来的差
    3.用户访问数不能用 nginx 来统计吗
    yeqizhang
        2
    yeqizhang  
       2021-01-19 18:47:05 +08:00 via Android
    多半是你接口问题或者网络问题,并发量设置的一样?
    walkfish
        3
    walkfish  
       2021-01-19 19:58:13 +08:00
    http version 设成 1.1,不然没有链接复用
    walkfish
        4
    walkfish  
       2021-01-19 19:58:42 +08:00
    proxy_http_version 1.1;
    superrichman
        5
    superrichman  
       2021-01-19 20:16:52 +08:00 via iPhone
    你 root 和 proxy_pass 写一起,我猜 nginx 接受每个请求都要把 html 目录扫描一遍,没找到文件才把请求转给你的应用。
    coolesting
        6
    coolesting  
       2021-01-19 21:11:27 +08:00 via Android
    location / {
    #
    }

    # 这样的写法相当于 -> select * from user ;
    # 你说慢不慢呢。。。
    qwerthhusn
        7
    qwerthhusn  
       2021-01-19 21:19:29 +08:00
    要用 upstream 的 keepalive
    然后 proxy 去 keepalive 连接,会好点
    bombless
        8
    bombless  
    OP
       2021-01-19 22:00:16 +08:00
    多谢各位的建议。

    我才发现是我测的时候原接口都是在内网测的,反向代理都是走公网的才有这个区别

    我直接在内网测反向代理就可以看到其实反向代理之后性能差不多的


    但是现在公网那么多 read timeout 也很头疼,但这就是另一个问题了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3207 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:45 · PVG 21:45 · LAX 06:45 · JFK 09:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.