Google e il secondo intercalare

Di - 3 July 2012 - in

Poiché la Terra non ha effettivamente un tempo di rotazione fisso come ci piace credere, ci si è accorti, con il miglioramento della costruzione degli orologi, che non è possibile mantenere uno scorrere del tempo costante senza trovarci ad avere grandi differenze tra il tempo segnato dagli orologi e quello effettivo.

Ogni tanto quindi è necessario aggiungere (o togliere, ma questa è una eventualità che non si è mai verificata, a causa del fatto che la Terra tendenzialmente rallenta il suo moto) un secondo al tempo ufficiale. Tale secondo, detto secondo intercalare, viene aggiunto ad intervalli irregolari (anche se mediamente avviene poco meno di una volta l’anno, in tempi recenti molto meno) dipendenti da quanta differenza c’è tra il tempo reale e il tempo convenzionale. Per convenzione, l’aggiunta avviene sempre all’inizio del 31 dicembre o all’inizio del 30 giugno, dal 1972, anno in cui è diventato importante avere un tempo convenzionale internazionale.

Questo fatto crea grandi problemi ai sistemi di rete di grandi dimensioni: tali sistemi, infatti, devono tenere sincronizzate diverse componenti (dispositivi di backup, sistemi di distribuzione di contenuti, sistemi distribuiti di vario genere), e saltare un secondo all’improvviso sarebbe deleterio.

Per ovvi motivi di tempi di trasmissione, parti diverse del sistema riceverebbero il salto in momenti diversi, trovandosi a non segnare lo stesso tempo per intervalli che possono sfiorare il secondo, mandando in crisi tutti i sistemi di sincronizzazione.

I sistemi di rete, infatti, si tengono in sincrono ricevendo frequentemente un segnale tramite un protocollo chiamato NTP (Network Time Protocol), in grado di dare l’ora in maniera molto precisa e tenendo conto dei tempi di trasmissione del segnale, e aggiustando cosí il loro orologio interno. NTP preavvisa, dalla mezzanotte precedente a quella del secondo intercalare, che c’è un secondo intercalare in arrivo. In questo modo i sistemi dovrebbero essere in grado di prevenire in qualche maniera il salto che sta per avvenire e che non avverrà mai su tutte le macchine in contemporanea. NTP, infatti, invia l’ora esatta tenendo conto dei tempi di trasmissione, ma tali tempi ci sono, e quindi l’ora esatta arriva a tutti in momenti differenti.

A questo si aggiunge poi un problema del kernel di Linux (ma non solo) che rischia di gestire male il salto temporale creando errori nei sistemi che fanno girare piú thread in concorrenza.

Il boom della Internet commerciale è avvenuto intorno al 1998 (grande diffusione di Internet Explorer e nascita di Google), e dal 1998 sono stati aggiunti solo quattro secondi (dicembre 1998, dicembre 2005, dicembre 2008, giugno 2012). Troppo pochi per la maggior parte delle dot com per rendersi conto del banale problema che questa cosa porta. Come al solito, dunque, moltissimi grandi siti sono crollati (anche per mezz’ora consecutiva) lo scorso 30 giugno. Social network come LinkedIn, Reddit, Yelp o FourSquare, siti di informazione come Gawker, intere piattaforme di hosting basate su Java e persino l’intero sistema della compagnia aerea Qantas.

Visti i problemi avvenuti per il secondo intercalare precedente alla sua nascita (quello del 2005) Google si è già da subito posta la questione, trovando una soluzione davvero ingegnosa e piuttosto pulita.

I danni generati dal secondo intercalare sono dovuti, come abbiamo detto, al salto decisamente grande, un secondo, che avviene tutto assieme. Salti molto piccoli, nell’ordine dei millisecondi, non genererebbero errori, anche perché sono compresi nei normali errori di trasmissione tra server.

Google ha quindi modificato i propri server NTP interni (che prendono l’orario da quelli centrali: NTP è un sistema gerarchico) in modo tale che aggiungano (o tolgano, se mai servirà), ogni volta che gli viene richiesta l’ora, un piccolo errore. Tale aggiunta avviene nel giorno che precede il salto (che, come detto, viene segnalato da NTP), lungo una finestra di tempo che può anche essere piú breve di un giorno, secondo questa formula:

errore(t)=(1.0-cos(π*t/w))/2.0

dove t è il tempo attuale e w è la finestra di tempo lungo la quale si vuole diluire il passaggio.

In questo modo, i sistemi che chiedono la data ad NTP credono di avere l’orologio interno sbagliato di poco e lo aggiustano. Alla fine della giornata, si troveranno con il secondo già aggiunto, senza che nulla abbia generato problemi.

È anche grazie a soluzioni semplici come questa che Google può ritenersi un sistema affidabile, a differenza di molti altri siti decisamente meno attenti ai dettagli.

Via | Google Official Blog

Leave a Reply

Lorenzo Breda Articolo scritto da

Studente di Informatica a Roma, si occupa di programmazione web sopratutto lato server, e di accessibilità del web. Utilizza e ama Debian GNU/Linux, e si interessa di fisica, fumetto, trekking e fotografia (gli ultimi due possibilmente abbinati).
Collabora con Googlab da aprile 2012.

Contatta l'autore

Previous post:

Next post: