Maison  >  Article  >  Opération et maintenance  >  Quel moteur est le meilleur, Apache HTTP ou Nginx ?

Quel moteur est le meilleur, Apache HTTP ou Nginx ?

王林
王林avant
2023-05-11 15:49:06867parcourir

Middleware HTTP

Lorsque nous entrons un lien web dans le navigateur, le navigateur envoie une requête au serveur correspondant en fonction du protocole de transport HTTP(s) Après recevant la requête correspondante, le serveur la traite et renvoie les informations correspondantes au navigateur. Le navigateur analyse ensuite le contenu en http et l'affiche sous la forme d'une page web. HTTP(s)传输协议向相应的服务器发送一个请求,服务器收到相应的请求后经过处理,返回相应的信息给浏览器,然后由浏览器解析http中的内容,以网页的形式表现出来。

服务器负责接收请求,并在处理之后返回相应的数据,而其中又可以细分为处理http连接的服务部分和执行服务内容的应用部分(WordPress使用PHP生成需要的页面,就属于应用部分)

而不论应用部分执行的是何种应用,处理http连接的部分几乎是相同的,所以出现了专门处理http连接的中间件,目前最常见的是ApacheNginx

Apache

正式名称是“Apache HTTP Server”,是一款开源的HTTP服务器中间件,诞生于1995年,曾经是HTTP服务领域的龙头老大,拥有大量的用户和丰富的社区资源。Apache的一大优点就是方便与Wordpress等CMS软件进行集成,只需要简单的设定就能搭建一个基于CMS的网站。

Apache的内部处理模型

内部构造方面,Apache采用多进程的方式,每有一个连接就会为这个连接开辟一个进程,专门用于处理这个连接上的请求,直到连接结束。这样做的好处是:

  • 来自不同客户端的连接会立刻得到相应且互不干扰,而且不会因为某一个服务占用了较长的时间而使其它的连接得不到响应。

但是缺点也是显而易见的:

  • 当同时访问数比较多的时候,Apache会建立大量的进程,占用过多的内存资源。

  • 大量线程间的调度也会造成CPU处理能力的大量浪费。

由此产生了被称为C10K的难题,C即客户端(Client),10K是指1万,即不论服务器的性能和网络带宽有多高,Apache都难以同时处理1万个以上的连接。

Nginx

读作Engine-X,和Apache一样也是用于HTTP服务的开源中间件,诞生于2004年。NginxApache的历史要短,但是正因为是后来者,Nginx吸取了Apache的教训,在设计初期就考虑到了处理大量连接时的效率问题,解决了诸如C10K等随着互联网规模壮大而产生的难题。

Nginx的内部处理模型

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

Le serveur est chargé de recevoir les requêtes et de renvoyer les données correspondantes après traitement, qui peuvent être subdivisées en la partie service qui traite les connexions http et la partie application qui exécute le contenu du service ( WordPress utilise PHP pour générer les pages requises, qui appartiennent à la partie application) #🎜🎜##🎜🎜# Quel que soit le type d'application exécutée par la partie application, le traitement Les parties de la connexion http sont presque les mêmes, c'est pourquoi un middleware est apparu qui gère spécifiquement la connexion http. Actuellement, les plus courants sont Apache et <code>Nginx. #🎜🎜##🎜🎜#Apache#🎜🎜##🎜🎜#Le nom officiel est "<code>Apache HTTP Server", qui est un middleware de serveur HTTP open source. Née en 1995, elle était autrefois leader dans le domaine des services HTTP, avec un grand nombre d'utilisateurs et de riches ressources communautaires. L'un des avantages de Apache est qu'il est facile à intégrer à un logiciel CMS tel que Wordpress. Vous pouvez créer un site Web basé sur un CMS avec uniquement des paramètres simples. #🎜🎜##🎜🎜#Le modèle de traitement interne d'Apache#🎜🎜##🎜🎜#En termes de structure interne, Apache adopte une approche multi-processus. Chaque fois qu'il y a une connexion, une nouvelle. une connexion sera ouverte pour cette connexion. Processus dédié au traitement des requêtes sur cette connexion jusqu'à la fin de la connexion. L'avantage de ceci est : #🎜🎜#
  • #🎜🎜#Les connexions de différents clients recevront une réponse immédiate sans interférer les unes avec les autres et ne seront pas affectées par un certain service Cela prend beaucoup de temps et les autres connexions ne peuvent pas répondre. #🎜🎜#
#🎜🎜#Mais les défauts sont également évidents : #🎜🎜#
  • #🎜🎜#En comparant le nombre de visites simultanées Souvent, Apache va créer un grand nombre de processus, occupant trop de ressources mémoire. #🎜🎜#
  • #🎜🎜#La planification entre un grand nombre de threads entraînera également un gaspillage important de puissance de traitement du processeur. #🎜🎜#
#🎜🎜# Cela a donné lieu à un problème appelé C10K C est le client (Client), et 10K fait référence à 10 000, c'est-à-dire, peu importe. Quelles que soient les performances du serveur et la bande passante du réseau, il est difficile pour Apache de gérer plus de 10 000 connexions en même temps. #🎜🎜##🎜🎜#Nginx#🎜🎜##🎜🎜# se prononce comme Engine-X, et comme Apache, il est également utilisé pour HTTP Middleware open source pour services, né en 2004. Nginx a une histoire plus courte que Apache, mais précisément parce qu'il est un retardataire, Nginx a retenu les leçons de Apache >. Dès les premières étapes de la conception, les problèmes d'efficacité liés à la gestion d'un grand nombre de connexions ont été pris en compte, résolvant des problèmes tels que C10K qui sont apparus à mesure que l'échelle d'Internet s'est développée. #🎜🎜##🎜🎜#Le modèle de traitement interne de Nginx#🎜🎜##🎜🎜#Nginx adopte des E/S non bloquantes et des méthodes asynchrones basées sur les messages, c'est-à-dire in Une boucle est utilisée dans un thread appelé worker pour gérer les demandes de connexion en file d'attente. Selon les conditions matérielles, plusieurs threads worker peuvent être définis pour utiliser pleinement les ressources de base du CPU. #🎜🎜#
  • #🎜🎜# Résolvez le problème de la consommation excessive de mémoire et de la faible efficacité de planification lors du traitement d'un grand nombre de connexions, tout en utilisant pleinement tous les cœurs du processeur. La capacité à gérer des connexions simultanées sur le même matériel est 10 à 100 fois supérieure à celle d'Apache. #🎜🎜#
#🎜🎜#Mais Nginx cette méthode n'est pas sans défauts. #🎜🎜#
  • #🎜🎜#Lorsque les performances monocœur du serveur sont mauvaises, un site Web dynamique basé sur CMS peut mettre beaucoup de temps à exécuter une requête . À l'heure actuelle, les demandes des autres clients ne seront pas exécutées immédiatement. Cela sera plus évident lorsque le nombre de cœurs CPU est petit et qu'il n'y a pas suffisamment de threads worker. #🎜🎜#
#🎜🎜# Heureusement, les performances des serveurs sont de plus en plus fortes Sous la houlette de AMD, le nombre de CPUcode> a également augmenté. De plus en plus, les défauts de <code>Nginx suffisent à être compensés, et les avantages d'une haute efficacité deviennent de plus en plus évidents. #🎜🎜##🎜🎜#Comparaison complète#🎜🎜##🎜🎜#Apache Nginx a une puissance de traitement limitée de 10 à 100 fois. Sera-t-il bloqué par des tâches complexes ? le niveau de difficulté ? C'est relativement simple. Il existe relativement peu de ressources communautaires complexes#🎜🎜##🎜🎜#Ces dernières années, la part de marché de Nginx a augmenté, et en 2019 elle a atteint le même niveau que Apache . Pour les grands sites Web avec un grand nombre de visites, vous pouvez constater que plus le nombre de visites est élevé, plus la proportion de Nginx est élevée. Cela confirme également de côté les performances supérieures de Nginx dans la gestion d'un grand nombre d'accès. #🎜🎜##🎜🎜#Load Balancing#🎜🎜##🎜🎜#Nginx En plus d'être utilisé comme serveur HTTP, sa puissante fonction de proxy inverse est également largement utilisée comme façade d'équilibrage de charge -serveur final, remplaçant progressivement les équilibreurs de charge matériels. #🎜🎜##🎜🎜# Plusieurs serveurs backend peuvent être configurés dans Nginx Nginx suivra certaines règles après avoir reçu la requête HTTP (. Polling, hachage IP, randomisation des priorités), etc. transmettent la demande au serveur back-end pour obtenir une répartition moyenne ou pondérée de la charge sur plusieurs serveurs. #🎜🎜#

En même temps, en tant que front-end d'équilibrage de charge, il peut également mettre en cache les données renvoyées par le back-end pour soulager la pression sur le serveur back-end. Le front-end utilise Nginx pour l'équilibrage de charge afin de limiter le nombre de connexions à chaque serveur, et il n'est pas rare que le serveur back-end exécute Apache. Nginx做负载均衡限制每个服务器的连接数,后端服务器运行Apache的模式也并不少见。

硬件负载均衡器的业界大佬F5 networks在2019年收购了Nginx,推出了包含收费服务的负载均衡解决方案Nginx+

Le leader de l'industrie des équilibreurs de charge matériels Réseaux F5 a acquis Nginx en 2019 et a lancé une solution d'équilibrage de charge Nginx+ qui inclut des services payants >. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer