Nei sistemi distribuiti su larga scala, come quelli che utilizza Google e che offre ai suoi clienti cloud, il trasferimento dati è cruciale. In concomitanza con l’apertura dei battenti di SIGCOMM 2024, conferenza annuale focalizzata su ricerche significative ed esperienze nel campo delle reti di comunicazione e dei sistemi di networking, Google ha pubblicato un documento tecnico e un video YouTube che svelano alcuni interessantissimi “dietro le quinte” sul funzionamento dei servizi del colosso di Mountain View.
Nel documento dal titolo “An exabyte a day“, Google “si vanta” di trasferire con successo 1,2 exabyte di dati ogni singolo giorno e celebra per la prima volta un “eroe” sin qui mai portato agli onori delle cronache. Si tratta di Effingo, una soluzione sviluppata internamente dall’azienda fondata da Larry Page e Sergey Brin, per bilanciare l’efficienza dell’infrastruttura con le necessità degli utenti, riconoscendo che alcuni trasferimenti di dati sono più critici di altri.
Effingo permette a Google di trasferire 1,2 exabyte di dati ogni giorno: cos’è e come funziona
Gli ingegneri di Google spiegano nel dettaglio perché Effingo è una soluzione di primo piano. Innanzi tutto, riduce significativamente la latenza della rete, passando da centinaia di millisecondi su scala globale a poche decine di millisecondi a livello continentale. La sfida, infatti, è quella di rendere i dati accessibili all’edge, sempre più vicini agli utenti finali che dovranno utilizzarla. Se i dati si trovano fisicamente vicini agli utenti, le prestazioni ne beneficeranno in maniera significativa.
Effingo è ottimizzato per il file system Google Colossus, distribuito su cluster composti da migliaia di macchine. È implementato in ogni cluster con una struttura a doppio strato: un livello di controllo per gestire il ciclo di vita delle copie e un livello dati per trasferire byte ed stilare report sullo stato di tutte le operazioni di trasferimento. Il livello dati, pur impegnando le CPU al 99%, costituisce meno del 7% del codice totale.
Il principio è ben noto nei sistemi di calcolo: le operazioni di trasferimento dati (livello dati) sono intensive in termini di risorse computazionali perché coinvolgono l’effettivo spostamento di grandi volumi di informazioni. Al contrario, le operazioni di gestione e controllo (livello di controllo) richiedono logica più complessa e, quindi, più codice, ma meno risorse computazionali.
Ogni cluster è collegato agli altri tramite reti a bassa latenza e alta larghezza di banda, oppure tramite connessioni WAN che utilizzano un mix di infrastrutture di Google e di terze parti. Il Bandwidth Enforcer (BWe) gestisce l’allocazione della capacità di rete in base alla priorità del servizio.
Bilanciamento tra efficienza e necessità
Raramente Google mette a fattor comune dettagli così particolareggiati relativi alla sua infrastruttura. E nel descrivere il comportamento di Effingo, dall’azienda si spiega che questo strumento si assicura che i trasferimenti più importanti ricevano le risorse necessarie, evitando conflitti per IOPS (operazioni di input/output per secondo), larghezza di banda e risorse di calcolo.
Sì perché come abbiamo messo in evidenza poco fa, non tutti i trasferimenti sono posti sullo stesso piano. Alcune operazioni sono più importanti di altre: si pensi al recupero dei dati in caso di disastro per un database rispetto alla migrazione di dati da un cluster in manutenzione.
BWe assegna la capacità di rete in base alla priorità del servizio e al valore derivato dall’aggiunta di larghezza di banda extra. Quando un utente avvia un trasferimento dati, Effingo richiede l’allocazione del traffico proprio attraverso BWe.
Effingo utilizza quote predefinite per la larghezza di banda, gli IOPS e i worker utilizzabili. Le risorse fornite con un approccio “best effort” sono utilizzate per flussi meno critici e sono ricavate da quote sottoutilizzate. Le quote sono pianificate con mesi di anticipo e possono essere reclamate rapidamente se necessario.
Qualche numero interessante
I responsabili Google rivelano che Effingo deve costantemente gestire una coda di circa 12 milioni di file che attendono di essere processati (backlog). La dimensione media dei dati corrispondenti a questi 12 milioni di file è pari a circa 8 petabyte (un petabyte equivale a 1.024 terabyte).
Anche nei giorni in cui Effingo funziona al massimo dell’efficienza, ci sono comunque circa 2 milioni di file in coda per il trasferimento. Questo indica che c’è sempre un volume considerevole di lavoro da gestire, anche in condizioni ottimali.
Quando i principali utenti (i primi dieci) avviano nuovi trasferimenti, il backlog può aumentare notevolmente. In questi momenti di picco, la coda può crescere fino a 12 petabyte di dati e coinvolgere fino a 9 milioni di file aggiuntivi.
Nel complesso, ogni giorno, Google trasferire 1,2 exabyte giornalieri che equivalgono a qualcosa come oltre 1,2 milioni di terabyte.
Uno sguardo al futuro
Effingo è un progetto in continua evoluzione. Google prevede di migliorare l’integrazione con i sistemi di gestione delle risorse e di ottimizzare l’uso della CPU durante i trasferimenti inter-datacenter. L’azienda ha inoltre in programma di introdurre una serie di migliorie su ciclo di controllo, in modo tale scalare i trasferimenti dati ancora più rapidamente.
Qualora voleste approfondire ulteriormente l’argomento, suggeriamo di documentarvi con questo video ufficiale, appena pubblicato su YouTube.
Credit immagine in apertura: Google