当同一个容器(在本例中,容器有一个apache服务器和一个php应用程序)在同一个主机或VM上部署5次或更多次(即5个或更多个容器)时,我们是否获得了负载处理的效率?
在这里,效率意味着应用程序是否能够更快地服务更多请求或更快地服务请求?
据我所知,每个请求都会启动一个新的apache线程,如果我们有5个容器处理这些请求,那么它是否效率低下,因为现在apache启动的线程将更频繁地被上下文切换?
发布于 2018-06-01 20:49:14
这是一个很好的问题,但从理论上来说,这不是一个简单的问题。答案在很大程度上取决于在Apache/PHP体系结构中线程的隔离程度。虽然可能有单独的线程,但这并不意味着它们之间没有争用。例如,它们可能锁定共享互斥或信号量。在这种情况下,有5个容器执行1个请求,在一个应用程序实例中,每个容器可能能够处理比5个线程更多的并发性。
至于是否会有更多的线程上下文切换。在请求数量相同的情况下,情况不一定如此。但是,如果每个实例有一个或多个非请求线程,则这些开销线程的数量将是这些线程的5倍。
我建议在负载下尝试各种配置,并获得度量,以更好地理解每种配置的成本和效益。
与世隔绝还有其他好处,但如果它们存在的话,这可能会超过这些代价。一个主要的好处是,如果您有一个容器崩溃从一个糟糕的请求,您不会失去其他4和许多工具允许自动恢复被击落的容器。此外,如果您受到PHP包中经常发现的许多漏洞中的任何一个,攻击者将不得不逃离容器,以获得对主机/VM的访问或控制。
发布于 2018-06-03 08:11:24
不,在运行同一应用程序的单个主机上运行多个容器通常不是更有效。
即使我们不承担运行容器的开销,web服务器也已经被设计为处理尽可能多的请求。
如果处理更多的请求就像运行两次程序一样简单(实际上是这样),那么他们就已经这样做了(实际上是这样做的)。
*也许如果您的程序不是为该任务设计的,例如使用Excel处理业务规则,您可能希望有一个多容器策略来克服它的局限性,例如同时打开多个副本。
https://softwareengineering.stackexchange.com/questions/371955
复制相似问题