nginx 使我的 rest-service 速度减慢了 5 倍

nginx 使我的 rest-service 速度减慢了 5 倍

我设置了一个简单的 REST 服务,该服务本机(独立可执行文件)处理 135k/rps。服务在 localhost:8181 上运行

从单独的机器运行的 autocannon 基准测试得出:

┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬──────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev    │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼──────────┼─────────┤
│ Req/Sec   │ 58335   │ 58335   │ 109247  │ 135039  │ 106779.2 │ 18509.53 │ 58312   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼──────────┼─────────┤
│ Bytes/Sec │ 9.74 MB │ 9.74 MB │ 18.3 MB │ 22.5 MB │ 17.8 MB  │ 3.09 MB  │ 9.74 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴──────────┴─────────┘

当通过 nginx 使用基本的上游设置代理时,性能急剧下降:

┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 13359   │ 13359   │ 14991   │ 19103   │ 15767.12 │ 1878.98 │ 13352   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 2.53 MB │ 2.53 MB │ 2.83 MB │ 3.61 MB │ 2.98 MB  │ 355 kB  │ 2.52 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

下面是我的 nginx 配置(我进行了一些小实验,结果略有改进):

nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    multi_accept on;
}

http {
    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    access_log off;
    error_log off;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay off;
    keepalive_timeout 35;
    types_hash_max_size 2048;

    client_max_body_size 100M;


    include /etc/nginx/mime.types;
    default_type application/octet-stream;


    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;


    gzip off;
    gzip_min_length 10240;
    gzip_comp_level 1;
    gzip_vary on;
    gzip_disable msie6;
    gzip_proxied expired no-cache no-store private auth;

    server_tokens off;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

站点启用/反向代理.conf

upstream pindap_api {
    least_conn; 
    server localhost:8181;
}

server {
    listen 80;
    server_name api.pindap;

    access_log off;
    error_log off;

    location / {
        proxy_buffering off;
        proxy_pass http://pindap_api;
    }
}

server {
    listen 80;

    server_name pindap;         

        access_log off;
        error_log off;

        location / {
        proxy_buffering off;
        proxy_pass http://localhost:8181;
        }
}

这可能是什么原因造成的?我还能尝试什么?

相关内容