Car-tech

YouTube scala MySQL con il codice Go

Common design patterns with Azure Cosmos DB | Azure Friday

Common design patterns with Azure Cosmos DB | Azure Friday
Anonim

Gli ingegneri di YouTube stanno sviluppando un set di software, chiamato Vitess, che aiuterà i database MySQL open source a lavorare in modo più efficiente in ambienti di produzione su larga scala. Per scrivere il codice, stanno utilizzando il linguaggio di programmazione di Google Go.

YouTube utilizza già un componente Vitess, chiamato Vtocc, per aiutare a fornire video a tutti gli 800 milioni di utenti mensili del servizio. Google ha acquisito YouTube nel 2006.

Vtocc "è stato molto costante e ha tutti gli strumenti necessari per l'utilizzo in un ambiente di produzione", ha affermato l'architetto di YouTube Sugu Sougoumarane, che insieme all'ingegnere di YouTube Mike Solomon ha discusso di Vitess alla conferenza Usenix LISA (Large Installation System Administration), tenutasi questa settimana a San Diego.

Quella Vitess è scritta in Go potrebbe aiutare a convalidare l'idea che questo relativamente nuovo linguaggio di programmazione possa essere usato in ambienti di produzione su larga scala. Google ha introdotto la versione 1 di Go a marzo.

YouTube offre oltre 4 miliardi di ore di video al mese. Ogni minuto vengono caricate sul servizio circa 72 ore di video. Mentre YouTube memorizza tutti i suoi video direttamente su un file system, utilizza MySQL per archiviare tutti i metadati necessari per servire ogni video, come le preferenze dell'utente, le informazioni pubblicitarie, le personalizzazioni del paese e altre informazioni necessarie.

A YouTube piace usare MySQL per la sua affidabilità, disse Solomon, uno degli ingegneri che originariamente aveva costruito il servizio. Ha stranezze, ma quelle stranezze sono ben note e possono essere mitigate abbastanza facilmente, ha detto. Tuttavia, MySQL ha anche problemi con il ridimensionamento - almeno il ridimensionamento per ospitare un servizio grande quanto quello di YouTube.

"Il problema principale con MySQL è che una volta arrivato a un certo punto [di utilizzo], si spende un sacco di tempo di gestione hardware e quante istanze hai ", ha detto Solomon. "Vogliamo automatizzare quel chunk, vogliamo prendere ogni azione che sia complicata e soggetta a errori e farla guarire da sola".

MySQL non è molto efficiente se utilizzato in una grande distribuzione. In genere, ogni connessione a MySQL richiede il proprio thread sul server. Tuttavia, questo approccio non è fattibile alla scala delle operazioni di YouTube. "Esecuzione di decine di migliaia di connessioni non è realmente fattibile", ha detto Solomon.

Gli ingegneri della società, tuttavia, sono stati riluttanti a provare a cambiare il codice MySQL di base, notando che apportare modifiche al complesso e un po 'difficile da codice -understand può spesso causare effetti imprevisti. "Non è semplice: proprio quando pensi di sapere cosa stai facendo, è quando inizi a metterti nei guai", ha detto Solomon.

So Vitess è stato creato per funzionare insieme a MySQL per offrire ulteriori funzionalità di gestione. Il componente Vtocc, ad esempio, consolida migliaia di query SQL in entrata in un numero inferiore di batch in modo che MySQL possa utilizzare meno risorse per soddisfare tali richieste. Vtocc analizza anche le query in modo che possano essere eseguite in modo più efficiente e riduce il lavoro causato da query duplicate riutilizzando i risultati di una query per soddisfare le altre richieste identiche.

L'utilizzo di Go ha consentito agli sviluppatori di YouTube di essere più produttivi di quanto avrebbero Ho usato un linguaggio più tradizionale, ha detto Sougoumarane.

Il codice Go si compila rapidamente, ha detto. Le 30.000 linee di codice in Vitess possono essere compilate in binari in circa 30 secondi. E, grazie a un ricco set di librerie, molte attività non richiedono molta programmazione. Per esempio, Sougoumarane ha scritto una routine di 105 linee che periodicamente taglia i file di log, funzionalità che non potevano essere scritte in poche righe usando C o C ++.

"È così che Go espressivo", ha detto Sougoumarane. "Le funzionalità linguistiche sono ben congegnate e ti aiutano a comporre le cose in un modo molto più elegante delle lingue tradizionali." Sougoumarane ha anche elogiato il supporto alla concorrenza di Go, fondamentale per l'utilizzo in processori multicore. "Non devi preoccuparti di gestire i thread, ma gestirli per te", ha detto.

Anche la lingua ha alcuni aspetti negativi, ha ammesso Sougoumarane. La gestione degli errori potrebbe essere migliorata, ad esempio. La pianificazione e la garbage collection potrebbero utilizzare anche un po 'di lavoro.

Solomon ha affermato che, nel tempo, Vitess assumerà compiti aggiuntivi, come la replica del database e il sharding automatico, in modo che un database possa crescere su più server senza alcun intervento da parte degli amministratori.

Joab Jackson copre le ultime novità del software aziendale e della tecnologia generale per Il servizio News IDG. Segui Joab su Twitter all'indirizzo @Joab_Jackson. L'indirizzo e-mail di Joab è [email protected]