我有一个简单的Falcon REST API,用于POST请求,该请求接受JSON格式的主体:
{ "Input": "input string request" }
并返回:
{ "Output: "output string response" }
可能需要注意的是,在生产中,所有请求都将来自单个客户端,并且该服务应能够处理50 req / sec,平均响应时间低于200ms。理想情况下,这些请求应分批完成,但是由于多种因素,不幸的是,必须以这种方式完成。
我发现Bjoern(与Gunicorn相比)能够以最快的速度为我的应用程序提供服务,并在导致超时之前处理最多的负载。最重要的是运行Nginx,下面粘贴了我的许多默认配置。
我面临的问题是,我看到大约2%的请求超时(由Linux wrk
命令行工具确定),我认为这是由于负载造成的。
我想知道是否可以配置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": ""}';
# }
}