YouTube e il database

YouTube si colloca al secondo posto, solo dopo Google, nella classifica dei siti web più popolari. Da maggio 2019, circa 500 ore di video sono caricati ogni minuto sui canali sia aziendali che di intrattenimento.
Con più di 2 miliardi di iscritti, la piattaforma arriva a generare diversi miliardi di visualizzazioni a cui corrispondono 1 miliardo di ore di filmati visionati al giorno.
Mi piacerebbe fornire qualche spiegazione in merito alla capacità di YouTube e della sua infrastruttura di archiviare e gestire così tanti dati accessibili in simultanea a miliardi di utenti.

Infrastruttura di backend

I contenuti popolari sono erogati grazie ad un complicato sistema di CDN, ossia una rete composta da server collocati in posti diversi, all’interno dei quali vengono salvati gli stessi contenuti in modo che all’utente arrivi la copia geograficamente più vicina. I contenuti meno popolari sono archiviati e gestiti attraverso l’archivio centrale.
Ogni video è identificato grazie ad un codice identificativo univoco. Durante il caricamento il video viene elaborato e vengono estratte alcune informazioni utili per la gestione come alcuni metadati, vengono generate miniature, vengono effettuate delle trascrizioni e delle codifiche e vengono stabiliti i parametri per la monetizzazione.
La compressione dei contenuti è effettuata con l’utilizzo di H264/MPEG4AVC e il recente codec VP9, strumenti in grado di dimezzare la richiesta di spazio da parte dei file video 4K e HD.

Per garantire alte performance dello streaming su HTTP  YouTube ricorre ad un protocollo conosciuto con il nome di Dynamic Adaptive Streaming. È la tecnica adattiva che garantisce uno streaming veloce e che si adatti e che sia performante su server convenzionali HTTP.
Questo protocollo garantisce agli utenti di vedere lo stesso video ma cosidifcato apposta in base alle  ampiezze di banda diverse

YouTube prevede la connessione al server da parte dei client che creano il rendering automaticamente in relazione alla velocità della connessione riducendo al minimo i tempi di attesa. Questo comporta una latenza minima per i canali aziendali su YouTube

Database, MSQL e Vitess

In conseguenza dell’enorme numero di richieste effettuate al database di YouTube attraverso MSQL, il gruppo di sviluppatori ha incluso un framework supplementare, Vitess.
Vitess è un sistema di replicazione della banca-dati, che si articola in master “originale” e numerose repliche atte a ridurre il carico di lavoro del master. Le copie consentono di eliminare l’intasamento del traffico dati migliorandone la velocità e la durata.
In tal modo il master gestisce la scrittura mentre i nodi periferici e il master gestiscono la lettura. È questo il motivo per cui esistono delle discrepanze tra i dati relativi alle visualizzazioni inerenti il master e i nodi.

Frammentazione della banca-dati

La banca-dati viene sottoposta a replicazione attraverso i protocolli master-master e master-slave, inoltre i contenuti vengono suddivisi tra i vari nodi

Dopo la frammentazione della banca-dati, i contenuti vengono distribuiti su diverse macchine, ciò incrementa la velocità in fase di scrittura, gestita diverse macchine invece che una sola. Ogni macchina è fornita di copie separate per assicurare ridondanza e rapidità di elaborazione.

ph christina-wocintechchat-com-unsplash