Ciao, e benvenuto nella sesta puntata della trentacinquesima stagione. Nella scorsa puntata abbiamo visto il bilanciamento del carico, uno dei compiti che nginx svolge alla porta d'ingresso. Oggi allarghiamo lo sguardo, e capiamo un'idea di fondo, elegante, che spiega perché nginx alla porta finisca per fare tanti mestieri diversi: la porta d'ingresso è il posto naturale dove concentrare tutti gli affari di confine. Cioè tutti quei compiti che riguardano la gestione delle richieste al confine con l'esterno, e che è saggio togliere all'applicazione vera, così che lei possa concentrarsi solo sul suo lavoro. Oggi capiamo questa idea, e i tanti mestieri che ne discendono.
Partiamo dal distinguere due tipi di lavoro, perché è la chiave di tutto. Quando arriva una richiesta a un sito, ci sono due tipi di lavoro molto diversi da fare. Da un lato c'è il lavoro di fondo, il cuore: capire cosa vuole il visitatore ed elaborare la risposta vera, il contenuto, la logica dell'applicazione. Questo è il mestiere dell'applicazione. Dall'altro lato ci sono tanti compiti di confine: ricevere la connessione, gestire la sicurezza, controllare che la richiesta non sia un abuso, magari servire subito un file già pronto, comprimere la risposta per farla viaggiare più leggera. Questi compiti non sono il cuore dell'applicazione: sono affari di confine, che riguardano il maneggiare le richieste all'ingresso, prima e intorno al lavoro vero.
Voglio farti apprezzare l'idea saggia che nginx incarna, perché è un bel principio di ordine. L'idea è questa: separare i compiti di confine dal lavoro di fondo, e concentrare tutti i compiti di confine in un unico posto, la porta d'ingresso, cioè nginx. Così l'applicazione vera, dietro, non deve occuparsi di tutti quegli affari di confine: se ne occupa nginx, alla porta, per tutti. L'applicazione resta libera, pulita, concentrata solo sul suo cuore, la sua logica, il suo contenuto. E nginx, alla porta, si fa carico di tutto il resto, di tutti gli affari che avvengono al confine con l'esterno. È una divisione netta e sana: al cuore l'applicazione, al confine nginx.
Voglio darti l'immagine che rende chiara questa divisione, perché la conosci: la reception di un grande edificio. Pensa alla reception all'ingresso di un grande edificio di uffici. La reception si occupa di tutto ciò che riguarda l'ingresso e il confine con l'esterno: accoglie chi arriva, controlla chi entra, gestisce la sicurezza, ritira i pacchi, dà indicazioni, filtra i visitatori. Così, chi lavora negli uffici dentro non deve occuparsi di nulla di tutto questo: può concentrarsi solo sul proprio lavoro, mentre la reception gestisce tutti gli affari di confine. nginx è la reception del sito: si fa carico di tutti i compiti di confine all'ingresso, così che l'applicazione dentro possa pensare solo al suo mestiere. Ogni affare di confine si concentra alla reception.
Voglio elencarti alcuni di questi mestieri di confine, perché ti fa capire quanto sia versatile la porta. Alla porta, nginx può fare molte cose. Può servire direttamente i file già pronti, come le immagini, in modo velocissimo, senza disturbare l'applicazione dietro per cose semplici. Può comprimere le risposte, cioè impacchettarle in modo più leggero, così che viaggino più in fretta verso il visitatore. Può mettere un limite alle richieste, per proteggere dagli abusi e dai sovraccarichi, bloccando chi bussa troppo forte e troppo spesso. Può distribuire il traffico, come abbiamo visto. E, come vedremo, può occuparsi della sicurezza e del ricordare le risposte. Tutti mestieri di confine, concentrati in un unico posto efficiente.
Voglio farti apprezzare perché questa concentrazione sia un buon disegno, perché è una lezione ricorrente. Concentrare i compiti di confine in nginx è saggio per due ragioni. Primo: tiene l'applicazione semplice e concentrata, liberata da tutti gli affari di confine, che sarebbero una distrazione dal suo cuore. Un'applicazione che deve pensare solo alla sua logica è più semplice, più pulita, più facile da costruire e mantenere. Secondo: mette quei compiti nel posto giusto, cioè in uno strumento specializzato ed efficiente per farli. nginx è fatto apposta per gestire il confine, e lo fa meglio di quanto farebbe l'applicazione. Separare le competenze, e mettere ciascuna nel posto giusto: è un principio di buon disegno che abbiamo incontrato tante volte, e che qui prende la forma della porta d'ingresso.
Voglio collegare questo a un'idea che abbiamo già celebrato. Ricordi, parlando del web, quanto sia importante separare le cose di natura diversa invece di mescolare tutto? Qui è la stessa idea: separare il confine dal cuore, gli affari dell'ingresso dalla logica dell'applicazione. Mettere la gestione del confine dentro l'applicazione la renderebbe ingarbugliata. Separare, e concentrare il confine nella porta, tiene tutto ordinato: ognuno fa il suo, nel suo posto. Separare le competenze, mettendo ciascuna dove è giusta, è una delle vie maestre del buon disegno, nel software come in nginx.
Per oggi ci fermiamo qui. La porta d'ingresso è il posto naturale dove concentrare tutti gli affari di confine: quei compiti che riguardano il maneggiare le richieste all'ingresso, distinti dal lavoro di fondo dell'applicazione. Separando il confine dal cuore, e concentrando il confine in nginx, l'applicazione resta semplice e concentrata sul suo mestiere, mentre nginx, come la reception di un edificio, si fa carico di servire file, comprimere, limitare gli abusi, distribuire, e altro ancora. È un buon disegno, la stessa saggezza del separare le competenze mettendo ciascuna nel posto giusto. Nella prossima puntata approfondiamo due mestieri di confine importanti: le serrature e la memoria pronta, cioè cifratura e cache. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.