Open Source DataHub: piattaforma di ricerca è scuperta di metadati di LinkedIn

Open Source DataHub: piattaforma di ricerca è scuperta di metadati di LinkedIn

Truvà i dati chì avete bisognu rapidamente hè essenziale per qualsiasi cumpagnia chì si basa in quantità grandi di dati per piglià decisioni guidate da dati. Ùn hè micca solu un impattu nantu à a produtividade di l'utilizatori di dati (cumpresi analisti, sviluppatori di machine learning, scientisti di dati è ingegneri di dati), ma hà ancu un impattu direttu nantu à i prudutti finali chì dipendenu da una pipeline di qualità machine learning (ML). Inoltre, a tendenza versu l'implementazione o a custruzzione di e plataformi di apprendimentu automaticu suscite naturalmente a quistione: quale hè u vostru metudu per scopre internamente funzioni, mudelli, metriche, datasets, etc.

In questu articulu parlemu di cumu avemu publicatu una fonte di dati sottu una licenza aperta DataHub in a nostra piattaforma di ricerca è scuperta di metadati, partendu da i primi tempi di u prugettu Induve cumu. LinkedIn mantene a so propria versione di DataHub separatamente da a versione open source. Cuminciaremu spieghendu perchè avemu bisognu di dui ambienti di sviluppu separati, poi discutemu i primi approcci per utilizà l'open source WhereHows è paragunate a nostra versione interna (produzzione) di DataHub cù a versione in GitHub. Avemu da sparte ancu dettagli nantu à a nostra nova soluzione automatizata per spinghje è riceve l'aghjurnamenti open source per mantene i dui repositori in sincronia. Infine, daremu struzzioni nantu à cumu cumincià à utilizà DataHub open source è discutemu brevemente a so architettura.

Open Source DataHub: piattaforma di ricerca è scuperta di metadati di LinkedIn

WhereHows hè avà un DataHub!

A squadra di metadati di LinkedIn presentata prima DataHub (successore di WhereHows), a piattaforma di ricerca di LinkedIn è di scuperta di metadati, è piani spartuti per apre. Pocu dopu à questu annunziu, avemu liberatu una versione alfa di DataHub è l'avemu sparte cù a cumunità. Da tandu, avemu cuntribuitu continuamente à u repository è hà travagliatu cù l'utilizatori interessati per aghjunghje e funzioni più richieste è risolve i prublemi. Avemu avà piacè di annunzià a liberazione ufficiale DataHub nantu à GitHub.

Approcci Open Source

WhereHows, u portale uriginale di LinkedIn per truvà dati è induve vene, hà iniziatu cum'è un prughjettu internu; a squadra di metadata hà apertu codice fonte in 2016. Da tandu, a squadra hà sempre mantinutu duie basi di codice differenti - una per l'open source è una per l'usu internu di LinkedIn - perchè micca tutte e caratteristiche di u produttu sviluppate per i casi d'usu di LinkedIn eranu generalmente applicabili à l'audienza più larga. Inoltre, WhereHows hà alcune dipendenze interne (infrastruttura, biblioteche, etc.) chì ùn sò micca open source. In l'anni chì seguitanu, WhereHows hà attraversatu parechje iterazioni è ciculi di sviluppu, facendu di mantene e duie codebase in sincronia una grande sfida. A squadra di metadata hà pruvatu diversi approcci annantu à l'anni per pruvà à mantene u sviluppu internu è open source in sincronia.

Prima prova: "Open source prima"

Inizialmente, avemu seguitu un mudellu di sviluppu "open source first", induve a maiò parte di u sviluppu si trova in un repository open source è i cambiamenti sò fatti per l'implementazione interna. U prublema cù questu approcciu hè chì u codice hè sempre imbuttatu à GitHub prima prima ch'ellu sia statu rivisatu cumplettamente internamente. Finu chì i cambiamenti sò fatti da u repository open source è una nova implementazione interna hè fatta, ùn truvamu micca prublemi di produzzione. In casu di implementazione povira, era ancu assai difficiuli di determinà u culpevule perchè i cambiamenti sò stati fatti in batch.

Inoltre, stu mudellu hà riduciutu a produtividade di a squadra quandu si sviluppanu novi funzioni chì necessitavanu iterazioni rapide, postu chì hà furzatu tutti i cambiamenti à esse prima imbuttati in un repository open source è poi imbuttati in un repository internu. Per riduce u tempu di trasfurmazione, a correzione o u cambiamentu necessariu puderia esse fattu prima in u repositoriu internu, ma questu hè diventatu un prublema enormu quandu si tratta di unisce quelli cambiamenti in u repositoriu open source perchè i dui repositori eranu fora di sincronia.

Stu mudellu hè assai più faciule da implementà per e piattaforme, biblioteche o prughjetti infrastrutturali spartuti cà per l'applicazioni web persunalizate cumplete. Inoltre, stu mudellu hè ideale per i prughjetti chì cumincianu a fonte aperta da u primu ghjornu, ma WhereHows hè statu custruitu cum'è una applicazione web completamente interna. Era veramente difficiuli di astrazione cumplettamente tutte e dipendenze interne, cusì avemu bisognu di mantene a furchetta interna, ma mantene a furchetta interna è u sviluppu soprattuttu open source ùn hà micca travagliatu.

Second tentativu: "Inner first"

** Cum'è un secondu tentativu, avemu trasfirutu à un mudellu di sviluppu "prima internu", induve a maiò parte di u sviluppu si faci in-house è i cambiamenti sò fatti à u codice open source nantu à una basa regulare. Ancu se stu mudellu hè più adattatu per u nostru casu d'usu, hà prublemi inherenti. Impulsà direttamente tutte e diffirenzii à u repositoriu open source è poi pruvà à risolve i cunflitti di fusione più tardi hè una opzione, ma hè assai tempu. I sviluppatori in a maiò parte di i casi pruvate micca di fà questu ogni volta chì rivedenu u so codice. In u risultatu, questu serà fattu assai menu freti, in batch, è cusì rende più difficiuli di risolve i cunflitti di fusione dopu.

A terza volta hà travagliatu!

I dui tentativi falluti citati sopra anu risultatu in u repositoriu WhereHows GitHub chì resta fora di data per un bellu pezzu. A squadra hà cuntinuatu à migliurà e caratteristiche è l'architettura di u produttu, cusì chì a versione interna di WhereHows per LinkedIn hè diventata più avanzata cà a versione open source. Hà avutu ancu un novu nome - DataHub. Basatu nantu à i tentativi falluti precedenti, a squadra hà decisu di sviluppà una soluzione scalabile à longu andà.

Per ogni novu prughjettu open source, a squadra open source di LinkedIn cunsiglia è sustene un mudellu di sviluppu in quale i moduli di u prugettu sò sviluppati interamente in open source. L'artefatti versionati sò implementati in un repositoriu publicu è dopu verificati in l'artefattu internu di LinkedIn utilizendu dumanda di biblioteca esterna (ELR). Dopu stu mudellu di sviluppu ùn hè micca solu bè per quelli chì utilizanu open source, ma ancu risultati in una architettura modulare, extensible è pluggable.

Tuttavia, una applicazione back-end matura cum'è DataHub necessitarà una quantità significativa di tempu per ghjunghje à questu statu. Questu preclude ancu a pussibilità di un approvvigionamentu apertu una implementazione cumpletamente funzionante prima chì tutte e dipendenze interne sò state completamente astratte. Hè per quessa chì avemu sviluppatu strumenti chì ci aiutanu à fà cuntributi open source più veloce è cun assai menu dolore. Questa suluzione benefiziu sia a squadra di metadata (sviluppatore di DataHub) sia a cumunità open source. I seguenti sezzioni discuteranu stu novu approcciu.

L'automatizazione di l'editoria Open Source

L'ultimu approcciu di a squadra di Metadata à u DataHub open source hè di sviluppà un strumentu chì sincronizza automaticamente a basa di codice interna è u repository open source. E caratteristiche di altu livellu di stu toolkit includenu:

  1. Sincronizza u codice LinkedIn à / da open source, simili rsync.
  2. Generazione di header di licenza, simile à Apache Rat.
  3. Genere automaticamente logs di commit open source da i logs di commit interni.
  4. Impedisce i cambiamenti interni chì rompenu e custruzzioni open source prova di dipendenza.

I seguenti subsections approfondiranu e funzioni sopra citate chì anu prublemi interessanti.

Sincronizazione di u codice fonte

A cuntrariu di a versione open source di DataHub, chì hè un solu repository GitHub, a versione LinkedIn di DataHub hè una cumminazione di repositori multipli (chjamati internamente). multiprodotti). L'interfaccia DataHub, a biblioteca di mudelli di metadati, u serviziu di backend di magazzinu di metadati è i travaglii in streaming residenu in repositori separati in LinkedIn. Tuttavia, per fà più faciule per l'utilizatori open source, avemu un solu repository per a versione open source di DataHub.

Open Source DataHub: piattaforma di ricerca è scuperta di metadati di LinkedIn

Figura 1: Sincronizazione trà i repositori LinkedIn DataHub è un solu repository DataHub fonte aperta

Per sustene i flussi di travagliu automatizati di custruzzione, spinta è pull, u nostru novu strumentu crea automaticamente una mappatura à livellu di fugliale chì currisponde à ogni fugliale fonte. Tuttavia, u toolkit richiede una cunfigurazione iniziale è l'utilizatori devenu furnisce una mappatura di moduli di altu livellu cum'è mostratu quì sottu.

{
  "datahub-dao": [
    "${datahub-frontend}/datahub-dao"
  ],
  "gms/impl": [
    "${dataset-gms}/impl",
    "${user-gms}/impl"
  ],
  "metadata-dao": [
    "${metadata-models}/metadata-dao"
  ],
  "metadata-builders": [
    "${metadata-models}/metadata-builders"
  ]
}

A mappatura à u livellu di u modulu hè un JSON simplice chì e chjave sò i moduli di destinazione in u repositoriu open source è i valori sò a lista di i moduli fonte in i repositori LinkedIn. Ogni modulu di destinazione in un repository open source pò esse alimentatu da qualsiasi quantità di moduli fonte. Per indicà i nomi interni di i repositori in i moduli fonte, utilizate interpolazione di stringhe in stile Bash. Utilizendu un schedariu di mapping à livellu di modulu, l'arnesi creanu un schedariu di mapping à livellu di u schedariu scannendu tutti i schedari in cartulari assuciati.

{
  "${metadata-models}/metadata-builders/src/main/java/com/linkedin/Foo.java":
"metadata-builders/src/main/java/com/linkedin/Foo.java",
  "${metadata-models}/metadata-builders/src/main/java/com/linkedin/Bar.java":
"metadata-builders/src/main/java/com/linkedin/Bar.java",
  "${metadata-models}/metadata-builders/build.gradle": null,
}

A mappa di u nivellu di u schedariu hè automaticamente creata da i strumenti; però, pò ancu esse aghjurnatu manualmente da l'utilizatore. Questu hè un mapping 1: 1 di un schedariu fonte di LinkedIn à un schedariu in u repositoriu open source. Ci hè parechje regule assuciate cù sta creazione automatica di associazioni di schedari:

  • In u casu di più moduli di fonti per un modulu di destinazione in open source, ponu esse cunflitti, per esempiu u listessu. FQCN, esistenti in più di un modulu fonte. Cum'è una strategia di risoluzione di cunflittu, i nostri arnesi predeterminanu l'opzione "l'ultimu vince".
  • "null" significa chì u schedariu fonte ùn hè micca parte di u repository open source.
  • Dopu ogni sottumissione o estrazione open source, sta mappatura hè aghjurnata automaticamente è hè creata una snapshot. Questu hè necessariu per identificà aghjunte è eliminazioni da u codice fonte da l'ultima azzione.

Creazione di logs di cummissione

I logs di commit per i commits open source sò ancu generati automaticamente fusionendu i logs di commit di repositori interni. Quì sottu hè un esempiu di logu di cummissione per vede a struttura di u logu di cummissione generatu da u nostru strumentu. Un commit indica chjaramente quali versioni di i repositori surghjenti sò imballati in quellu commit è furnisce un riassuntu di u logu di commit. Verificate questu impegnà utilizendu un veru esempiu di un logu di cummissione generatu da u nostru toolkit.

metadata-models 29.0.0 -> 30.0.0
    Added aspect model foo
    Fixed issue bar

dataset-gms 2.3.0 -> 2.3.4
    Added rest.li API to serve foo aspect

MP_VERSION=dataset-gms:2.3.4
MP_VERSION=metadata-models:30.0.0

Test di dipendenza

LinkedIn hà infrastruttura di prova di dipendenza, chì aiuta à assicurà chì i cambiamenti à un multiproductu internu ùn rompenu micca l'assemblea di multiproducts dipendente. U repositoriu di DataHub open source ùn hè micca multi-prodottu, è ùn pò micca esse una dependenza diretta di qualsiasi multi-prodottu, ma cù l'aiutu di un involucro multi-prodottu chì piglia u codice fonte di DataHub open source, pudemu ancu aduprà sta prova di dipendenza. Cusì, ogni cambiamentu (chì pò esse espostu dopu) à qualsiasi di i multiproducti chì alimentanu u repositoriu di DataHub open source attiva un avvenimentu di custruzzione in u multiproductu di shell. Per quessa, ogni cambiamentu chì ùn riesce à custruisce un pruduttu wrapper falla i testi prima di cummettà u pruduttu originale è hè tornatu.

Questu hè un mecanismu utile chì aiuta à prevene qualsiasi cummit internu chì rompe a custruzzione open source è a detecta à u tempu di cummit. Senza questu, saria abbastanza difficiuli di determinà quale impegnu internu hà causatu u fallimentu di a custruzzione di u repositoriu open source, perchè accumpagnamu cambiamenti interni à u repository open source DataHub.

Differenze trà DataHub open source è a nostra versione di produzzione

Finu à questu puntu, avemu discututu a nostra suluzione per sincronizà duie versioni di repository DataHub, ma ùn avemu micca delineatu i motivi per quessa avemu bisognu di dui flussi di sviluppu diffirenti in u primu locu. In questa sezione, listeremu e sferenze trà a versione publica di DataHub è a versione di pruduzzione nantu à i servitori di LinkedIn, è spieghemu i motivi di sti differenzi.

Una fonte di discrepanza deriva da u fattu chì a nostra versione di produzzione hà dipendenze nantu à u codice chì ùn hè ancu open source, cum'è LinkedIn's Offspring (u quadru di iniezione di dependenza interna di LinkedIn). A prole hè largamente usata in codebases internu perchè hè u metudu preferitu per gestisce a cunfigurazione dinamica. Ma ùn hè micca open source; cusì avemu bisognu di truvà alternative open source à u DataHub open source.

Ci sò ancu altri motivi. Cume creemu estensioni à u mudellu di metadati per i bisogni di LinkedIn, queste estensioni sò tipicamente assai specifiche à LinkedIn è ùn ponu micca direttamente applicà à altri ambienti. Per esempiu, avemu etichette assai specifiche per l'ID di participanti è altri tipi di metadati currispondenti. Dunque, avemu avà escludutu queste estensioni da u mudellu di metadati open source di DataHub. Cume ci impegnemu cù a cumunità è capiscenu i so bisogni, avemu da travaglià nantu à e versioni open source cumuni di sti estensioni induve necessariu.

A facilità d'utilizazione è l'adattazione più faciule per a cumunità open source anu inspiratu ancu alcune di e differenze trà e duie versioni di DataHub. Differenze in l'infrastruttura di trasfurmazioni di flussu sò un bon esempiu di questu. Ancu s'è a nostra versione interna utilizeghja un quadru di trasfurmazione di flussu gestitu, avemu sceltu di utilizà un processamentu di flussu integratu (autonomu) per a versione open source perchè evita di creà una altra dependenza di l'infrastruttura.

Un altru esempiu di a diffarenza hè di avè un unicu GMS (Generalized Metadata Store) in una implementazione open source piuttostu cà parechji GMS. GMA (Generalized Metadata Architecture) hè u nome di l'architettura back-end per DataHub, è GMS hè a tenda di metadata in u cuntestu di GMA. GMA hè una architettura assai flexible chì permette di distribuisce ogni custruzzione di dati (per esempiu, datasets, utenti, etc.) in u so propiu magazzinu di metadati, o almacenà parechje custruzzioni di dati in un unicu magazzinu di metadati, sempre chì u registru chì cuntene a mappa di struttura di dati in GMS hè aghjurnatu. Per facilità d'utilizazione, avemu sceltu una sola istanza GMS chì guarda tutte e diverse costruzioni di dati in u DataHub open source.

Una lista cumpleta di e differenze trà e duie implementazioni hè datu in a tabella sottu.

Cumpressu di Produse
LinkedIn DataHub
Open Source DataHub

Costruzioni di dati supportati
1) Datasets 2) Users 3) Metrics 4) ML Features 5) Charts 6) Dashboards
1) Datasets 2) Users

Fonti di metadati supportati per i datasets
1) Ambry 2) Couchbase 3) Dalids 4) Marini 5) HDFS 6) Hive 7) Kafka 8) MongoDB 9) MySQL 10) Oracle 11) Pinot 12) Prestu 12) Essa 13) Teradata 13) Vector 14) Venice
Hive Kafka RDBMS

Pub-sub
LinkedIn Kafka
Kafka cunfluente

Trattamentu di u flussu
arrinisciutu
Incrustatu (standalone)

Iniezione di dipendenza è cunfigurazione dinamica
LinkedIn Offspring
primavera

Custruì u Tooling
Ligradle (involucro Gradle internu di LinkedIn)
Gradlew

CI / CD
CRT (CI/CD internu di LinkedIn)
TravisCI e Hub Docker

Magazzini di metadati
Distribuzione multipla GMS: 1) Dataset GMS 2) User GMS 3) Metric GMS 4) Feature GMS 5) Chart/Dashboard GMS
Single GMS per: 1) Datasets 2) Users

Microservizi in cuntenituri Docker

Docker simplifica l'implementazione è a distribuzione di l'applicazioni cù containerizazione. Ogni parte di u serviziu in DataHub hè open source, cumpresi cumpunenti di l'infrastruttura cum'è Kafka, Elasticsearch, neo4j и MySQL, hà a so propria maghjina Docker. Per orchestrate i cuntenituri Docker chì avemu usatu Docker Compose.

Open Source DataHub: piattaforma di ricerca è scuperta di metadati di LinkedIn

Figura 2: Architettura DataHub *open source**

Pudete vede l'architettura d'altu livellu di DataHub in l'imagine sopra. In più di i cumpunenti di l'infrastruttura, hà quattru cuntenituri Docker diffirenti:

datahub-gms: serviziu di almacenamentu di metadati

datahub-frontend: applicazione Play, serve l'interfaccia di DataHub.

datahub-mce-consumer: applicazione Kafka Streams, chì usa u flussu di l'avvenimentu di cambiamentu di metadati (MCE) è aghjurnà u magazinu di metadata.

datahub-mae-consumer: applicazione Kafka Streams, chì usa un flussu d'avvenimenti di auditu di metadati (MAE) è crea un indexu di ricerca è una basa di dati di gràficu.

Documentazione di repository open source è post uriginale di u blog DataHub cuntene infurmazione più dettagliata nantu à e funzioni di diversi servizii.

CI/CD in DataHub hè open source

U repositoriu di DataHub open source usa TravisCI per l'integrazione cuntinua è Hub Docker per u sviluppu cuntinuu. Tutti dui anu una bona integrazione di GitHub è sò faciuli di stallà. Per a maiò parte di l'infrastruttura open source sviluppata da a cumunità o cumpagnie private (es. Confluente), L'imaghjini Docker sò creati è implementati à Docker Hub per facilità d'utilizazione da a cumunità. Qualchese maghjina Docker truvata in Docker Hub pò esse facilmente aduprata cù un cumandamentu simplice docker-pull.

Cù ogni impegnu à u repository open source DataHub, tutte l'imaghjini di Docker sò automaticamente custruiti è implementati in Docker Hub cù l'etichetta "ultima". Se Docker Hub hè cunfiguratu cù alcuni nominà i rami di l'espressione regulare, tutti i tag in u repositoriu open source sò ancu liberati cù nomi di tag currispondenti in Docker Hub.

Utilizà DataHub

Configurazione di DataHub hè assai simplice è si compone di trè passi simplici:

  1. Clonate u repository open source è eseguite tutti i cuntenituri Docker cù docker-compose utilizendu u script docker-compose furnitu per un principiu rapidu.
  2. Scaricate i dati di mostra furniti in u repositoriu utilizendu l'uttellu di linea di cummanda chì hè ancu furnitu.
  3. Sfoglia DataHub in u vostru navigatore.

Tracciatu attivamente Gitter chat cunfiguratu ancu per e dumande veloci. L'utilizatori ponu ancu creà prublemi direttamente in u repository GitHub. U più impurtante, accogliemu è apprezzemu tutti i feedback è suggerimenti!

Piani di u futuru

Attualmente, ogni infrastruttura o microserviziu per DataHub open source hè custruitu cum'è un containeru Docker, è tuttu u sistema hè orchestratu cù docker-compose. Data a popularità è diffusa Kubernetes, Vulemu ancu furnisce una soluzione basata in Kubernetes in un futuru vicinu.

Avemu ancu prughjettatu di furnisce una soluzione chiavi in ​​mano per implementà DataHub in un serviziu nuvola publicu cum'è azzurro, AWS o Google Cloud. In vista di l'annunziu recente di a migrazione di LinkedIn à Azure, questu serà allineatu cù e priorità interne di a squadra di metadata.

Infine, ma micca menu, grazie à tutti i primi adoptanti di DataHub in a cumunità open source chì anu valutatu l'alfa di DataHub è ci anu aiutatu à identificà i prublemi è à migliurà a documentazione.

Source: www.habr.com

Add a comment