让我们有一个由Nginx服务的web应用程序,听80端口。
当两个或更多用户尝试访问该应用程序的某个URL时,哪个响应需要很长时间。 例如,十个用户尝试在100秒内为单用户请求加载/give_me_some_charts页面和服务器响应。
每个用户试图通过端口80访问应用程序。 我相信服务器(在我们的例子中是Nginx)将阻止该端口,直到发送响应。 所以处理十个用户需要10 users * 100 seconds == 1000 seconds 。
但是Nginx有一些function叫做平衡 。 现在我不确定服务器如何处理并行请求。
那么,服务器如何处理并行请求以及它如何响应呢? 那Nginx的平衡function是什么?
我对nginx没有特别的了解(目前还没有理由使用它),但几乎所有在端口上提供服务的服务器function类似于以下:
一个服务器将不会阻塞所有进一步的连接,直到完成当前的连接。 如果确实如此,那么即使是非常繁忙的网站也将变得无法使用。 上面列出的代码块通常尽可能紧凑(小),以便尽快完成。 一些分叉新stream程(比如Apache)的服务器也将保留闲置的“子”进程,这样当客户端连接时,他们不必进行慢fork系统调用。
这允许多个(数十,数百,甚至数千)客户端被同时连接。 如果10个用户连接到您的网站,那么Web服务器有10个单独的线程或进程同时为这些客户端提供服务。 所有请求是在100秒内完成还是花费更长的时间,主要取决于代码在做什么。 (无论是争取CPU时间,文件系统阻塞还是数据库调用等)
快速的networkingsearch表明,nginx的“平衡”function可能与将代理请求代理到后端服务器(将其用作负载平衡器)的能力有关,而与它同时处理多个客户端的能力有关。