我有一个在低端计算机上运行的服务(在Nginx
后面),并且CPU性能相当弱。其中一种API需要大量CPU时间,因此需要限制最大并发请求数。但是,如果请求被缓存,它可以更快地响应。
我想做的是限制发送给特定API的后端服务的最大并发连接数。我研究了limit_req
和limit_conn
,但它们都不满足我的情况。 limit_req
可能导致高负载(未命中太多)或低负载(当大多数请求都已缓存时),要确定该值并不容易。虽然limit_conn
将删除其余请求(我希望将它们排队)。
当前,我正在使用apache2 mpm
模块,但它限制了所有请求。
是否可以使Nginx保持最大连接数并让其他连接等待?
如果许多请求尝试访问完全相同的数据,那么在确实不有用时,可以使用locking mechanism至少防止服务器过载。
proxy_cache_lock on
我不知道针对您情况的另一种解决方案。默认情况下,当N已发送到服务时,保留请求似乎不是一个选项。如果您有多个这样的服务器,则可以将nginx设置为负载平衡器,但这是一个完全不同的概念。