我想要一个容器处理多个请求?

这个问题不涉及到networking或托pipe,而是关于如何构build我的应用程序:如果我设置一个docker容器作为一个PHP的networking节点,是适当的约定,我设置它,可以处理多个连接?

或者,最好是将它设置为一次处理一个请求,然后如果我想要同时处理更多的连接,则旋转同一图像的多个实例?

Docker容器通常用于运行单个(逻辑)应用程序,并限制应用程序使用的资源(内存,磁盘I / O,networking带宽等)。 这并不一定意味着运行一个进程; 它可能有辅助的东西,如进程监视器,但通常PHP容器只会运行PHP解释器。 这将会运行多个副本。

正如我们所知,nginx和php-fpm都能完美地处理多个同时发生的请求,达到可用的资源限制。 因此,一个容器可以提供多个请求。 那么Apache可以使用mod_php,虽然在这种情况下PHP被embedded在Apache中,并限制了Apache可以处理的内容。 所以你可能希望将Web服务器和PHP分离成单独的(链接的)容器。

那么会发生什么事情呢,最终你会得到足够的stream量,单个容器不能足够快地处理这些stream量,或者根本就不行。 在这一点上,你要么要扩大容器或启动一个新的。 一般来说,nginx可以处理数以千计的并发请求,PHP可以处理数十个(这些是数字)。 因此,在规模上,您可能有四个nginx容器提供800个PHP容器,前面有两个haproxy负载均衡器容器,每个容器的处理速度从10,000到每秒40,000次。

但是,所有这800个PHP容器不一定在800台主机上。 例如,如果您正在使用t2.small AWS实例(如果您只需要容器使用虚拟机的所有资源),但是如果IT部署裸机(通常比单独的资源更多),则可能会出现这种情况虚拟机,你几乎可以肯定会在该主机上有多个容器,以利用其所有的资源。 PHP往往是CPU绑定的,所以IT也可以并行运行你的容器,完全不相关的容器,不占用太多的CPU,但使用大量的内存或磁盘,例如。

所有这一切,是的,你的单个容器可以并将处理多个同时请求,你的程序应该知道这是正在进行。 这通常不是一个问题,但是这确实意味着你应该避免可能导致争用的问题,比如数据库locking,或者所有的容器都可能被扼杀。

首先,请查看docker.io和教程 – 在解决特定的体系结构问题之前,了解如何使用这个教程非常重要。

现在,在PHP世界中,您将在Apache容器中运行mod_php(或nginx / php_fpm或其他)。 该容器将提供所有传入的请求。

如果你需要负载平衡你的应用程序,那么你会有另一个容器(可能在另一个主机上)与反向代理(如HAProxy),将为您处理这个。 您也可以configuration您的DNS,以在带有或不带有HAProxy的Web服务器实例之间循环。

如果您认为容器与过程相似,则会适当地指导您的select。

按照“一个应用程序到一个容器”的最佳实践build议,这是一个过程,尽pipe在某些控制组中有一个附加了某些命名空间的过程。