1

我有一个简单的 Falcon REST API 用于接受 JSON 格式正文的 POST 请求: { "Input": "input string request" } 并返回: { "Output: "output string response" }

需要注意的是,在生产环境中,所有请求都来自单个客户端,并且该服务应该能够处理 50 个请求/秒,平均响应时间低于 200 毫秒。理想情况下,这些请求应该分批完成,但不幸的是,由于几个因素,它必须以这种方式完成。

我发现 Bjoern(与 Gunicorn 相比)能够以最快的速度为我的应用程序提供服务,并在导致超时之前处理最多的负载。最重要的是运行 Nginx,我的默认配置粘贴在下面。

我面临的问题是我看到大约 2% 的请求超时(由 Linuxwrk命令行工具确定),我认为这是由于负载。

我想知道是否可以将 Nginx 配置为设置响应客户端的时间限制(假设为 500 毫秒),如果上游服务器在响应之前达到该时间限制,则发送带有空 JSON 响应的默认 JSON 响应:{ "Output": "" }

是否可以让所有请求在指定的最长时间内返回?

在此先感谢您的时间!:)

/etc/nginx/nginx.conf:

worker_processes    auto;

error_log   /app/logs/nginx_error.log    warn;
pid         /var/run/nginx.pid;

events {
    worker_connections  1024;   # max connections per worker process

    multi_accept        on;     
    use                 epoll;  # efficient connection processing method for linux
}

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

    log_format  main  '[$time_local] resp_status=$status req_time=$request_time '
                      'upstream_header_time=$upstream_header_time';
    access_log      /app/logs/nginx_access.log   main    buffer=500k    flush=5m;

    sendfile    on;
    tcp_nopush  on;
    tcp_nodelay on;

    #keepalive_timeout   65;   # how long to keep an idle connection alive
    #keepalive_requests  50;

    # proxy_connect_timeout   400ms;
    # proxy_send_timeout      400ms;
    # proxy_read_timeout      400ms;
    # send_timeout            500ms;

    #gzip    on;

    include     /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/app.conf

upstream app_servers {
    server 0.0.0.0:5000;
}

server {
    listen          8000;
    server_name     localhost;

    location / {
        proxy_pass      http://app_servers;

        # error_page      502  timeout_502;
        # error_page      504  timeout_502;
    }

    # location timeout_502 {
    #     #default_type    application/json;
    #     return          204  '{"Output": ""}';
    # }
}
4

0 回答 0