La causa del blackout? Un errore di programmazione

C’è chi ha detto che si trattava di un attacco da parte di hacker cinesi, chi di una forma di protesta, chi di problemi di traffico insanabili.

Per la prima volta, e per evitare strumentalizzazioni, Facebook dà qualche spiegazione in più su cosa ha provocato l’interruzione del servizio.

Vi proponiamo la traduzione (libera) della nota comparsa su Facebook Engineering, e una nostra reinterpretazione più sintetica (e più pratica).

Traduzione da Facebook Engineering

Oggi Facebook è stato irraggiungibile o inattivo per molti di voi per circa 2,5 ore. Questo è il peggior problema (interruzione) che abbiamo avuto in più di quattro anni, e abbiamo voluto prima di tutto chiedere scusa per questo. Abbiamo anche voluto fornire molti più dettagli tecnici su quello che è successo e condividere con voi una grande lezione imparata.

Il difetto fondamentale che ha causato un’interruzione così grave è stata una gestione errata di una condizione di errore. Un sistema automatizzato per la verifica dei valori di configurazione ha finito per causare danni molto più di quanto previsto.

L’intento del sistema automatizzato è quello di verificare la presenza di valori di configurazione che non sono validi nella cache e sostituirli con i valori aggiornati dei dati permanenti. Questo funziona bene per un problema temporaneo con la cache, ma non funziona quando il dato permanente non è valido.

Oggi abbiamo fatto una modifica alla copia permanente di un valore di configurazione che è stato interpretato come valido. Questo significa che ogni singolo client ha visto il valore non valido e ha tentato di risolvere il problema. Poiché la correzione consiste nel fare una query a un cluster di database, tale cluster è stato rapidamente sopraffatto da centinaia di migliaia di richieste al secondo.

Inoltre siamo entrati in un ciclo senza fine, perchè ogni volta che il client sostituiva l’errore con un altro errore, rimaneva in attesa di riparare lo stesso errore dopo aver cancellato il valore temporaneo nella cache. Ciò significa che anche dopo il problema iniziale era stato fissato, il flusso delle procedure continuava. Fino a che il database non esauriva alcune delle richieste, si generavano altre richieste, aumentando le operazioni in coda. Eravamo entrati in un ciclo di risposte che non permetteva di recuperare i database.

Il modo per interrompere questo ciclo infinito è stato molto doloroso – abbiamo dovuto fermare tutto il traffico generato da questo errore nel database, disattivando il sito. Una volta che il database è stato ripristinato e la causa principale del problema eliminata, lentamente è stato permesso a un crescente numero di persone ad accedere nuovamente al sito.

Oggi il sito sembra funzionare, e per ora abbiamo disattivato il sistema che tenta di correggere i valori di configurazione. Stiamo provando nuovi schemi per questo sistema di configurazione allo scopo di trattare in modo più efficace e cauto i dati memorizzati e gli eventuali imprevisti.

Ci scusiamo nuovamente per l’interruzione del sito, e vogliamo che sappiate che ci prendiamo cura delle prestazioni e dell’affidabilità di Facebook molto seriamente.

—–

In poche parole…

Un errore di programmazione (la correzione automatica di un dato negli archivi) ha generato un ciclo senza fine: un dato (sbagliato) veniva sostituito con un altro dato (ancora sbagliato) e tornava “in coda” per una nuova correzione.

L’unica soluzione, per evitare la perdita dei dati, è stata quella di “spegnere tutto”, per interrompere questa operazione “infinita”.

Una volta sistemato il bug, si è proceduto a ripristinare il sistema e lentamente la situazione sembra tornare alla normalità.

SeeYouSoon

Nota a cura di Claudio Cerroni (Hunch – Assistenza e Consulenza Informatica).

Iscriviti alla nostra PaginaAggiornamenti per essere sempre aggiornato sui problemi di Facebook. Se vuoi ricevere le nostre note anche nella posta (per non fartele sfuggire), iscriviti anche al gruppo CheckOnLine.

CheckBlackList | PaginaAggiornamenti | News | Facebook | Toolbar | WorkingOn

You may also like...