限制连接到Web服务,如果负载过高?

我有一个网站,通过XMLRPC与XMLRPC服务器Web服务进行通信。 (Web服务是使用xmlrpclib以Python编写的。)我相信xmlrpclib在处理一个请求时将会阻塞。

所以如果有三个用户在你之前有一个xmlrpclib请求,你的响应需要四倍的时间。

如果我收到太多的XMLRPC请求,并且Web服务陷入困境并且响应速度慢,如何处理它?

如果我得到的是斜杠,我的首选行为是,第一个用户得到良好的响应时间,其他人被告知稍后再回来。 我认为这比给每个人可怕的回应时间要好得多。

我如何创build这种行为? 这是否称为负载平衡? 我没有真正的平衡,直到我有多个服务器。

那么,首先,有没有办法可以重新使用XMLRPC服务器来处理多个同时发生的请求? 有多个networking会话取决于一次只能做一个请求的服务可能不会削减它在现实世界中的使用。 一个低stream量的内部企业网站可能会逃避,但在现实世界中,没有办法。

现在,这就是说,我想你需要提供一些有关Web服务平台的信息,以获得可以使用的答案。 我现在可以说的最好的方法就是“计算Web服务器中的优秀XMLRPC请求数,如果数量太多,就会失败”,但是这种方法通用性不强。

你可以用下面的语句来限制使用iptables的连接速率:

iptables -A INPUT -p tcp --dport 22 -i ! vlan28 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP 

正如你所看到的,我们用这个来限制ssh连接到服务器的速度 – 但是通过改变端口号或者其他variables,你可以在任何情况下使用它

您可以通过在XMLPRC服务器之前放置一个反向代理来解决这个问题。 反向代理可以被configuration为只有一个到XMLPRC服务器的连接,并且具有公众可以连接的最大数量的不同的最大数量,例如10。

例如,后端Apache服务器可能将MaxClients设置为“1”,而前端Nginx反向代理可能会将连接限制设置为使用worker_processes和worker_connections的10个客户端。

因此,最多10个客户端可以连接到反向代理,排队直到XMLPRC服务器可用(受限于某个超时值)。 如果一次有超过10个连接,则反向代理可能无法响应。 所以,你可能想调整一下,你可以排队尽可能多的连接,你可以负责任地处理。

细节与实施有关。 我已经成功地使用了HAProxy和Nginx作为反向代理,并且发现Nginx更合适。

我也同意上面的反馈,一次只能在后端提供一个请求,听起来可能是个问题!