DataHub с открытым исходным кодом: платформа поиска и обнаружения метаданных от LinkedIn

DataHub с открытым исходным кодом: платформа поиска и обнаружения метаданных от LinkedIn

Hiteršnja iskanje potrebnih podatkov je nujno za vsako podjetje, ki se zanaša na obsežne količine podatkov za odločanje. To ne vpliva le na produktivnost uporabnikov podatkov (vključno z analitikumi, razvijalci strojnega učenja, strokovnjaki za obdelavo podatkov in podatkovnimi inženirji), ampak tudi neposredno vpliva na končne izdelke, ki so odvisni od kakovostne verige strojnega učenja (ML). Poleg tega trend uvajanja ali ustvarjanja platform strojnega učenja naravno postavlja vprašanje: kakšna je vaša metoda za interno odkrivanje funkcij, modelov, metrik, podatkovnih nizov itd.

V tem članku bomo razložili, kako smo objavili vir podatkov pod odprto licenco DataHub na naši platformi za iskanje in odkrivanje metapodatkov, od prvih dni projekta WhereHows. LinkedIn podpira svojo različico DataHuba ločeno od različice z odprto kodo. Začeli bomo z razlago, zakaj potrebujemo dve ločeni razvojni okolji, nato pa bomo razpravljali o prvih pristopih k uporabi WhereHows z odprto kodo in primerjali našo interno (proizvodno) različico DataHuba z različico na GitHub. Prav tako bomo delili podrobnosti o našem novem avtomatiziranem rešenju za pošiljanje in prejemanje posodobitev z odprto kodo, da bi sinhronizirali oba repozitorija. Na koncu bomo podali navodila, kako začeti uporabljati DataHub z odprto kodo, in kratko razpravljali o njegovi arhitekturi.

DataHub с открытым исходным кодом: платформа поиска и обнаружения метаданных от LinkedIn

WhereHows je zdaj DataHub!

Ekipa metapodatkov LinkedIn je prej predstavila DataHub (naslednik WhereHows), platformo za iskanje in odkrivanje metapodatkov LinkedIn in delila načrte za njeno odpiranje. Kmalu po tem obvestilu smo izdali alfa različico DataHuba in jo delili s skupnostjo. Od takrat nenehno prispevamo k repozitoriju in sodelujemo z zainteresiranimi uporabniki pri dodajanju najbolj zaželenih funkcij in reševanju težav. Zdaj smo veseli, da lahko uradno napovemo DataHub na GitHubu.

Pristopi z odprto kodo

WhereHows, prvotni portal LinkedIn za iskanje podatkov in njihovega izvora, je bil odprt kot notranji projekt; ekipa metapodatkov ga je odprla izvorni kodo leta 2016. Od takrat naprej je ekipa vedno vzdrževala dve ločeni bazi kode - eno za odprto kodo in drugo za notranjo uporabo LinkedIna, saj niso bile vse funkcije izdelka, razvite za primere uporabe LinkedIna, splošno uporabne za širšo javnost. Poleg tega ima WhereHows nekatere notranje odvisnosti (infrastruktura, knjižnice itd.), katere izvorna koda ni odprta. V naslednjih letih je WhereHows prestal skozi številne iteracije in razvojne cikle, kar je sinhronizacijo obeh baz kode postavilo v velik izziv. Ekipa za metapodatke je skozi leta poskušala uporabiti različne pristope, da bi poskušala sinhronizirati notranji razvoj in razvoj z odprto kodo.

Prvi poskus: „Najprej odprta koda“

Sprva smo sledili modelu razvoja „najprej odprta koda“, kjer poteka osnovni razvoj v repozitoriju z odprto kodo, spremembe pa se vnesejo za notranje uvajanje. Težava s tem pristopom je, da je koda vedno najprej poslana na GitHub, preden je popolnoma preverjena znotraj. Dokler ne bodo izvedene spremembe iz repozitorija z odprto kodo in ne bo izvedeno novo interno uvajanje, ne bomo odkrili nobenih proizvodnih težav. V primeru slabe implementacije je bilo prav tako zelo težko določiti povzročitelja, ker so bile spremembe vnašane po skupinah.

Poleg tega je ta model zmanjšal produktivnost ekipe pri razvoju novih funkcij, ki so zahtevale hitre iteracije, saj je vsako spremembo najprej treba postaviti v repozitorij z odprto kodo, nato pa jo prenesti v notranji repozitorij. Da bi skrajšali obdelovalni čas, bi bilo potrebno popravilo ali spremembo najprej opraviti v notranjem repozitoriju, vendar je to postalo ogromen problem, ko je prišlo do združevanja teh sprememb nazaj v repozitorij z odprto kodo, ker sta se obe repozitoriji iztrgala iz sinhronizacije.

To je model, ki ga je veliko lažje uvesti za skupne platforme, knjižnice ali infrastrukturne projekte, kot pa za popolnoma funkcionalne uporabniške spletne aplikacije. Poleg tega je ta model popolnoma primeren za projekte, ki se že od začetka opirajo na odprto kodo, vendar je bilo WhereHows zasnovano kot popolnoma notranja spletna aplikacija. Res je bilo zapleteno popolnoma se razbiti od vseh notranjih odvisnosti, zato smo morali ohraniti notranji razvod, vendar ohranitev notranjega razveda in razvoj predvsem na odprti kodi nista povsem delovala.

Druga poskus: „Najprej notranji“

**Kot drugi poskus smo prešli na model razvoja „Najprej notranji“, kjer se glavni razvoj odvija znotraj podjetja, spremembe pa se redno vnašajo v odprto kodo. Čeprav je ta model najbolj primeren za naš primer uporabe, ima svoje izzive. Neposredno pošiljanje vseh razlik v repozitorij z odprto kodo, nato pa poskušanje reševanja konfliktov združitev pozneje je ena možnost, vendar vzame veliko časa. Večina razvijalcev se pri vsakem pregledu kode trudi, da tega ne počne. Tako se bo to izvajalo veliko redkeje, v serijah, kar pa oteži nadaljnje reševanje konfliktov združitev.

Tretjič je vse uspelo!

Dva zgoraj omenjena neuspešna poskusa sta privedla do tega, da je repozitorij WhereHows GitHub dolgo ostajal zastarel. Ekipa je nadaljevala z izboljševanjem funkcionalnosti in arhitekture izdelka, zato je notranja različica WhereHows za LinkedIn postajala vse bolj dovršena od različice z odprto kodo. Imela je celo novo ime — DataHub. Na podlagi prejšnjih neuspešnih poskusov se je ekipa odločila razviti skalabilno dolgoročno rešitev.

Za vsak nov projekt z odprto kodo ekipa razvijalcev odprte kode LinkedIn svetuje in podpira model razvoja, v katerem so moduli projekta popolnoma razviti z odprto kodo. Artefakti z podporo verzijam se razporedijo v javni repozitorij, nato se vrnejo v notranji artefakt LinkedIn s pomočjo zahteve po zunanji knjižnici (ELR)Sledenje tej razvojni shemi ni samo koristno za tiste, ki uporabljajo odprtokodna orodja, temveč tudi vodi k oblikovanju bolj modularne, razširljive in povezljive arhitekture.

Vendar pa bo za dosego tega stanja zrelega notranjega aplikacije, kot je DataHub, potrebnega bistveno veliko časa. To tudi izključuje možnost odprtokodne popolne implementacije, preden so vse notranje odvisnosti popolnoma abstraktne. Zato smo razvili orodja, ki nam pomagajo prispevati z odprto kodo hitreje in veliko manj boleče. Ta rešitev je koristna tako za ekipo metapodatkov (razvijalca DataHub) kot tudi za skupnost odprte kode. V naslednjih razdelkih bo obravnavan ta nov pristop.

Avtomatizacija objave z odprto kodo

Zadnji pristop skupine metapodatkov k DataHub z odprto kodo je razvoj orodja, ki samodejno sinhronizira notranjo kodo in repozitorij z odprto kodo. Visok nivo funkcij tega orodja vključuje:

  1. Sinhronizacija kode LinkedIn z / iz odprte kode, podobno rsync.
  2. Generiranje naslova licence, podobno Apache Rat.
  3. Samodejna ustvarjanje dnevnikov prenosa odprte kode iz notranjih dnevnikov prenosa.
  4. Preprečevanje notranjih sprememb, ki kršijo zgradbo z odprto kodo, s testiranjem odvisnosti.

V naslednjih podpoglavjih bodo podrobno obravnavane zgoraj omenjene funkcije, ki predstavljajo zanimive izzive.

Sinhronizacija izvorne kode

V nasprotju z različico DataHub z odprto kodo, ki je enoten repozitorij GitHub, različica DataHub za LinkedIn predstavlja kombinacijo več repozitorijev (znotraj družbe imenovanih multiproducts). Vmesnik DataHub, knjižnica modelov metapodatkov, strežniška storitev za shranjevanje metapodatkov in pretakajoče naloge so v različnih repozitorijih v LinkedIn. Vendar pa imamo za olajšanje dela uporabnikov z odprto kodo enoten repozitorij za različico DataHub z odprto kodo.

DataHub с открытым исходным кодом: платформа поиска и обнаружения метаданных от LinkedIn

Slika 1: Sinhronizacija med repozitoriji LinkedIn DataHub in enotnim repozitorijem DataHub z odprto kodo

Za podporo avtomatiziranih delovnih tokov sestavljanja, pošiljanja in pridobivanja naš nov pripomoček samodejno ustvarja ujemanje na ravni datoteke, ki ustreza vsakemu izvorni datoteki. Vendar pa za orodje potrebna začetna konfiguracija in uporabniki morajo zagotoviti visoko raven prikaza modulov, kot je prikazano spodaj.

{
  "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"
  ]
}

Ujemanje na ravni modula je preprost JSON, kjer so ključi ciljni moduli v repozitoriju z odprto kodo, vrednosti pa seznam izvornih modulov v repozitjih LinkedIn. Kadar koli lahko vsak cilj modula v repozitoriju z odprto kodo črpa iz več izvornih modulov. Za označevanje notranjih imen repozitorijev v izvornih modulih se uporablja nizovna interpolacija v slogu Bash. Z uporabo ujemanja na ravni modula orodja ustvarjajo ujemanje na ravni datotek, tako da preiščejo vse datoteke v povezanih imenikih.

{
  "${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,
}

Ujemanje na ravni datotek se avtomatsko ustvari z orodji; lahko pa ga tudi uporabnik ročno posodobi. To je 1:1 ujemanje izvorne datoteke LinkedIn s datoteko v repozitoriju z odprto kodo. Obstaja več pravil, povezanih s tem samodejnim ustvarjanjem ujemanja datotek:

  • V primeru več izvornih modulov za cilj modula v odprtem računalniškem sistemu lahko nastanejo konflikti, na primer, isti FQCN, ki obstaja v več kot enem izvoru modula. Kot strategijo za reševanje konfliktov naše orodje privzeto uporablja možnost »zadnji zmagovalec«.
  • "null" pomeni, da izvorna datoteka ni del repozitorija z odprto kodo.
  • Po vsakem pošiljanju ali izvleku iz odprtega vira se to ujemanje samodejno posodobi in ustvari posnetek. To je potrebno za ugotavljanje dodajanj in brisanj izvorne kode po zadnjem dejanju.

Ustvarjanje zapisov o commitih

Zapiski o commitih za commite z odprtim virom se prav tako samodejno ustvarjajo s povečanjem zapisov o commitih notranjih repozitorijev. Spodaj je primer zapisa o commitih, ki prikazuje strukturo zapisa, ustvarjenega z našim orodjem. Commit jasno navaja, katere različice izvornih repozitorijev so pakirane v ta commit in nudi povzetek zapisa o commitih. Preverite ta commit na realnem primeru zapisa o commitih, ustvarjenega z našim orodjem.

metadata-models 29.0.0 -> 30.0.0
    Dodan aspekt model foo
    Popravljena težava bar

dataset-gms 2.3.0 -> 2.3.4
    Dodan rest.li API za servis foo aspekta

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

Testiranje odvisnosti

LinkedIn ima infrastrukturo testiranja odvisnosti, ki pomaga zagotoviti, da spremembe notranjega večproduktnega sistema ne motijo sestave odvisnih večproduktov. Repozitorij DataHub z odprtim virom ni večproduktni in ne more biti neposredna odvisnost od katerega koli večprodukta, a s pomočjo večproduktne lupine, ki izvleče izvorno kodo DataHub z odprtim virom, še vedno lahko uporabimo to sistem testiranja odvisnosti. Tako vsaka sprememba (ki bo morda kasneje odprta) v kateremkoli od večproduktov, ki napajajo repozitorij DataHub z odprtim virom, sproži dogodek sestave v večproduktni lupini. Zato vsaka sprememba, ki ne omogoča grajenja večproduktne lupine, ne opravi preizkusov pred commitom izvornega večprodukta in se vrne.

To je koristen mehanizem, ki pomaga preprečiti vsak notranji commit, ki prekine sestavo z odprtim virom, in ga odkrije med ustvarjanjem commita. Brez tega bi bilo precej težko ugotoviti, kateri notranji commit je povzročil neuspeh sestave repozitorija z odprtim virom, ker v repozitorij DataHub z odprtim virom umeščamo paketne notranje spremembe.

Razlike između DataHub-a s otvorenim izvorom i naše produkcijske verzije

Do sada smo raspravljali o našem rešenju za sinhronizaciju dve verzije repozitorijuma DataHub, ali još nismo jasno definisali razloge zbog kojih nam zapravo trebaju dva različita toka razvoja. U ovom odeljku ćemo navesti razlike između javne verzije DataHub-a i produkcijske verzije na LinkedIn serverima, kao i objasniti razloge za te razlike.

Jedan od izvora razlika proizilazi iz činjenice da naša produkcijska verzija zavisi od koda koji još nije otvorenog izvora, kao što je LinkedIn-ov Offspring (unutrašnja struktura implementacije zavisnosti LinkedIn-a). Offspring se široko koristi u unutrašnjoj kodnoj bazi, jer je to preferirani metod upravljanja dinamičkom konfiguracijom. Međutim, to nije otvorenog izvora; stoga smo morali pronaći alternative s otvorenim izvorom za DataHub s otvorenim izvorom.

Postoje i drugi razlozi. Kako razvijamo proširenja modela metapodataka za potrebe LinkedIn-a, ta proširenja obično su veoma specifična za LinkedIn i možda se ne mogu direktno primeniti na druge okruženja. Na primer, imamo veoma specifične oznake za identifikatore učesnika i druge tipove metapodataka. Stoga smo trenutno isključili ta proširenja iz modela metapodataka DataHub-a s otvorenim izvorom. Kako se budemo povezivali s zajednicom i razumevali njihove potrebe, radit ćemo na zajedničkim verzijama tih proširenja s otvorenim izvorom kad god to bude potrebno.

Jednostavnost korišćenja i lakša prilagodba za zajednicu otvorenog koda takođe su inspiisali neke razlike između dve verzije DataHub-a. Razlike u infrastrukturi obrade podataka su dobar primer toga. Iako naša unutrašnja verzija koristi infrastrukturu upravljane obrade podataka, odlučili smo se za korišćenje ugrađene (standalone) obrade podataka za verziju s otvorenim izvorom, jer to omogućava izbegavanje stvaranja još jedne zavisnosti infrastrukture.

Drugi primer razlike je prisotnost enega GMS (Generična skladišče metapodatkov) v odprtokodni implementaciji, namesto več GMS. GMA (Generična arhitektura metapodatkov) je naziv notranje arhitekture za DataHub, medtem ko je GMS skladišče metapodatkov v kontekstu GMA. GMA je zelo fleksibilna arhitektura, ki vam omogoča razporejanje vsake podatkovne strukture (na primer, nabori podatkov, uporabniki itd.) v lastno skladišče metapodatkov ali pa shranjevanje več podatkovnih struktur v enem skladišču metapodatkov, dokler se register, ki vsebuje zemljevid podatkovne strukture v GMS, posodablja. Za enostavno uporabo smo izbrali en zgled GMS, ki shranjuje vse različne podatkovne strukture v odprtokodnem DataHub-u.

Poln seznam razlik med dvema implementacijama je prikazan v spodnji tabeli.

Značilnosti izdelka
LinkedIn DataHub
Odprtokodni DataHub

Podprte podatkovne strukture
1) Nabori podatkov 2) Uporabniki 3) Metri 4) ML Značilnosti 5) Grafi 6) Nadzorne plošče
1) Nabori podatkov 2) Uporabniki

Podprti viri metapodatkov za nabor podatkov
1) Ambry 2) Couchbase 3) Dalids 4) Espresso 5) HDFS 6) Hive 7) Kafka 8) MongoDB 9) MySQL 10) Oracle 11) Pinot 12) Presto 12) Seas 13) Teradata 13) Vector 14) Venice
Hive Kafka RDBMS

Pub-sub
LinkedIn Kafka
Confluent Kafka

Obdelava toka
Urejeno
Vgrajeno (samostojno)

Injekcija odvisnosti & dinamična konfiguracija
LinkedIn Offspring
Spring

Orodja za gradnjo
Ligradle (LinkedInov interni Gradle ovitek)
Gradlew

CI/CD
CRT (LinkedInov interni CI/CD)
TravisCI in Docker Hub

Skladišča metapodatkov
Porazdeljenih več GMS: 1) Dataset GMS 2) User GMS 3) Metric GMS 4) Feature GMS 5) Chart/Dashboard GMS
En GMS za: 1) Nabori podatkov 2) Uporabniki

Mikrostoritve v kontejnerjih Docker

Docker poenostavlja uvajanje in distribucijo aplikacij s pomočjo kontejnerizacije. Vsak del storitve v odprtokodnem DataHub-u, vključno s komponentami infrastrukture, kot sta Kafka, Elasticsearch, Neo4j in MySQL, ima svojo sliko Docker. Za orkestracijo kontejnerjev Docker smo uporabili Docker Compose.

DataHub с открытым исходным кодом: платформа поиска и обнаружения метаданных от LinkedIn

Slika 2: Arhitektura DataHub *odprt kod**

Lahko vidite visoko ravno arhitekturo DataHub na sliki zgoraj. Poleg infrastrukturnih komponent ima štiri različne slike Docker:

datahub-gms: storitev skladišča metapodatkov

datahub-frontend: aplikacija Igraj, ki služi vmesniku DataHub.

datahub-mce-consumer: aplikacija Kafka Streams, ki uporablja tok dogodkov spremembe metapodatkov (MCE) in posodablja skladišče metapodatkov.

datahub-mae-consumer: aplikacija Kafka Streams, ki uporablja tok dogodkov revizije metapodatkov (MAE) in ustvarja indeksno bazo podatkov in graf.

Dokumentacija za repozitorij z odprto kodo in izvirni zapis iz bloga DataHub vsebujejo podrobnejše informacije o funkcionalnostih različnih storitev.

CI / CD v DataHub z odprto kodo

Repizitorij DataHub z odprto kodo uporablja TravisCI za neprekinjeno integracijo in Docker Hub za neprekinjeno uvajanje. Obe imata dobro integracijo z GitHubom in sta enostavni za nastavitev. Večina infrastrukture z odprto kodo, ki jo je razvila skupnost ali zasebna podjetja (na primer, Confluent), je zasnovana tako, da ustvarja Docker slike, ki se uvajajo v Docker Hub, da bi olajšali uporabo skupnosti. Vsako Docker sliko, najdeno v Docker Hub, lahko enostavno uporabimo s preprosto ukazom docker pull.

Ob vsakem commit-u v repozitorij z odprto kodo DataHub se vse Docker slike samodejno ustvarijo in uvajajo v Docker Hub z oznako „latest“. Če je v Docker Hub nastavljena neka naming branch regex, vse oznake v repozitoriju z odprto kodo prav tako izidejo s ustreznimi imeni oznak v Docker Hub.

Uporaba DataHub

Nastavitev DataHub je zelo enostavna in vključuje tri preproste korake:

  1. Kloni repozitorij z odprto kodo in zaženi vse Docker kontejnerje s pomočjo docker-compose z uporabo tega predloženega skripta za hitro zagon.
  2. Naloži vzorce podatkov, predstavljene v repozitoriju, s pomočjo orodja ukazne vrstice, ki je prav tako na voljo.
  3. Ogled DataHub v brskalniku.

Aktivno spremljamo Gitter klepet je prav tako nastavljen za hitra vprašanja. Uporabniki lahko tudi odpirajo težave neposredno v repozitoriju GitHub. Najpomembneje pa je, da pozdravljamo in cenimo vse povratne informacije in predloge!

Načrti za prihodnost

Trenutno je vsaka infrastruktura ali mikroservis za DataHub z odprto kodo zgrajena kot Docker kontejner, celoten sistem pa se orkestrira z docker-compose. Glede na priljubljenost in široko uporabo Kubernetes, bi želeli v kratkem ponuditi rešitev, ki temelji na Kubernetes.

Prav tako načrtujemo ponuditi pripravljeno rešitev za uvajanje DataHub v javni oblačni storitvi, kot je Azure, AWS ili Google Cloud. Glede na nedavne napovedi o migraciji LinkedIn na Azure, bo to ustrezalo notranjim prednostim skupine za metadata.

In še zadnje, a nič manj pomembno: hvala vsem prvotnim uporabnikom DataHub v skupnosti z odprtokodnim izvorom, ki so cenili alfa različice DataHub in nam pomagali odkriti težave ter izboljšati dokumentacijo.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster