当Django应用程序被淹没时,超数请求会发生什么?

时间:2014-08-17 12:20:53

标签: python django web-applications

我有一个使用Django的网络应用程序。该应用的最大容量为N RPS,而客户端则发送M RPS,其中M>N。换句话说,应用程序接收的请求数超出其处理能力,未处理的请求数将随着时间的推移线性增长(t秒之后,等待处理的请求数为(M-N) * t

我想知道这些请求会发生什么。它们会在内存中累积直到内存满了吗?在满足某些条件后,他们会被“取消”吗?

1 个答案:

答案 0 :(得分:0)

如果没有有关配置的详细信息,很难直接回答您的问题。此外,对于您的应用程序的极高使用率,很难确定那里会发生什么。但可以肯定的是,您无法确保所有这些请求都能得到正确处理。

如果您能够计算应用程序每秒可处理的请求数量,并且您希望使其超过N个请求可靠,那么也许它是一个良好的开端,可以考虑某种负载均衡器,它会将您的请求分散到多台服务器上。

为了回答你的问题,我可以想到在请求无法处理时的可能性很少:

  1. 客户取消了他的请求(可能是浏览器,可能有最大时间执行限制)。
  2. 请求的时间执行高于Web服务器配置中设置的timeout限制(因为资源不足,I / O操作太多,......)。
  3. 也许其他服务(比如一些阻止的PostgreSQL查询或者Memcache服务器无法正常工作)已经超时了
  4. 您的服务器计算机已超载,无法建立TCP连接。
  5. 您选择的Web服务器只能处理指定的配置数量的请求/队列长度并拒绝超出限制(在Apache中,例如此配置:http://httpd.apache.org/docs/2.2/mod/mpm_common.html#listenbacklog)。
  6. 尝试阅读有关C10K问题的内容,可以更深入地思考它。