Visualizzazione del database F1 del reparto pubblicitario di Google dal documento VLDB

Clicca sul "sopra"Vola la chat totale IT",Scegliere di seguire il numero pubblico.

La lettura del testo richiede circa 20 minuti.


Recentemente, alcuni dei documenti VLDB sono stati letti a causa del loro lavoro. Ciò include un'analisi del database F1 appena pubblicato di Google. Non è sempre facile leggere i documenti di Google. Perché Google ha sempre detto metà nascosta metà. Questo documento è relativamente aperto a scrivere, o non può evitare la volgarità.


Questo documento è un follow-up del VLDB f1:A Distributed SQL Database That Scales di Google 2013, che fornisce un quadro completo di come il database F1 di Google si è evoluto nel corso degli anni. Questo documento è discusso in dettaglio in questo documento.


F1 e background dei concorrenti

Esaminiamo la cronologia della F1. F1 è un sistema di query di dati che supporta più origini dati. È nato originariamente nel braccio pubblicitario di Google. Lo scopo principale dello scopo originale era quello di sostituire il cluster mySQL del sistema pubblicitario in quel momento. F1 è stato posizionato come motore di query fin dall'inizio, implementando rigorosi principi di separazione dell'archiviazione computazionale. Il sistema di archiviazione sottostante era The Next Generation Spanner di BigTable, che è stato poi sviluppato in parallelo.


Poi, nel 2014, VLDB Google ha pubblicato Mesa, un sistema di data warehouse globale per più data center. Mesa divenne il secondo sistema nell'attracco principale della F1. F1 si è evoluto fino ai giorni nostri come un sistema in grado di supportare le query di federazione dei dati per i dati da file CSV a BigTable a Spanner.


Dopo tanti anni di sviluppo, Google ha anche formato una serie di sistemi di elaborazione dati. Questi sistemi di database stessi hanno forti relazioni competitive. In altre parole, posso prendere un cliente da te, e la mia squadra sarà più grande. F1, come un sistema in crescita all'interno di Google, è anche il vincitore di questo rapporto competitivo.


Comprendere la storia e il pubblico dei servizi di questi database è importante per noi per ottenere una comprensione più profonda del supporto aziendale e delle opzioni tecniche dei sistemi F1. Quindi, sotto sono e capire F1 questo documento relativo ad alcuni degli altri sistemi di database di Google per fare un'introduzione.


F1 era originariamente posizionato per sostituire mySQL cluster son con la divisione Ads di Google. Spanner, come sistema sottostante di F1, è un livello di archiviazione che supporta l'elaborazione delle transazioni (implementato utilizzando 2 fase di blocco) e F1 esiste come motore di calcolo.


Ma dopo che il team di Spanner ha sviluppato il livello di storage, ha iniziato a fare query di dati e ha sviluppato un sistema di query interno chiamato Spandex. Come Spanner si è evoluto in un documento di sistema SQL completo pubblicato in SIGMOD 2017. Ciò ha portato ad un rapporto competitivo tra F1 e Spanner. Ad oggi, la rivalità tra le due squadre all'interno di Google rimane feroce.


Dremel è un sistema di data warehouse interno per Google. Google ha commercializzato Dremel, chiamato Big Query. Dremel utilizza un modello di dati semistrutturato con un formato basato su colonne, la cui prima generazione è ColumnIO.


Il formato di seconda generazione Capactior è stato introdotto dopo la commercializzazione. Entrambi i formati sono origini dati esterne supportate da F1. L'insolito successo di Dremel all'interno di Google. Ad oggi, BigQuery rimane il prodotto Big Data di maggior successo sul cloud di Google.


Flume è un aggiornamento al framework interno MapReduce di Google. Originariamente sviluppato solo su Java, è stato originariamente chiamato Flume Java, e in seguito è stato disponibile anche in C. Flume ha modificato il modello di sviluppo per Map e Reduce scritto nel framework MapReduce, introducendo più API di alto livello, che sono state sviluppate come Spark.


Nell'ambiente di esecuzione sottostante, Flume ha anche modificato la modalità rigida di MapReduce per supportare modelli come Map-Reduce-Reduce. Il suo vantaggio è che è molto flessibile per scrivere una varietà di pipeline di elaborazione dei dati, lo svantaggio è cose semplici anche devono scrivere un sacco di codice, non semplice come SQL.


Posizionamento aziendale di F1

Il sistema F1 supporta tre diversi modi di eseguire query sui dati:

1. Query che interessano solo alcuni record del tipo OLTP

2. Query OLAP a bassa latenza che coinvolgono grandi quantità di dati

3. Pileline ETL su larga scala


Il documento di F1 non fornisce un'analisi di questi tre diversi metodi di query di dati. Unisco il documento di F1 2013 e altri background per analizzare le ragioni per i tre diversi metodi di query di dati dei sostenitori della F1.


IL TIPO OLTP DI QUERY ORIGINATED DA F1'S ORIGINAL GOAL: PER REPLACE MYSQL CLUSTERS NELLA PUBBLICITÀ BUSINESS. Secondo la carta F1 del 2013, il suo supporto OLTP è limitato. Una query OLTP nel sistema F1 consiste nel leggere diverse operazioni seguite da 0 a 1 operazione di scrittura. La potenza di elaborazione transazionale dell'OLTP del sistema F1 si basa sul supporto del sottostante di Spanner per l'elaborazione delle cose.


Nel documento del 2018, gli autori non forniscono una descrizione dettagliata del tipo di query THE OLTP. Tuttavia, secondo l'analisi del buon senso, un motore di query senza stato che deve supportare l'elaborazione transazionale non può essere separato dal supporto di archiviazione sottostante per le cose. Quindi il motore F1 ovviamente non può fare l'elaborazione transazionale per qualsiasi origine dati si connette a. Dato che Spanner stesso implementa un motore di query di dati, è disponibile il supporto per l'elaborazione di elementi. A questo proposito, F1 e Spanner hanno un chiaro rapporto competitivo.


La latenza bassa e le query OLAP che coinvolgono grandi quantità di dati sono posizionate in modo molto simile a BigQuery. La sua implementazione ha anche un'implementazione di BigQuery, principalmente attraverso la pipeline modo per eseguire query e restituire i risultati dei dati.


Secondo l'analisi di questo articolo, che si presenta e altri concorrenti all'interno di Google, l'attività è stata spostata a Bigquery o F1 dopo un sistema di Google chiamato Tenzing chiuso nei primi anni. Possiamo capire che BigQuery e F1 sono concorrenti in questo tipo di query. In pratica, BigQuery ha più successo.


Nei primi giorni, all'interno di Google, pipeline ETL su larga scala è stato in gran parte raggiunto da una serie di missioni MapReduce. Con Flume, queste aziende si sono trasferite a Flume. Ma Flume è un sistema molto male, e ci vuole un sacco di codice per fare una semplice query di dati. In questo articolo, l'autore fa esplicito riferimento alla sostituzione di Flume da parte di F1 in alcune aziende.


In combinazione con l'analisi di cui sopra, possiamo semplicemente arrivare alla conclusione successiva. L'attività OLTP nella F1 interna di Google è principalmente l'obiettivo dei primi anni di F1. F1 si basa sul supporto di Spanner per OLTP. Poi Spanner stesso ha sviluppato un motore simile. Questo non è incoerente con quello che ho sentito parlare di F1, che viene utilizzato principalmente dal dipartimento pubblicitario, e il dipartimento non pubblicitario, che utilizza spagnolo pesantemente.


Nelle query OLAP a bassa latenza, la competizione principale per F1 è BigQuery. Con il successo di BigQuery oggi. La F1 dovrebbe avere solo una base di business nel suo dipartimento pubblicitario domestico.


Flume è un sistema mischiato all'interno di Google. Meglio di MapReduce, ma non facile da usare. F1 è una forza nel settore ETL e può catturare una parte del mercato. Dal punto di vista dell'architettura tecnica, come ottenere un migliore utilizzo di ETL è la tecnologia più critica per il 2018 del team di F1.


Architettura di sistema di F1

L'immagine seguente è il diagramma dell'architettura del sistema F1 nel documento 2018:

 

                            

L'immagine seguente è il diagramma dell'architettura del sistema F1 nel documento 2013:



I sistemi F1 possono essere distribuiti in data center diversi, ma ogni data center dispone di un set completo di cluster di elaborazione. Il cluster è costituito da 1 F1Master. Si tratta di un servizio eletto non a nodo singolo, univoco per ogni data center. È principalmente per monitorare l'esecuzione di query e gestire tutti F1Server. Il sistema è costituito da diversi server F1 che gestiscono effettivamente le richieste di query.


È inoltre disponibile un pool di lavoro F1. Quando una query deve essere eseguita in parallelo, questi worker vengono utilizzati per eseguire una query parallela e il server F1 corrispondente diventa il codice della query. Worker si chiama Slave nel diagramma dell'architettura del sistema 2013. È solo un nome diverso. Le responsabilità effettive di F1 Server sono state più chiaramente dette nel documento del 2013.


Il sistema dispone anche di un servizio di catalogo e di un server UDF. Queste cose sono relative all'aggiunta degli architetti di sistema nel documento del 2013. Il servizio catalogo è un servizio metadati che definisce i dati in origini dati diverse come aspetto. Possiamo vedere che nell'architettura di sistema del 2013, solo Spanner, ma nel documento 2018, le fonti di dati sono diversificate. Così Servizio catalogo è un servizio necessario per diventare un motore di query federale di più origini dati nello sviluppo di F1.


UDF Server è una cosa nuova Che F1 rivelerà nel suo articolo del 2018. Il suo significato principale è quello di ottenere il sostegno per la sostituzione di ETL e flume. Ne parleremo più in dettaglio più avanti.

Modalità di query di F1

I modelli di query di F1 possono essere facilmente suddivisi in elementi interattivi e non interattivi. Una combinazione di documenti 2013 e 2018. L'esecuzione interattiva è principalmente per le query che interessano solo alcuni record del tipo OLTP e per le query OLAP a bassa latenza che coinvolgono grandi quantità di dati. Il sistema esegue su entrambi i tipi di query tramite F1 Server.


Il piano di esecuzione viene generato dopo che F1 Server compila e ottimizza la query. Esistono due tipi di piani di esecuzione: esecuzione a thread singolo e esecuzione parallela. Il primo viene eseguito direttamente dal Server. Quest'ultimo server diventa l'intera query parallela, eseguita dal worker di chiamata RPC. In questo documento vengono illustrate alcune decisioni sulla strategia di partizionamento del sistema e su come migliorare le prestazioni del sistema, principalmente per l'asimmetria dei dati e il modello di non accesso. La pratica è comune nei database distribuiti. Le persone interessate possono leggere il giornale. Non comincerà più.

Gli autori notano che l'esecuzione interattiva è stabile per circa un'ora o giù di lì potrebbe non riuscire. Secondo il documento, l'esecuzione dell'interazione distribuita di F1 non ha la tolleranza di errore in sé, ma il client F1 ha una funzione di ripetizione dei tentativi. Per un sistema maturo, questo è un po 'un peccato.

L'esecuzione non interattiva viene utilizzata principalmente per le query a esecuzione prolungata. Si basa sul framework MapReduce di Google. La query viene compilata in un piano di query e archiviata in RegistrQuery.The query is compiled into a query plan and stored in RegistrQuery. Registro di sistema di query è un database Spanner distribuito a livello globale tra data center che tiene traccia dei metadati per le query in tutte le modalità batch. È inoltre disponibile un servizio di distribuzione query tra data center globale, che assegna piani di query a un data center che esegue la query utilizzando il framework MapReduce.

在MapReduce的查询框架里,F1的优化引入了Map-Reduce-Reduce的模式,这个和Map-Reduce的框架不符合。F1团队的解决方式是把这个翻译成Map-Reduce后跟一个Map<identity>-Reduce任务。这显然不是最高效的办法。由此可见,长查询通过MapReduce来执行并非最有效的方式。而F1也无法摆脱执行框架的限制。


Ottimizzatore di F1

La struttura dell'ottimizzatore F1 è illustrata di seguito. Si tratta di un processo di ottimizzazione delle query più classico. L'ottimizzatore ottiene l'AST dal compilatore come input, prima lo converte in un piano di query logico e quindi, dopo l'ottimizzazione logica, genera un piano di query fisico. Questo piano di query viene infine generato dal generatore di piani di esecuzione per produrre un piano di esecuzione.

L'ottimizzazione logica è principalmente attraverso la logica dell'algebra relazionale, il piano di query della logica di input in un programma ottimale in base alle ottimizzazioni comuni e euristiche, ad esempio il pushdown del predicato, vengono eseguite qui. Un piano di query fisico è responsabile della traduzione di un piano logico in un piano fisico. Il generatore di pianificazione più in sospeso segmenta il piano fisico, con ogni segmento che diventa l'ultima unità di esecuzione e l'inserimento di operatori di scambio tra le unità di esecuzione per ripartizionare i dati. Il problema di concorrenza per ogni unità di esecuzione viene determinato anche qui.


L'ottimizzatore F1 nel suo complesso è un ottimizzatore relativamente primitivo. L'intero ottimizzatore si basa interamente sulla regola, senza alcuna ottimizzazione basata sui costi. Rispetto ai sistemi di data warehouse comuni, questo richiede un notevole miglioramento.


Scalabilità di F1

F1 supporta la funzione definita dall'utente (UDF), la funzione di aggregazione definita dall'utente (UDA) e la funzione di valori di tabella (TVF). Queste sono le estensioni usuali all'interno del sistema di database. Queste estensioni definite dall'utente possono essere implementate tramite script SQL o LUA. Fondamentalmente, queste implementazioni sono l'implementazione classica nel database.


Ma ciò che è più speciale in F1 è l'introduzione di uDF server figlio. Viene utilizzato principalmente per implementare TVF più complessi. Un server UDF è un servizio che può essere implementato in qualsiasi linguaggio e fornisce a F1 un'interfaccia funzione per TVF. Oltre a inviare l'input corrispondente e ricevere i risultati durante l'esecuzione, queste interfacce F1 forniscono informazioni aggiuntive al compilatore e all'ottimizzatore durante la compilazione di query. Ad esempio, qual è lo schema di output, se TVF può essere partizionato solo dopo ogni partizione da eseguire e così via.


Il server UDF ha pochissimo inchiostro nell'articolo, ma a mio parere questa è la differenza più importante tra la carta F1 2018 e la carta 2013. Con il server UDF, è possibile logica ETL complessa. Il server UDF risolve anche il vecchio problema del dominio del database con UDF: gestione delle risorse. Se ho intenzione di scegliere una delle cose più brillanti, penso che sia server UDF.


Credo che gli sviluppatori di F1 di Google dovrebbero essere ben consapevoli dell'importanza del server UDF, ma c'è poco di più da scrivere sulla carta. È impossibile dire che questo potrebbe essere stato intenzionale.


L'uso del server UDF consente a F1 di supportare ETL complessi. Allo stesso tempo, la logica di elaborazione dati standard in ETL può essere implementata direttamente scrivendo SQL. Allo stesso tempo, poiché il server UDF è un servizio separato, sono stati risolti anche i problemi comuni di gestione delle risorse UDF.


Riassumere

Il documento 2018 VLDB F1 sull'architettura e lo sviluppo del database F1 di Google. F1 si è ora evoluto in un motore di query di dati che supporta più funzionalità di dati per più origini dati. Le query di classe OLTP sono incentrate principalmente sull'attività iniziale, sostituendo mySQL. Le query OLAP a bassa latenza competono principalmente con Dremel. E il suo obiettivo nel supportare il complesso ETL è rivolto principalmente a Flume.


F1 has three execution modes: single-threaded, distributed interactive execution, and non-interactive execution based on MapReduce. È un peccato che le interazioni distribuite vengano eseguite senza errori di recupero. Le prestazioni dell'esecuzione non interattiva basata su MapReduce hanno spazio per un'ulteriore ottimizzazione.


F1 optimizer è un ottimizzatore di database classico, solo l'ottimizzazione della base di regole, non l'ottimizzazione della base di costi. Quindi non credo che un'ottimizzazione come Join-riordering può fare. Questo ottimizzatore è abbastanza semplice e ha un sacco di spazio per il miglioramento.


In termini di scalabilità, i metodi di estensione UDF, UDA e TVF sono tutte estensioni di database classiche. Il suo server UDF è un'invenzione molto importante. Penso a tutte le cose in questo articolo che hanno un grande valore di riferimento. Ma questo articolo apparentemente deliberatamente omette questo pezzo.


L'architettura di F1 viene confrontata con il 2013, con l'aggiunta di un servizio di metadati, Catalog. Catalogo svolge un ruolo importante nella scena del data lake. Sia la scoperta che la condivisione dei dati sono essenziali. Quando si tratta di gestione dei diritti, il ruolo dei servizi di metadati globali è insostituibile. L'ottimizzazione della base dei costi richiede anche servizi basati su metadati. E 'un grande peccato che F1 non ha menzionato le nuove aggiunte a questo 2018 carta.



Benvenuti nella lunga stampa per seguire il numero di abbonamentoVola la chat totale ITPer guardare di più


Articoli correlati:

Lungimiranza e quasi preoccupante

Come sapere cosa pensa veramente di te un leader

Comunicazione tcp handshake, pari al denaro e alla morte

La leadership conta di più

Non essere analfabeta d'affari

Spazzare una casa e spazzare il mondo

Cosa manca di più dagli studenti per codificare gli agricoltori

Benvenuti sul Pianeta della Conoscenza Totale.