nginx è noto per il suo modello di elaborazione basato sugli eventi, che lo distingue per efficienza e prestazioni, specialmente in ambienti con un alto numero di connessioni simultanee. Questo modello di elaborazione consente a nginx di gestire migliaia di connessioni contemporanee con un uso relativamente basso di risorse.
nginx utilizza un'architettura orientata agli eventi e al non-blocking I/O per gestire le richieste. Questo significa che può eseguire operazioni di input/output (I/O) senza dover bloccare l'esecuzione del server, permettendo così di gestire molteplici connessioni contemporaneamente all'interno di un singolo processo worker.
nginx crea diversi processi worker all'avvio, ciascuno dei quali è in grado di gestire migliaia di connessioni client. Il numero di processi worker è generalmente configurato per corrispondere al numero di core della CPU disponibili, per ottimizzare l'uso delle risorse di sistema.
Connessioni
Single-threaded per processo: Ogni processo worker in nginx è single-threaded e gestisce più connessioni. Questo elimina la necessità di bloccare operazioni costose come la creazione di nuovi thread o il cambio di contesto tra i thread, che possono essere risorse intensive.
Epoll/kqueue: nginx sfrutta meccanismi di polling efficienti come epoll su Linux e kqueue su BSD. Questi meccanismi permettono a nginx di monitorare più descrittori di file (come le connessioni socket) per vedere se sono pronti per l'I/O. Questo è molto più efficiente rispetto ai modelli tradizionali basati su selezione o polling che controllano ogni connessione individualmente.
Non-blocking I/O: Quando nginx gestisce le richieste, utilizza operazioni non-blocking. Questo significa che se una richiesta di I/O, come la lettura di un file o la scrittura in una rete, non può essere completata immediatamente, nginx non aspetterà che l'operazione finisca. Invece, Nginz continuerà a processare altre richieste e controllerà lo stato dell'operazione in attesa in un secondo momento. Questo migliora notevolmente l'efficienza, riducendo i tempi morti del processo worker.
Vantaggi
- Scalabilità: Il modello orientato agli eventi di Nginz permette di scalare orizzontalmente e verticalmente con grande efficienza, gestendo un alto numero di connessioni simultanee con meno risorse hardware.
- Prestazioni: Rispetto ad altri server che utilizzano un modello basato su thread o su processi, nginx offre prestazioni superiori sotto carico, in quanto gestisce meglio le risorse disponibili.
- Affidabilità: Meno dipendenze da operazioni di blocking riducono la probabilità di rallentamenti o di blocchi del server sotto carico elevato.
In conclusione, il modello ad eventi di nginx è una delle chiavi del suo successo e della sua popolarità in ambienti di hosting ad alta performance, come server di contenuti statici, reverse proxy e bilanciatori di carico.