我有一个简单的 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": ""}';
# }
}