Prendiamo l'approccio pragmatico.
Tutti questi limiti sono elementi hardcoded e progettati nel secolo scorso quando l'hardware era lento e costoso. Siamo nel 2016 ora, un tostapane wall-mart medio può elaborare più richieste rispetto ai valori predefiniti.
Le impostazioni predefinite sono in realtà pericolose. Avere centinaia di utenti su un sito Web non è niente di impressionante.
worker_process
Un'impostazione correlata, spiegiamola mentre siamo sull'argomento.
nginx come bilanciamento del carico:
- 1 lavoratore per il bilanciamento del carico HTTP.
- 1 lavoratore per core per il bilanciamento del carico HTTPS.
nginx come server web:
Questo è difficile.
Alcune applicazioni / framework / middleware (ad esempio php-fpm) vengono eseguiti al di fuori di nginx. In tal caso, 1 lavoratore nginx è sufficiente perché di solito è l'applicazione esterna che sta elaborando e consumando le risorse.
Inoltre, alcune applicazioni / framework / middleware possono elaborare solo una richiesta alla volta ed è inutile sovraccaricarle.
In generale, 1 lavoratore è sempre una scommessa sicura.
Altrimenti, puoi mettere un lavoratore per core se sai cosa stai facendo. Considererei tale percorso come un'ottimizzazione e consiglierei benchmarking e test adeguati.
worker_connections
La quantità totale di connessioni è worker_process * worker_connections
. Metà in modalità bilanciamento del carico.
Ora stiamo raggiungendo la parte del tostapane. Esistono molti limiti di sistema sottovalutati:
- ulimits è 1k max di file aperti per processo su linux (1k soft, 4k hard su alcune distro)
- i limiti di sistema sono quasi gli stessi di ulimits.
- L'impostazione predefinita di nginx è 512 connessioni per lavoratore.
- Potrebbero essercene di più: SELinux, sysctl, supervisord (ogni versione di distro + è leggermente diversa)
1k worker_connections
L'impostazione predefinita è mettere 1k ovunque.
È abbastanza alto da essere più di quanto la maggior parte dei siti interni e sconosciuti abbia mai incontrato. È abbastanza basso da non superare altri limiti di sistema.
10k worker_connections
È molto comune avere migliaia di clienti, soprattutto per un sito Web pubblico. Ho smesso di contare la quantità di siti Web che ho visto andare giù a causa delle basse impostazioni predefinite.
Il minimo accettabile per la produzione è 10k. I limiti di sistema correlati devono essere aumentati per consentirlo.
Non esiste un limite troppo alto (un limite non ha alcun effetto se non ci sono utenti). Tuttavia, un limite troppo basso è una cosa molto reale che si traduce in utenti rifiutati e in un sito morto.
Più di 10k
10k è facile e facile.
Potremmo stabilire un limite arbitrario di 1000kk (dopo tutto è solo un limite) ma non ha molto senso pratico, non otteniamo mai quel traffico e non potremmo comunque accettarlo.
Atteniamoci a 10k come impostazione ragionevole. I servizi che stanno andando (e possono davvero fare) di più richiederanno una messa a punto e un benchmarking speciali.
Scenario speciale: utilizzo avanzato
A volte sappiamo che il server non ha molte risorse e ci aspettiamo picchi di cui non possiamo fare molto. Preferiamo rifiutare gli utenti piuttosto che provare. In tal caso, inserisci un limite di connessione ragionevole e configura i messaggi di errore e la gestione corretti.
A volte, i server back-end funzionano bene e bene, ma solo fino a un certo carico , niente di più e tutto va rapidamente a sud. Preferiremmo rallentare piuttosto che far crashare i server. In tal caso, configurare l'accodamento con limiti rigorosi, lasciare che nginx tamponi tutto il calore mentre le richieste vengono scaricate a un ritmo limitato.