Il leap second mette nei guai Cloudflare
Un solo secondo può fare la differenza, è questo quello che devono aver pensato a Cloudflare poche ore dopo l’arrivo del 2017. Esattamente come accaduto a Cenerentola a mezzanotte, anche Cloudflare ha perso la scarpetta sulla scalinata che conduceva all’anno nuovo: il content delivery network del cloud provider è rimasto per alcune ore offline a causa del leap second.
Cos’è il leap second
Il leap second (o secondo intercalare in italiano) è un aggiustamento temporale applicato al tempo coordinato universale (UTC) per mantenerlo allineato al giorno solare medio. Generalmente viene applicato quando la differenza (detta DUT1) fra il tempo solare (UT1) e il tempo degli orologi (UTC) si avvicina in valore assoluto agli 0,6 secondi, in modo da garantire che la DUT1 rimanga in un intervallo compreso tra -0,9 e +0,9 secondi.
Il primo leap second venne introdotto il 30 giugno del 1972 e da allora è stato mano a mano incrementato secondo le esigenze: non esiste infatti una regola precisa che stabilisca l’introduzione di un nuovo secondo ogni determinato numero di mesi, poiché la frequenza di rotazione della Terra non è predicibile sul lungo periodo.
Il contesto del disservizio
Ma com’è possibile che questo aggiustamento temporale dovuto alle leggi della fisica abbia mandato in tilt i server di Cloudflare? Bisogna precisare che il problema ha riguardato soprattutto coloro che utilizzano per la risoluzione DNS il resolver CNAME (meno dell’1% sul totale delle query) in grado di identificare l’indirizzo IP del web server di origine della richiesta tramite un lookup collegato a un Reverse DNS.
Il DNS proxy RRDNS di Cloudflare è in grado di tenere traccia delle performance dei resolver interni, dando di volta in volta priorità a quello più performante nella risposta alle domande del client. Tuttavia questo DNS, come molti altri, per calcolare data e orario utilizza il linguaggio la funzione Go’s time.now() del linguaggio di programmazione Go: questa funzione non prevede per il calcolo della data e dell’orario l’utilizzo di un timer monotonic cioè di un timer in grado di conteggiare i secondi in modo indipendente, senza risentire delle eventuali modifiche d’impostazione apportate dall’utente nel sistema.
Nel codice utilizzato dal resolver RRDNS rtt può essere un valore negativo se time.Now() fosse stato un valore precedente a start (che a sua volta è un parametro stabilito utilizzando time.Now()
Questo codice come abbiamo detto non ha nessun tipo di malfunzionamento se il tempo procede in avanti. Se tuttavia sul resolver vengono effettuate modifiche mentre una risoluzione è in corso, il tempo trascorso verrà segnalato come valore negativo, rendendo quindi impossibile al sistema la condizione per effettuare la risoluzione.
La modifica del carattere che può fare davvero la differenza
Una precauzione adottabile quando si utilizzano dei resolver di questo tipo – cioè non monotonici – è verificare sempre che la differenza tra il tempo in cui viene inoltrata la richiesta e la sua risoluzione sia congelata prima che sul server vengano apportate modifiche ai parametri di tempo. In questo modo è possibile normalizzare la query di chiamata evitando il verificarsi di errori e problemi.
In conclusione possiamo affermare che prestare maggiore attenzione nell’utilizzo del codice avrebbe evitato questi disservizi. Se si sta utilizzando una sorgente di tempo, soprattutto per misurare il tempo trascorso per programmare azioni come la pulizia o l’avvio di determinate funzioni, il timer utilizzato deve essere monotonic. Se la piattaforma o la libreria utilizzata non è in grado di fornire un timer di questo tipo, è consigliabile crearne una vostra, inserendo il timer correttivo nel codice.
Tutto come previsto invece per i clienti che utilizzano i servizi CDN di neen: i festeggiamenti per l’anno nuovo sono andati secondo i piani!
Grazie al network globale di neen hai a disposizione più di 150 PoP strategicamente distribuiti in 5 continenti e oltre 35 paesi, per garantire al tuo sito tempi di caricamento più veloci e migliori risultati di indicizzazione SEO. I PoP italiani sono posizionati sugli Internet Exchange più importanti. I DNS di neen sono erogati attraverso name servers distribuiti su tutti i continenti. Il servizio è disponibile in modalità del provisioning, attraverso il pannello di controllo neen.do o in modalità fully managed.
Per ulteriori informazioni su tutti i servizi CDN di neen scrivi a salesteam@neen.it o chiamaci al numero 0245485420.