让我们拥有一个由Nginx提供的web应用程序,它可以收听端口80
。
当两个或多个用户试图访问该应用程序的某个URL时,这个响应会花费大量时间。例如,十个用户试图在/give_me_some_charts
页面和服务器响应100
秒内加载单用户请求。
每个用户都试图通过端口80
访问应用程序。我相信服务器(在我们的示例中是Nginx)会阻塞该端口,直到发送响应为止。因此,处理10个用户应采用10 users * 100 seconds == 1000 seconds
。
但是在Nginx中有一些特性叫做平衡。现在我不确定服务器是如何处理并行请求的。
那么,服务器如何处理并行请求及其响应方式呢?Nginx的平衡功能是什么?
发布于 2013-08-27 01:03:16
我对nginx还不太确定(还没有理由使用它),但是几乎所有服务器都提供类似于下面的端口功能的服务:
在完成当前连接之前,服务器不会阻止所有进一步的连接。如果是这样的话,即使是稍微繁忙的网站也会变得无法使用。上面概述的代码块通常尽可能紧凑(小),因此它完成得越快越好。一些生成新进程的服务器(如Apache)也会保留空闲的“子”进程,这样在客户端连接时它们就不必执行缓慢的fork
系统调用了。
这允许同时连接多个(数十个、数百个甚至数千个)客户端。如果10个用户连接到您的网站,那么具有10个单独线程或进程同时为这些客户端服务的web服务器。所有请求是否在100秒内完成,还是花费更长时间,主要取决于代码正在做什么。(无论他们是在争取CPU时间、阻止文件系统或数据库调用等等)
快速的网络搜索表明,nginx的“平衡”功能可能与它向后端服务器代理请求的能力有关(将其用作负载均衡器),而不是它同时处理多个客户端的能力。
https://serverfault.com/questions/534044
复制