服务数百万并发连接和静态文件?

我只是好奇的服务器configuration只服务于一个服务器的静态文件。

是否有可能build立一个服务器,只为静态文件和服务数百万并发连接。 什么可能是最好的HTTPD服务呢?

服务器将只从目录提供静态文件,不会使用除HTTPD以外的任何其他服务,当然也不会使用PHP。

数百万并发连接? 除非您正在托pipevideostream或其他大型文件,否则http请求通常会在如此短的时间内完成,即使在繁忙的站点上也没有多less并发连接。 如果你这样做,你真的没有只有一台服务器。 还有这种stream量,你的networkingstream量将是如此之高,我不认为一台服务器将是你最好的select。

但是,让我们想象一下,只有一台服务器和数百万并发连接才能真正运行服务:nginx或lighttpd将是您最好的select。 接下来,您可能需要调整许多内核参数,例如fs.open 。 你也许需要编译你自己的内核。

以下是关于HEANET如何将Apache 2.x升级到20 0000多个并发会话的幻灯片 。 请注意,即使需要相当多的修补。

我希望您对stream量估算有点乐观,但对于大规模静态资产服务,您最好的select是nginx。 请注意,有了这么多的并发连接,你将不得不调整一些内核参数。

“百万”的并发连接可能有点难以实现,但大多数Web服务器属于这些架构types:前叉(1个进程/ 1个线程,1个连接),线程化(1个进程/多个线程,每个连接1个线程),事件驱动(1个进程/ 1个线程,多个连接)。 当然也有这些的混合体,比如apache mpm_worker,它是pre-fork和threaded的混合体。

一般来说,pre-fork将处理最less的连接数,因为每个连接创build一个新的进程是非常昂贵的,并占用大量的资源。 螺纹是一点点更好,但数千或数百万的线程也可以有很多的开销。 事件驱动的系统通常是1进程/ 1线程,并使用asynchronous/非阻塞IO来实现非常高的并发性,同时以最小的资源开销。

你可能会想要坚持事件驱动的家庭来接近你的“百万并发”的目标。 一些事件驱动的应用程序仅限于1个CPU。 如果你在一个多CPU的机器上,你会想每个CPU运行1个实例(一些networking服务器可能会为你处理这个问题,而另一些则需要你编写脚本并自己pipe理)。