Apache ed Nginx sono i due web server open source più utilizzati: insieme servono oltre il 50% del traffico internet.
Sebbene i due abbiano molte caratteristiche in comune, sarebbe un errore pensare che siano intercambiabili, è importante comprendere in quali situazioni usare l’uno o l’altro.
Apache
Apache HTTP Server è stato creato da Robert McCool nel 1995 e, dal 1999 è stato sviluppato sotto direzione della Apache Software Foundation. Dal 1996 Apache è il web server più popolare. Grazie a questa sua popolarità è disponibile una vasta documenazione. Originariamente, con Apache era possibile servire siti web dinamici solo attraverso i moduli, ogni modulo richiedeva molta memoria.
La principale differenza tra Nginx e Apache risiede nella gestione delle connessioni. Apache segue un approccio process-driven ovvero, ogni richiesta client viene elaborata da un processo separato (thread). Supponiamo sia presente un solo thread (single-threading), se bisogna elaborare richieste che necessitano di operazioni di scrittura e letuura, queste devono essere per forza essere elaborate sequenzialmente, prima una poi l’altra. Ogni richiesta rimane in coda fin quando non si finisce con la richiesta precedente. Per agirare l’ostacolo si possono avviare più processi single threading parallelamente, questo però richiede un uso elevato di risorse.
Si può ricorrere all’utilizzo di meccanismi multithreading. In questo caso, per ogni processo vengono attivati più thread, cosଠfacendo si riesce a compensare l’elevato fabisogno di risorse dell’architettura process-driven.
I meccanismi per l’elaborazione parallela si possono integrare sulle richieste client su Apache tramite uno dei tre moduli multi-processing (MPM): mpm_prefork, mpm_worker, mpm_event. Mediante questi moduli, Apache riesce a gestire le richieste in maniera concorrente, cioè risponde contemporaneamente a più richieste client tramite thread aggiuntivi.
Sia che si ricorra al multithreading o a più processi singlethread concorrenti, la domanda di risorse aggiuntive è elevata, un fattore che diventa limitante nell’ambito del ridimensionamento del server Apache.
A seconda di quale modulo venga utilizzato, Apache risolve un problema di concorrenza, cioè la risposta contemporanea di più richieste client, tramite processi aggiuntivi o thread.
L’enorme richiesta di risorse dell’approccio di un processo per connessione deriva dal fatto che per ogni processo aggiuntivo deve essere messo a disposizione un proprio ambiente di runtime. Ciò richiede l’assegnazione del tempo di CPU e della memoria separata. Inoltre ogni modulo Apache, che deve essere messo a disposizione in un processo worker, viene caricato separatamente per ogni processo. Invece i thread si spartiscono un ambiente di esecuzione (il programma) e lo spazio di indirizzamento nella memoria. L’overhead di thread aggiuntivi è cosଠnotevolmente inferiore rispetto a quello dei processi. Ma anche il multithreading richiede un’elevata capacità di calcolo, quando si tratta di commutazione di contesto (context switch).
In passato con Apache era possibile servire siti web dinamici solo attraverso i moduli. Ad esempio, per servire un sito web basato su PHP, Apache usava un modulo chiamato mod_php (modulo, che molti siti usano ancora oggi) e quel modulo usava molta memoria. In alternativa vengono utilizzati i meccanismi di multithreading. A differenza del single threading dove in ogni processo è a disposizione un unico thread per rispondere alle richieste del client, il multithreading dà la possibilità di attivare più thread nello stesso processo. Visto che i thread su Linux, essendo dei processi, hanno bisogno di meno risorse, il multithreading permette di compensare il grande fabbisogno di risorse dell’architettura basata sui processi del server Apache.
Il web server Apache segue un approccio in cui ogni richiesta client viene elaborata da un processo separato o thread. Nel caso di un unico thread (single threading), la modalità di funzionamento originaria del server Apache HTTP, sorgono prima o poi dei problemi di blocco delle periferiche I/O.
Nginx
👇 Contenuti da non perdere 👇
- Cellulari 📱
- intelligenza artificiale 👁
- Meteo
- Sicurezza & Privacy 👁
- WordPress 🤵
- 💬 Il nostro canale Telegram: iscriviti
- 🟠 Cosa vuol dire modeling – Wikilost
- 🔴 Inserire un articolo in più categorie penalizza lato SEO?
- 🔴 Significato «hackerato»