nginx负载平衡:等待(但不要超时),直到负载下降

nginx负载平衡:等待(但不要超时),直到负载下降,nginx,load-balancing,inference,Nginx,Load Balancing,Inference,我有一个ML推理服务器,它能够每秒处理大约100个请求,如果请求量增加,它就会中断并超时 现在,实际负载有时会跳到每秒约200个请求。客户端可以等待约2秒的响应,但请求超时则不行 我正在考虑建立一个反向代理,它可以在负载较高时以某种方式暂停请求,但保持它们的活动性,然后在负载下降时将它们转发到推理服务器。我甚至不确定这是否可能,我希望我把我的问题说清楚 关于如何解决这个问题有什么建议吗?Nginx有一个limit\u req选项 设置共享内存区域和请求的最大突发大小。如果请求速率超过为区域配置

我有一个ML推理服务器,它能够每秒处理大约100个请求,如果请求量增加,它就会中断并超时

现在,实际负载有时会跳到每秒约200个请求。客户端可以等待约2秒的响应,但请求超时则不行

我正在考虑建立一个反向代理,它可以在负载较高时以某种方式暂停请求,但保持它们的活动性,然后在负载下降时将它们转发到推理服务器。我甚至不确定这是否可能,我希望我把我的问题说清楚


关于如何解决这个问题有什么建议吗?

Nginx有一个limit\u req选项

设置共享内存区域和请求的最大突发大小。如果请求速率超过为区域配置的速率,则其处理将延迟,以便以定义的速率处理请求。过多的请求会被延迟,直到它们的数量超过最大突发大小,在这种情况下,请求会因错误而终止。默认情况下,最大突发大小等于零。例如,指令

limit_req_zone $server_name zone=one:10m rate=100r/s;

server {
    location /search/ {
        limit_req zone=one burst=500;
    }
平均每秒允许不超过100个请求,突发请求不超过500个

延迟参数(1.15.7)规定了过度请求延迟的限制。默认值为零,即所有多余的请求都会延迟

可能有几个limit_req指令。例如,以下配置将限制来自单个IP地址的请求的处理速率,同时限制虚拟服务器的请求处理速率:

limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=100r/s;

server {
    ...
    limit_req zone=perip burst=5 nodelay;
    limit_req zone=perserver burst=500;
}

您应该考虑扩展您的应用程序,以便它能够处理更多的请求。如果将传入的请求放入队列中,那么如果高负载周期为2秒或更长时间,您将有相同的超时。@anemyte很遗憾,目前不可能这样做。由于持续的高负载,我可以接受最终的超时,但我需要实现这个小“缓冲区”,这正是我所需要的。非常感谢。