【发布时间】:2017-01-18 09:27:58
【问题描述】:
Web 服务器 (WS)(如 apache2 或 nginix(或容器如 tomcat(TC))是否会创建一个新进程来处理传入请求。我担心支持大量并行用户(比如 20K+ 并行用户)的服务器).
我认为负载平衡发生在 Web 服务器的另一端(如果它用于前端 Tomcat 等)。因此,理论上,单个 Web 服务器应该接受所有 (20K+) 传入请求,然后才能将负载分配给支持它的其他服务器。
所以,问题是:Web 服务器 (WS) 是否处理所有这些请求在单个进程中,或者它巧妙地产生其他进程来帮助共享工作(我知道“客户端 - 服务器”绑定发生了 - client_host:random_port 加上 server_host:fixed_port)。
参考: 在阅读本文之前:Fronting Tomcat with Apache 我认为这是一个完成所有智能工作的单一进程。但是在这篇文章中提到了 MPM(多处理模块)
它结合了两个世界中最好的,有一组子进程,每个子进程都有一组单独的线程。有些网站使用此技术运行 10K+ 并发连接。
随着它的发展,随着线程也像上面提到的那样被生成,它变得越来越复杂。 (这些不是通过调用 service 方法为每个单独的请求提供服务的 tomcat 线程,但这些是 Apache WS 上的线程,用于处理请求并将它们分发到节点进行处理)。
如果有人使用 MPM。对所有这些工作原理的进一步解释将会很棒。
类似的问题 -
(1) 随着子进程的产生,它的确切作用是什么。子进程是否仅用于调解对 tomcat 的请求或其他任何事情。如果是这样,那么在子进程得到 TC 的响应后,子进程是把响应转发给父进程还是直接转发给客户端(因为它可以知道 client_host:random_port 来自父进程。我不确定这在理论上是否允许,尽管子进程不能接受任何新请求,因为 fixed_port 只能绑定到一个进程已绑定到父进程。
(2) 子进程或父进程将什么样的负载分担给线程。同样,它必须与 (1) 中的几乎相同。但我不确定的是,即使理论上线程是否可以直接向客户端发送请求。
【问题讨论】:
标签: apache http tomcat nginx httpserver