Ciao, e benvenuto nella quinta puntata della trentacinquesima stagione. Nella scorsa puntata abbiamo visto nginx come porta d'ingresso davanti a un'applicazione. Oggi vediamo uno dei compiti più importanti che questa posizione al confine rende possibile, e che è cruciale per i grandi siti: il bilanciamento del carico. Cioè distribuire le richieste in arrivo tra più applicazioni, tra più server, così che nessuno venga sommerso, e così che il sito possa crescere e restare in piedi. Oggi capiamo cos'è il bilanciamento del carico, e perché è ciò che permette ai grandi siti di reggere e di non cadere.
Partiamo dal problema che il bilanciamento risolve, perché è concreto. Immagina che il tuo sito diventi molto popolare, con tantissimo traffico. Una singola applicazione, un singolo server dietro, a un certo punto non basta più: viene sommerso dalle richieste, rallenta, e alla fine cade. Un solo server ha un limite a quanto traffico può reggere. Come fai a gestire più traffico di quanto un singolo server può sopportare? La risposta è semplice e potente: non usare un solo server, ma tanti. Fai girare più copie della tua applicazione, su più server, e distribuisci il traffico tra tutti. Ma qualcuno deve occuparsi di distribuirlo, di decidere quale richiesta va a quale server. E quel qualcuno, che sta davanti a tutti, è nginx.
Voglio spiegarti come nginx fa questa distribuzione, perché nasce dalla sua posizione. Siccome nginx sta davanti, alla porta, tutte le richieste passano da lui. Questo lo mette nella posizione perfetta per smistarle. Dietro nginx metti non una, ma più copie della tua applicazione, su più server. E nginx, man mano che arrivano le richieste, le distribuisce tra questi server: questa richiesta al primo server, la prossima al secondo, un'altra al terzo, e così via, spartendo il carico in modo equilibrato tra tutti. Nessun server riceve tutto il traffico: ognuno ne riceve solo una parte, quella che nginx gli manda. Così il peso è distribuito, bilanciato, tra tutti i server dietro. Questo è il bilanciamento del carico.
Voglio darti l'immagine che rende chiara questa idea, perché è intuitiva: chi smista i clienti agli sportelli. Immagina un ufficio con molti sportelli aperti, e una persona all'ingresso che accoglie i clienti in arrivo e li manda, uno per uno, agli sportelli liberi: tu al primo, tu al secondo, tu al terzo. Così i clienti si distribuiscono tra tutti gli sportelli, e nessuno sportello si ingolfa mentre gli altri restano vuoti. Senza quella persona all'ingresso, tutti si accalcherebbero su un solo sportello. nginx, nel bilanciamento del carico, è proprio quella persona all'ingresso: manda ogni richiesta a un server disponibile, distribuendo il carico, così che nessun server si ingolfi. È il vigile che dirige il traffico verso le corsie libere.
Voglio farti apprezzare le due grandi cose che il bilanciamento sblocca, perché sono fondamentali. La prima è la crescita. Con il bilanciamento, se il traffico aumenta, puoi semplicemente aggiungere altri server dietro nginx, e lui distribuirà il carico anche su quelli. Puoi crescere aggiungendo server, quasi senza limite, per reggere qualunque quantità di traffico. È il modo in cui i grandi siti gestiscono un traffico gigantesco: non con un server enorme, ma con tanti server, coordinati dalla porta d'ingresso. La seconda cosa è la resistenza ai guasti. Se uno dei server dietro si guasta e cade, nginx se ne accorge e semplicemente smette di mandargli richieste, dirottandole sui server sani. Il sito resta in piedi, perché gli altri server continuano a servire. Un server cade, ma il servizio no.
Voglio soffermarmi su questa seconda cosa, la resistenza ai guasti, perché è preziosa e ci riporta a un tema noto. Grazie al bilanciamento, il sito non dipende più da un singolo server: se uno cade, gli altri reggono. Questo elimina il punto debole unico, quel singolo elemento che, guastandosi, farebbe cadere tutto. È la stessa saggezza che avevamo ammirato parlando del DNS: distribuire, non concentrare, rende robusti, perché non c'è più un unico punto la cui rottura porta giù tutto. Il bilanciamento del carico porta questa robustezza dentro il singolo sito: tanti server, coordinati dalla porta, così che la caduta di uno non fermi il servizio. Distribuire per resistere, oltre che per crescere.
Voglio chiudere legando tutto alla posizione di nginx. Il bilanciamento del carico è possibile proprio perché nginx sta al confine, e tutte le richieste passano da lui. Solo chi sta alla porta, e vede passare tutto, può distribuire il traffico tra i server dietro. La posizione di porta d'ingresso, che avevamo visto proteggere l'applicazione, si rivela anche il posto perfetto per distribuire il carico e garantire crescita e robustezza. Concentrando i compiti di confine nella porta, nginx rende possibili cose preziose per l'intero sistema.
Per oggi ci fermiamo qui. Il bilanciamento del carico è distribuire le richieste in arrivo tra più server dietro nginx, così che nessuno venga sommerso, come chi smista i clienti tra molti sportelli liberi. Siccome nginx sta davanti e vede passare tutto, è nella posizione perfetta per farlo. Questo sblocca due cose fondamentali: la crescita, perché puoi reggere più traffico aggiungendo server dietro; e la resistenza ai guasti, perché se un server cade, nginx dirotta il traffico sugli altri, e il sito resta in piedi. È la stessa robustezza del distribuire che avevamo visto nel DNS, portata dentro il sito. Nella prossima puntata vediamo gli altri mestieri della porta d'ingresso. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.