Ciao, e benvenuto nella quinta puntata della trentaquattresima stagione. Nella scorsa puntata abbiamo seguito il viaggio di una domanda lungo l'albero del DNS, e abbiamo visto che, fatto ogni volta, sarebbe lento e sovraccaricherebbe la radice. Oggi vediamo l'idea che risolve questo problema, e che è la seconda grande chiave del funzionamento del DNS: la cache, cioè ricordare le risposte per non doverle chiedere ogni volta. È un'idea semplice ma potentissima, che rende il DNS veloce e capace di reggere il carico del mondo intero. Oggi capiamo come funziona, e il compromesso che porta con sé.
Partiamo dall'idea di base, perché è intuitiva. Se hai appena fatto tutto il viaggio per scoprire il numero corrispondente a un nome, sarebbe uno spreco rifare tutto il viaggio la prossima volta che ti serve lo stesso nome. La risposta, molto probabilmente, è ancora la stessa. Quindi, perché non ricordarla? La cache è esattamente questo: dopo aver trovato una risposta, la si ricorda per un po', così che, la prossima volta che serve quello stesso nome, la risposta sia già lì, pronta, senza bisogno di rifare il viaggio. Non chiedi di nuovo: ricordi. È il principio del ricordare per non ripetere una fatica già fatta.
Voglio spiegarti dove avviene questo ricordare, perché accade a più livelli. Le risposte del DNS vengono ricordate in molti punti lungo la catena. Il tuo stesso computer ricorda le risposte che ha ricevuto di recente. Il risolutore, l'aiutante che fa i viaggi per te e per tanti altri, ricorda le risposte che ha trovato, e le riusa per tutti. Così, quando serve un nome, spesso la risposta è già ricordata da qualche parte vicino a te, e non c'è bisogno di fare il viaggio completo fino alla radice: la trovi già pronta, molto più vicino. Il ricordare è diffuso a più livelli, e questo fa sì che, il più delle volte, la risposta sia già disponibile a portata di mano.
Voglio farti apprezzare quanto questa idea semplice sia potente, perché fa funzionare il DNS. La cache dà due grandi benefici. Il primo è la velocità: siccome le risposte sono spesso già ricordate lì vicino, tradurre un nome è quasi sempre rapidissimo, non serve il viaggio completo. Il secondo, ancora più importante, è che protegge il sistema dal sovraccarico: siccome la maggior parte delle domande trova risposta nelle memorie vicine, senza arrivare fino in cima, la radice e i livelli alti dell'albero non vengono sommersi dalle domande del mondo intero. Ricevono solo una piccola frazione delle richieste, quelle non ancora ricordate da nessuno. La cache è ciò che permette al DNS di reggere il carico enorme del mondo, senza far crollare la radice. È l'ingrediente segreto della sua scalabilità.
Ma ora, con onestà, voglio mostrarti il rovescio della medaglia, il compromesso che il ricordare porta con sé, perché è importante e molto pratico. C'è un problema: se ricordi una risposta per un po', cosa succede quando quella risposta cambia? Se il possessore di un nome decide di cambiare il numero a cui punta, tutte le memorie sparse in giro, che ricordano ancora il vecchio numero, continueranno a dare la vecchia risposta, finché non la dimenticano. Il cambiamento non è istantaneo: ci vuole tempo perché tutte le memorie in giro dimentichino la vecchia risposta e imparino la nuova. Durante questo tempo, alcuni vedono ancora il vecchio, altri già il nuovo. Il ricordare rende veloce il sistema, ma rende lenti i cambiamenti.
Voglio spiegarti bene questo fenomeno, perché ha un nome che chiunque gestisca un sito conosce: la propagazione. Quando cambi dove punta un nome, il cambiamento deve propagarsi, cioè diffondersi, a tutte le memorie del mondo che ricordavano la vecchia risposta, man mano che ognuna dimentica il vecchio e impara il nuovo. Questo richiede tempo, a volte ore. Ecco perché, quando fai un cambiamento nel DNS, non lo vedi subito ovunque. Non è un difetto: è la conseguenza inevitabile del ricordare. La propagazione è il prezzo della cache. Per fortuna, quanto a lungo ricordare ogni risposta si può regolare, bilanciando velocità e prontezza dei cambiamenti.
Voglio farti apprezzare il compromesso profondo che c'è qui, perché è generale. La cache incarna un compromesso che ritroviamo ovunque nei sistemi: ricordare rende veloci, ma rende anche potenzialmente vecchi. Un dato ricordato è a portata di mano, rapido; ma è una fotografia di un momento passato, che potrebbe non essere più vera. Più a lungo ricordi, più sei veloce ma più rischi di essere vecchio; meno ricordi, più sei aggiornato ma più sei lento. È un bilanciamento tra velocità e freschezza, che si ritrova in tantissimi sistemi. Il DNS lo risolve ricordando le risposte per tempi regolabili, scegliendo di essere molto veloce al piccolo prezzo di cambiamenti non istantanei.
Per oggi ci fermiamo qui. La cache, cioè ricordare le risposte per non richiederle ogni volta, è la seconda grande chiave del DNS. Le risposte vengono ricordate a più livelli, dal tuo computer al risolutore, così che il più delle volte siano già pronte lì vicino, senza bisogno del viaggio completo. Questo rende il DNS velocissimo e, soprattutto, protegge la radice dal sovraccarico del mondo intero: è l'ingrediente segreto della sua scalabilità. Il prezzo, con onestà, è che i cambiamenti non sono istantanei: devono propagarsi, man mano che le memorie dimenticano il vecchio. È il compromesso tra velocità e freschezza. Nella prossima puntata vediamo cosa custodisce davvero il DNS, oltre agli indirizzi. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.