- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
web服务器(ws)(比如apache2或nginix(或者tomcat(tc))是否会创建一个新进程来处理传入的请求。我关心的是支持大量并行用户(比如20k+并行用户)的服务器。
我认为负载平衡发生在web服务器的另一端(如果它用于前置tomcat等)。因此,理论上,一个web服务器应该接受所有(20k+)传入的请求,然后才能将负载分配给支持它的其他服务器。
所以,问题是:web服务器(ws)是在一个进程中处理所有这些请求,还是巧妙地生成其他进程来帮助共享工作(我知道“client-server”绑定是通过-client-host:random-port+server-host:fixed-port实现的)。
参考:在阅读这篇文章之前:Fronting Tomcat with Apache我认为这是一个完成所有智能工作的单一过程。但是在本文中提到了mpm(多处理模块)
它结合了两个世界中最好的,有一组子进程,每个进程都有一组独立的线程。有些站点正在使用此技术运行10K+并发连接。
而且,随着线程也像上面提到的那样被生成,它变得越来越复杂。(这些不是通过调用服务方法来为每个单独的请求提供服务的tomcat线程,而是apache ws上处理请求并将它们分发给节点进行处理的线程)。
如果有人用MPM。对所有这些工作原理几乎没有进一步的解释。
像这样的问题-
(1)当子进程生成时,它的确切角色是什么。子进程只是为了调解对tomcat或其他任何东西的请求。如果是,那么在子进程从tc获得响应之后,子进程是否将响应转发给父进程或直接转发给客户机(因为它可以从父进程知道客户机主机:random_port)。我不确定在理论上是否允许这样做,尽管子进程不能接受任何新的请求,因为只能绑定到一个进程的固定端口已经绑定到父进程。
(2)子进程或父进程共享给线程的负载类型。同样,它必须与(1)中的几乎相同。但我不确定的是,即使在理论上,线程是否可以直接向客户机发送请求。
最佳答案
apache历史上使用预处理模型。在这个模型中,每个请求=单独的操作系统(OS)进程。它之所以调用“prefork”,是因为apache在内部派生了一些备用进程和进程请求。如果预处理进程的数量不够-apache fork new。优点:进程可以执行其他模块或进程,而不必在意它们的执行情况;缺点:每个请求都是一个进程,使用的内存太多,os fork也可能对您的请求很慢。
apache-worker MPM的其他模型。与prefork几乎相同,但使用的不是os进程而是os线程。线程-这就像轻量级进程。一个操作系统进程可以使用一个内存空间运行多个线程。worker-mpm使用的内存更少,创建的新线程也更快。缺点:模块需要支持线程,模块崩溃会导致所有操作系统进程的所有线程崩溃(但这对您来说并不重要,因为您只使用apache作为反向代理)。其他缺点:在线程之间切换时CPUswitching context。
所以是的,在你的情况下,工作比工作前好多了,但是…
但是我们有nginx:)nginx使用其他模型(顺便说一下,apache也有事件mpm)。在这种情况下,您只有一个进程(好吧,可以是几个进程,见下文)。工作原理。新的请求上升特殊事件,操作系统进程唤醒,接收请求,准备应答,写应答和去睡眠。
你可以说“哇,但这不是一心多用”,这是对的。但是这个模型和简单的顺序请求处理有一个很大的区别。如果你需要写大数据来减缓客户端的速度,会发生什么?以同步方式,您的进程需要等待确认数据接收,并且只在处理新请求之后。nginx和apache事件模型使用异步模型。nginx告诉操作系统发送一些数据,将这些数据写入操作系统缓冲区,然后…睡着了,或者处理新的请求。当操作系统发送数据时-特殊事件将发送到nginx。所以,主要的区别是nginx不等待i/o(比如connect、read、write),nginx告诉os他想要什么,os向nginx发送事件,而不是这个任务就绪(socket connected、data writed或new data ready to read in local buffer)。此外,现代操作系统可以与hdd(读/写)异步工作,甚至可以将文件从hdd直接发送到tcp套接字。
当然,这个NGIX进程中的所有数学操作都会阻塞这个进程,并停止处理新的和现有的请求。但是,当主要工作流程与网络(反向代理,转发请求到fastcgi或其他后端服务器)加上发送静态文件(也异步)一起工作时,nginx可以在一个os进程中同时服务数千个请求!另外,因为一个os进程(和一个线程)cpu将在一个上下文中执行它。
我之前说过-nginx可以启动几个操作系统进程,每个进程都将由操作系统分配给单独的cpu核心。几乎没有理由分叉更多的nginx操作系统进程(只有一个原因:如果你需要做一些阻塞操作,但简单的反向代理与后端平衡-不是这种情况)
因此,优点是:更少的cpu上下文切换,更少的内存(与工作mpm相比也是如此),快速的连接处理。更多优点:nginx被创建为http负载均衡器,有很多选择(在商业nginx plus中甚至更多)。缺点:如果你在操作系统进程中需要一些硬计算,这个进程将被阻塞(但是你在tomcat中计算的都是,所以nginx只有平衡器)。
注:排版修复将在稍后,过期。另外,我的英语不好,所以修好总是受欢迎的:)
pps:回答关于tc线程数的问题,在评论中提出(太长,不能作为评论发表):
最好的方法知道它-测试它使用应力加载工具。因为这个数字取决于应用程序配置文件。响应时间不足以帮助回答。因为,例如,200毫秒100%数学(100%CPU限制)与50毫秒数学+150毫秒睡眠等待数据库答案之间的巨大差异。
如果应用程序是100%受CPU限制的—可能每个内核一个线程,但在实际情况下,所有应用程序也会在I/O(接收请求、向客户端发送应答)中花费一些时间。
如果应用程序使用I/O并需要等待来自其他服务(例如数据库)的答案,则此应用程序将在睡眠状态下花费一段时间,并且CPU可以处理其他任务。
所以,创建接近实际负载的请求数并运行压力测试的最佳解决方案是增加并发请求数(当然还有tc工作者的数量)。找到可接受的响应时间并修复此线程数。当然,需要检查之前,它不是数据库故障。
当然,这里我只讨论动态内容,来自磁盘的静态文件请求必须在tomcat之前处理(例如nginx)。
关于apache - 使用Apache2(或Nginx)处理Http请求。是否为每个或一组N个请求创建一个新进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39424955/
在流处理方面,Apache Beam和Apache Kafka之间有什么区别? 我也试图掌握技术和程序上的差异。 请通过您的经验报告来帮助我理解。 最佳答案 Beam是一种API,它以一种统一的方式使
有点n00b的问题。 如果我使用 Apache Ignite 进行消息传递和事件处理,是否还需要使用 Kafka? 与 Ignite 相比,Kafka 基本上会给我哪些(如果有的话)额外功能? 提前致
Apache MetaModel 是一个数据访问框架,它为发现、探索和查询不同类型的数据源提供了一个通用接口(interface)。 Apache Drill 是一种无架构的 SQL 查询引擎,它通过
Tomcat是一个广泛使用的java web服务器,而Apache也是一个web服务器,它们在实际项目使用中有什么不同? 经过一些研究,我有了一个简单的想法,比如, Apache Tomcat Ja
既然简单地使用 Apache 就足以运行许多 Web 应用程序,那么人们何时以及为什么除了 Apache 之外还使用 Tomcat? 最佳答案 Apache Tomcat是一个网络服务器和 Java
我在某个 VPS( friend 的带 cPanel 的 apache 服务器)上有一个帐户,我在那里有一个 public_html 目录。我们有大约 5-6 个网站: /home/myusernam
我目前正在尝试将模块加载到 Apache,使用 cmake 构建。该模块称为 mod_mapcache。它已成功构建并正确安装在/usr/lib/apache2/modules directroy 中
我对 url 中的问号有疑问。 例如:我有 url test.com/controller/action/part_1%3Fpart_2 (其中 %3F 是 url 编码的问号),并使用此重写规则:R
在同一台机器上,Apache 在端口 80 上运行,Tomcat 在端口 8080 上运行。 Apache 包括 html;css;js;文件并调用 tomcat 服务。 基本上 exampledom
Apache 1 和 Apache 2 的分支有什么区别? 使用一种或另一种的优点和缺点? 似乎 Apache 2 的缺点之一是使用大量内存,但也许它处理请求的速度更快? 最有趣的是 Apache 作
实际上,我们正在使用 Apache 网络服务器来托管我们的 REST-API。 脚本是用 Lua 编写的,并使用 mod-lua 映射。 例如来自 httpd.conf 的实际片段: [...] Lu
我在 apache 上的 ubuntu 中有一个虚拟主机,这不是我的主要配置,我有另一个网页作为我的主要网页,所以我想使用虚拟主机在同一个 IP 上设置这个。 urologyexpert.mx 是我的
我使用 Apache camel 已经很长时间了,发现它是满足各种系统集成相关业务需求的绝佳解决方案。但是几年前我遇到了 Apache Nifi 解决方案。经过一番谷歌搜索后,我发现虽然 Nifi 可
由于两者都是一次处理事件的流框架,这两种技术/流框架之间的核心架构差异是什么? 此外,在哪些特定用例中,一个比另一个更合适? 最佳答案 正如您所提到的,两者都是实时内存计算的流式平台。但是当您仔细观察
apache 文件(如 httpd.conf 和虚拟主机)中使用的语言名称是什么,例如 # Ensure that Apache listens on port 80 Listen 80 D
作为我学习过程的一部分,我认为如果我扩展更多关于 apache 的知识会很好。我有几个问题,虽然我知道有些内容可能需要相当冗长的解释,但我希望您能提供一个概述,以便我知道去哪里寻找。 (最好引用 mo
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4 个月前关闭。 Improve
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
这个问题在这里已经有了答案: Difference Between Apache Kafka and Camel (Broker vs Integration) (4 个回答) 3年前关闭。 据我所知
我有 2 个使用相同规则的子域,如下所示: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond
我是一名优秀的程序员,十分优秀!