In Netflix, il data warehouse contiene centinaia di petabyte di dati archiviati in AWS S3 e ogni giorno importiamo e creiamo petabyte aggiuntivi.
Su questa scala, si possono ottenere una quantità significativa di prestazioni e vantaggi in termini di costi ottimizzando il layout di archiviazione (record, oggetti, partizioni) man mano che i dati arrivano nel nostro magazzino.
Ci sono diversi vantaggi di tali ottimizzazioni come risparmio di spazio di archiviazione, tempi di query più rapidi, elaborazione a valle più economica e aumento della produttività degli sviluppatori rimuovendo ETL aggiuntivi scritti solo per migliorare le prestazioni delle query.
D’altra parte, queste stesse ottimizzazioni devono essere sufficientemente economiche da giustificare i propri costi di elaborazione rispetto ai guadagni che portano.
Abbiamo creato AutoOptimize per ottimizzare in modo efficiente e trasparente il layout di archiviazione dei dati e dei metadati, massimizzandone i vantaggi in termini di costi e prestazioni.
Casi d’uso
Ci sono diversi casi d’uso in cui un sistema come AutoOptimize può apportare tonnellate di valore.
Alcune delle ottimizzazioni sono prerequisiti per un data warehouse ad alte prestazioni.
A volte i Data Engineer scrivono ETL a valle sui dati ingeriti per ottimizzare i layout di dati / metadati per rendere altri processi ETL più economici e veloci.
L’obiettivo di AutoOptimize è centralizzare tali ottimizzazioni che rimuoveranno il lavoro duplicato e lo faranno in modo più efficiente rispetto agli ETL vanilla.
Unisci
Quando i dati arrivano nel data warehouse tramite sistemi di acquisizione dati in tempo reale, sono disponibili in diverse dimensioni. Ciò si traduce in un numero sempre crescente di piccoli file nelle partizioni. L’unione di questi numerosi file più piccoli in una manciata di file più grandi può rendere più veloce l’elaborazione delle query e ridurre lo spazio di archiviazione.
Ordinare
I record e i file preordinati nelle partizioni rendono le query più veloci e risparmiano una notevole quantità di spazio di archiviazione poiché consente un livello di compressione più elevato. Avevamo già alcune tabelle esistenti con fasi di ordinamento per ridurre l’archiviazione delle tabelle e migliorare le prestazioni delle query a valle.
Compattazione
I moderni data warehouse consentono l’aggiornamento e l’eliminazione di record preesistenti.
Iceberg prevede di abilitarlo sotto forma di file delta. Nel tempo, il numero di file delta cresce e compattarli nei file di origine può rendere le operazioni di lettura più ottimali.
Ottimizzazione dei metadati in Netflix data warehouse
Il partizionamento fisico è separato dal partizionamento logico mantenendo una mappa delle posizioni dei file nei metadati.
Questo ci consente di aggiungere ulteriori indici nei metadati per rendere le query di punti più ottimali. Possiamo anche riorganizzare i metadati per rendere la scansione dei file molto più veloce.
Principi di progettazione
Affinché AutoOptimize ottimizzi in modo efficiente il layout dei dati, abbiamo effettuato le seguenti scelte:
- Ottimizzazione just in time vs. ottimizzazione periodica Ottimizza
un dato set di dati solo quando richiesto (in base a ciò che è cambiato) invece di esecuzioni periodiche cieche. - Ottimizzazione essenziale rispetto a quella completa
Consenti agli utenti di ottimizzare al punto di diminuire i rendimenti invece di un’impostazione binaria. Ad esempio, consentiamo a una partizione di avere alcuni piccoli file invece di unire sempre file di dimensioni perfette. - Sostituzione minima e sovrascrittura completa
Sostituisci solo la quantità minima richiesta di file invece di una sovrascrittura completa.
Questi principi riducono l’utilizzo delle risorse essendo più efficienti ed efficaci riducendo la latenza end-to-end nell’elaborazione dei dati.
Oltre a questi principi, ci sono alcune altre considerazioni di progettazione da supportare e abilitare:
- Multi-tenancy con priorità di database e tabelle.
- Ottimizzazione sia automatica (basata sugli eventi) che manuale (ad hoc).
- Trasparenza per gli utenti finali.
Design di alto livello in Netflix data warehouse
AutoOptimize è suddiviso in 2 sottosistemi (servizio e attori) per separare le decisioni dalle azioni ad alto livello. Questo disaccoppiamento delle responsabilità ci aiuta a progettare, gestire, utilizzare e scalare i sottosistemi in modo indipendente.
Servizio di ottimizzazione automatica
Il servizio decide. Decide cosa fare e quando farlo in risposta a un evento in arrivo.
È responsabile dell’ascolto degli eventi e delle richieste in arrivo e dell’assegnazione delle priorità a diverse tabelle e azioni per utilizzare al meglio le risorse disponibili.
Il lavoro svolto nel servizio può essere ulteriormente suddiviso nei seguenti 3 passaggi:
Osserva: ascolta i cambiamenti nel magazzino quasi in tempo reale. Inoltre, rispondi alle richieste ad hoc create manualmente dagli utenti finali.
Orienta: raccoglie i parametri di ottimizzazione per una particolare tabella modificata. Inoltre, regola l’allocazione delle risorse per la tabella o il numero di attori a seconda del backlog.
Decidere: determinare l’azione con il valore più alto con i parametri corretti per questa particolare modifica e quando agire a seconda di come l’azione rientra nella priorità globale in tutte le tabelle e le azioni.
In AutoOptimize, il servizio è un cluster di applicazioni Java (Spring Boot) che utilizzano Redis per mantenere gli stati organizzati in Netflix data warehouse.
Netflix News Serie TV Film Amine
Apple Android Tecnologia Prime Video Offerte
Seguici su Facebook Twitter Pinterest
Seguici su Telegram: Netflix, Offerte Amazon Prime, Prime Video