Wenn wir einen Weblink in den Browser eingeben, sendet der Browser eine Anfrage an den entsprechenden Server basierend auf dem HTTP(s)
-Transportprotokoll Der Server empfängt die entsprechende Anfrage, verarbeitet sie und gibt die entsprechenden Informationen an den Browser zurück. Der Browser analysiert dann den Inhalt in http
und zeigt ihn in Form einer Webseite an. HTTP(s)
传输协议向相应的服务器发送一个请求,服务器收到相应的请求后经过处理,返回相应的信息给浏览器,然后由浏览器解析http
中的内容,以网页的形式表现出来。
服务器负责接收请求,并在处理之后返回相应的数据,而其中又可以细分为处理http
连接的服务部分和执行服务内容的应用部分(WordPress
使用PHP
生成需要的页面,就属于应用部分)
而不论应用部分执行的是何种应用,处理http
连接的部分几乎是相同的,所以出现了专门处理http
连接的中间件,目前最常见的是Apache
和Nginx
。
正式名称是“Apache HTTP Server
”,是一款开源的HTTP
服务器中间件,诞生于1995年,曾经是HTTP
服务领域的龙头老大,拥有大量的用户和丰富的社区资源。Apache
的一大优点就是方便与Wordpress
等CMS软件进行集成,只需要简单的设定就能搭建一个基于CMS的网站。
内部构造方面,Apache
采用多进程的方式,每有一个连接就会为这个连接开辟一个进程,专门用于处理这个连接上的请求,直到连接结束。这样做的好处是:
来自不同客户端的连接会立刻得到相应且互不干扰,而且不会因为某一个服务占用了较长的时间而使其它的连接得不到响应。
但是缺点也是显而易见的:
当同时访问数比较多的时候,Apache
会建立大量的进程,占用过多的内存资源。
大量线程间的调度也会造成CPU处理能力的大量浪费。
由此产生了被称为C10K
的难题,C即客户端(Client),10K是指1万,即不论服务器的性能和网络带宽有多高,Apache
都难以同时处理1万个以上的连接。
读作Engine-X
,和Apache
一样也是用于HTTP
服务的开源中间件,诞生于2004年。Nginx
比Apache
的历史要短,但是正因为是后来者,Nginx
吸取了Apache
的教训,在设计初期就考虑到了处理大量连接时的效率问题,解决了诸如C10K
等随着互联网规模壮大而产生的难题。
Nginx
采用了非阻塞IO
和异步消息驱动的方式,即在称作worker
的线程中使用循环来处理队列中的连接请求。而根据硬件的情况,可以设定多个worker
线程,充分利用CPU
的核心资源。
解决了处理大量连接时消耗内存过多,调度效率低下的问题,同时还能充分的利用所有的CPU核心。在相同硬件下处理并发连接的能力是Apache
的10到100倍。
但是Nginx
这种方式也不是没有缺点。
当服务器单核性能较差时,基于CMS的动态网站可能需要较长的时间来执行一个请求,此时来自其他客户端的请求将无法立即被执行。当CPU
核心数较少,worker
线程不足时会更加明显。
好在现在服务器的性能越来越强,在AMD
的带领下CPU
核心数也越来越多,Nginx
的缺点足以被弥补,而高效的优势也愈发显现出来。
Apache Nginx
处理能力有限10-100倍是否会被复杂任务阻塞否有可能会设定难度比较简单相对复杂社区资源丰富相对较少
近年来,Nginx
的市场占有率不断提高,2019年已经达到了和Apache
持平的水平。而对于有极大访问量的大型网站,可以看到访问量越大,Nginx
的占比也就越高。这也从侧面印证了Nginx
在处理大量访问时的优越性能。
Nginx
除了可以作为HTTP服务器使用,其强大的反向代理功能还被广泛地用作负载均衡前端服务器,逐渐取代了基于硬件的负载均衡器。
在Nginx
中可以配置若干个后端服务器,Nginx
在收到HTTP
http
-Verbindungen verarbeitet, und den Anwendungsteil, der Serviceinhalte ausführt, unterteilt werden können ( WordPress
verwendet PHP
, um die erforderlichen Seiten zu generieren, die zum Anwendungsteil gehören) #🎜🎜##🎜🎜# Unabhängig davon, welche Art von Anwendung der Anwendungsteil ausführt, Verarbeitung Die Teile von http
-Verbindungen sind fast gleich, daher gibt es Middlewares, die speziell http
-Verbindungen verarbeiten. Derzeit sind Apache
und die am häufigsten verwendeten Nginx. #🎜🎜##🎜🎜#Apache#🎜🎜##🎜🎜#Der offizielle Name ist „<code>Apache HTTP Server
“, eine Open-Source-HTTP
-Server-Middleware. Das 1995 gegründete Unternehmen war einst führend im Bereich HTTP
-Dienste mit einer großen Anzahl von Benutzern und umfangreichen Community-Ressourcen. Einer der Vorteile von Apache
ist die einfache Integration mit CMS-Software wie Wordpress
. Sie können mit nur einfachen Einstellungen eine CMS-basierte Website erstellen. #🎜🎜##🎜🎜#Apaches internes Verarbeitungsmodell#🎜🎜##🎜🎜#In Bezug auf die interne Struktur verfolgt Apache
einen Multiprozessansatz. Jedes Mal, wenn eine Verbindung besteht, entsteht ein neuer Für diese Verbindung wird eine Verbindung geöffnet, die der Verarbeitung von Anfragen auf dieser Verbindung gewidmet ist, bis die Verbindung endet. Der Vorteil davon ist: #🎜🎜#Apache
erstellt häufig eine große Anzahl von Prozessen, die zu viele Speicherressourcen belegen. #🎜🎜#C10K
C ist der Client (Client), und 10K bezieht sich auf 10.000, das heißt, unabhängig davon Unabhängig davon, wie hoch die Serverleistung und die Netzwerkbandbreite sind, ist es für Apache
schwierig, mehr als 10.000 Verbindungen gleichzeitig zu verarbeiten. #🎜🎜##🎜🎜#Nginx#🎜🎜##🎜🎜# wird als Engine-X
ausgesprochen und wird wie Apache
auch für HTTP verwendet
Open-Source-Middleware für Dienste, geboren im Jahr 2004. Nginx
hat eine kürzere Geschichte als Apache
, aber gerade weil es ein Nachzügler ist, hat Nginx
die Lektionen von Apache
gelernt >. In den frühen Phasen des Entwurfs wurden Effizienzaspekte bei der Handhabung einer großen Anzahl von Verbindungen berücksichtigt und Probleme wie C10K
gelöst, die mit der zunehmenden Größe des Internets auftraten. #🎜🎜##🎜🎜#Das interne Verarbeitungsmodell von Nginx#🎜🎜##🎜🎜#Nginx
verwendet nicht blockierende E/A
und asynchrone nachrichtengesteuerte Methoden, d. h. in Eine Schleife wird in einem Thread namens worker
verwendet, um in der Warteschlange befindliche Verbindungsanforderungen zu verarbeiten. Je nach Hardwarebedingungen können mehrere Worker
-Threads eingerichtet werden, um die Kernressourcen der CPU
voll auszunutzen. #🎜🎜#Apache
. #🎜🎜#Nginx
ist diese Methode nicht ohne Mängel. #🎜🎜#CPU
-Kerne gering ist und nicht genügend Worker
-Threads vorhanden sind. #🎜🎜#AMD
steigt die Anzahl der CPUAuch die Zahl der Code-Kerne nimmt immer mehr zu, die Mängel von <code>Nginx
reichen aus, um kompensiert zu werden, und die Vorteile einer hohen Effizienz werden immer offensichtlicher. #🎜🎜##🎜🎜#Umfassender Vergleich#🎜🎜##🎜🎜#Apache Nginx
hat eine begrenzte Verarbeitungsleistung von 10-100 Mal. Wird es durch komplexe Aufgaben blockiert? der Schwierigkeitsgrad? Es ist relativ einfach. Es gibt relativ wenige komplexe Community-Ressourcen die gleiche Ebene wie Apache
. Bei großen Websites mit einer großen Anzahl von Besuchen können Sie sehen, dass der Anteil von Nginx
umso höher ist, je höher die Anzahl der Besuche ist. Dies bestätigt auch von außen die überlegene Leistung von Nginx
bei der Bewältigung einer großen Anzahl von Zugriffen. #🎜🎜##🎜🎜#Lastausgleich#🎜🎜##🎜🎜#Nginx
Neben der Verwendung als HTTP-Server wird seine leistungsstarke Reverse-Proxy-Funktion auch häufig als Lastausgleichsfront verwendet -End-Server, der nach und nach hardwarebasierte Load Balancer ersetzt. #🎜🎜##🎜🎜# In Nginx
können mehrere Backend-Server konfiguriert werden, die nach Erhalt der HTTP
-Anfrage bestimmte Regeln befolgen. Polling, IP-Hashing, Prioritätsrandomisierung usw. leiten die Anfrage an den Back-End-Server weiter, um eine durchschnittliche oder gewichtete Lastverteilung auf mehrere Server zu erreichen. #🎜🎜#Gleichzeitig kann es als Lastausgleichs-Frontend auch die vom Back-End zurückgegebenen Daten zwischenspeichern, um den Back-End-Server zu entlasten. Das Front-End verwendet Nginx
für den Lastausgleich, um die Anzahl der Verbindungen zu jedem Server zu begrenzen, und es ist nicht ungewöhnlich, dass auf dem Back-End-Server Apache
ausgeführt wird. Nginx
做负载均衡限制每个服务器的连接数,后端服务器运行Apache
的模式也并不少见。
硬件负载均衡器的业界大佬F5 networks
在2019年收购了Nginx
,推出了包含收费服务的负载均衡解决方案Nginx+
F5-Netzwerke
erwarb Nginx
im Jahr 2019 und brachte eine Load-Balancing-Lösung Nginx+
auf den Markt, die kostenpflichtige Dienste umfasst >. 🎜Das obige ist der detaillierte Inhalt vonWelche Engine ist besser, Apache HTTP oder Nginx?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!