Avaallika DataHub: LinkedIn'i metaandmete otsimise ja avastamise platvorm
Kiire andmete leidmine on vajalik igas ettevĂ”ttes, mis tugineb suurtele andmemassidele nende andmete pĂ”hjal tehtavate otsuste langetamiseks. See mĂ”jutab mitte ainult andmekasutajate tootlikkust (sealhulgas analĂŒĂŒtikuid, masinĂ”ppe arendajaid, andmetöötlejaid ja andengineere), vaid ka otseselt lĂ”ppprodukte, mis sĂ”ltuvad kvaliteetsest masinĂ”ppe (ML) torustikust. Lisaks kutsub trend masinĂ”ppe platvormide rakendamisel vĂ”i loomisel loomulikult esile kĂŒsimuse: kuidas toimub teie sisene funktsioonide, mudelite, nĂ€itajate, andmestike jne avastamine?
Selles artiklis rÀÀgime, kuidas me avaldasime andmeallika avatud litsentsiga meie metaandmete otsingu ja avastamise platvormil, alustades projekti esimestest pĂ€evadest . LinkedIn toetab oma versiooni DataHubi eraldi avatud lĂ€htekoodiga versioonist. Alustame selgitusest, miks on meil vaja kahte eraldi arenduskeskkonda, seejĂ€rel arutame esimesi lĂ€henemisviise WhereHows'i kasutamiseks avatud lĂ€htekoodiga ning teeme vĂ”rdluse meie sisemise (tootmis) versiooni DataHubist avatud versiooniga. . Jagame ka ĂŒksikasju meie uue automatiseeritud lahenduse kohta avatud lĂ€htekoodiga versioonide saatmiseks ja vastuvĂ”tmiseks, et sĂŒnkroonida kahte hoidlat. LĂ”puks anname juhised, kuidas alustada DataHubi kasutamist avatud lĂ€htekoodiga ning arutame lĂŒhidalt selle arhitektuuri.

WhereHows on nĂŒĂŒd DataHub!
LinkedIn'i metaandmete meeskond tutvustas varem (WhereHows'i jĂ€rglane), LinkedIn'i metaandmete otsingu ja avastamise platvorm, ning jagasime tulevikuplaane selle avamiseks. Peale selle teadaande avaldamist lasime vĂ€lja DataHubi alfa versiooni ja jagasime selle kogukonnaga. Sellest ajast alates oleme pidevalt panustanud hoidlasse ja teinud koostööd huvirĂŒhmadega, et lisada kĂ”ige nĂ”utumaid funktsioone ja lahendada probleeme. NĂŒĂŒd oleme uhked, et saame kuulutada ametlikku vĂ€ljalaskmist. .
Avaallika lÀhenemised
WhereHows, LinkedIn'i algne andmete otsimise ja pĂ€ritolu portaal, avati siseprojektina; metaandmete meeskond avas selle . Sellest ajast alates on meeskond alati hoidnud kahte erinevat koodibaasi - ĂŒhte avatud lĂ€htekoodiga ja teist LinkedIni sisekasutuseks, kuna mitte kĂ”ik LinkedIni kasutusjuhtide jaoks vĂ€lja töötatud tootefunktsioonid ei olnud laiemale publikule rakendatavad. Lisaks on WhereHows'il mĂ”ned sisemised sĂ”ltuvused (infrastruktuur, raamatukogud jne), mille lĂ€htekood ei ole avatud. JĂ€rgnevate aastate jooksul on WhereHows lĂ€binud mitmeid iteratsioone ja arendus-tsĂŒkleid, mis on muutnud kahe koodibaasi sĂŒnkroonimise suureks vĂ€ljakutseks. Metaandmete meeskond on aastate jooksul pĂŒĂŒdnud kasutada erinevaid lĂ€henemisviise, et proovida sĂŒnkroonida sisearendust ja avatud lĂ€htekoodi arendust.
Esimene katse: âEsiteks avatud koodâ
Alguses jĂ€rgnesime arendustegevuse mudelile "esiteks avatud lĂ€htekood", kus pĂ”hialused arendatakse avatud lĂ€htekoodiga hoidlas ja muudatused kantakse ĂŒle sisemisse juurutamisse. Selle lĂ€henemise probleem seisneb selles, et kood saadetakse alati esmalt GitHubi, enne kui see on tĂ€ielikult sisemiselt kontrollitud. Seni, kuni muudatused avatud lĂ€htekoodiga hoidlast ei rakendata ja uut sisemist juurutamist ei toimu, ei avasta me tootmisprobleeme. Halva juurutamise korral oli samuti vĂ€ga keeruline teha kindlaks sĂŒĂŒdlane, kuna muudatusi tehti partiidena.
Lisaks vĂ€hendas see mudel meeskonna tootlikkust uute funktsioonide arendamisel, mis nĂ”udsid kiireid iteratsioone, kuna see sundis kĂ”iki muudatusi esmalt avatud lĂ€htekoodiga hoidlasse panema ja seejĂ€rel sisemisse hoidlasse ĂŒle kandma. Töötlusaegade lĂŒhendamiseks vĂ”is vajaliku paranduse vĂ”i muudatuse esmalt teha sisehoidlas, kuid see tekitas tohutu probleemi, kui tuli need muudatused tagasi avatud lĂ€htekoodiga hoidlasse ĂŒhendada, sest kaks hoidlat olid desĂŒnkroonitud.
Seda mudelit on palju lihtsam rakendada ĂŒldiste platvormide, raamatukogude vĂ”i infrastruktuuri projektide jaoks kui tĂ€iesti funktsionaalsete kasutajate veebirakenduste jaoks. Lisaks sobib see mudel ideaalselt projektidele, mis algavad avatud lĂ€htekoodiga esimesest pĂ€evast, kuid WhereHows loodi tĂ€iesti sisemise veebirakendusena. Oli tĂ”esti keeruline tĂ€ielikult eralduda kĂ”igist sisemistest sĂ”ltuvustest, seetĂ”ttu pidime sĂ€ilitama sisemise haru, kuid sisemise haru sĂ€ilitamine ja peamiselt avatud lĂ€htekoodiga arendus ei töötanud pĂ€ris hĂ€sti.
Teine katse: «Esiteks sisemine»
** Teise katse raames oleme lĂ€inud ĂŒle âesmajĂ€rjekorras siseveebiarenduseleâ mudelile, kus peamine arendus toimub ettevĂ”tte siseselt ning muudatused tehakse avatud lĂ€htekoodiga regulaarselt. Kuigi see mudel sobib meie kasutusele kĂ”ige paremini, kaasnevad sellega probleemid. KĂ”ikide erinevuste otsene edastamine avatud lĂ€htekoodiga hoidlasse ning seejĂ€rel jĂ”udude jagamine sulandumisprobleemide lahendamiseks hiljem - see on variant, kuid see on aeganĂ”udev. Arendajad pĂŒĂŒavad enamikul juhtudel seda mitte igal koodikontrollil teha. SeetĂ”ttu toimub see palju harvemini, partiidena, ja seega raskendab see hilisemaid sulandumisprobleemide lahendusi.
Kolmandal korral lÀks kÔik korda!
Kaks varem mainitud ebaĂ”nnestumist tĂ”id kaasa selle, et WhereHows GitHub'i hoidla jĂ€i pikaks ajaks ajakohastamata. Meeskond jĂ€tkas toote funktsioonide ja arhitektuuri tĂ€iustamist, mistĂ”ttu LinkedIn'i siseversioon WhereHowsist muutus jĂ€rjest arenenumaks avatud lĂ€htekoodiga versioonist. Sellel oli isegi uus nimi â DataHub. Eelnevatest ebaĂ”nnestumistest lĂ€htuvalt otsustas meeskond vĂ€lja töötada skaleeritava pikaajalise lahenduse.
Iga uue avatud lĂ€htekoodiga projekti puhul nĂ”ustab ja toetab LinkedIn'i avatud lĂ€htekoodiga arendajate meeskond arendusmudelit, kus projekti moodulid vĂ€lja töötatakse tĂ€ielikult avatud lĂ€htekoodiga. Versioonitoega artefaktid paigutatakse avalikku hoidlasse ning seejĂ€rel tuuakse tagasi LinkedIn'i siseartefakti kaudu . Selle arendusmudeli jĂ€rgimine on mitte ainult kasulik avatud lĂ€htekoodi kasutajatele, vaid toob kaasa ka modulaarse, laiendatava ja ĂŒhendatava arhitektuuri loomise.
Kuid selle saavutamiseks kĂŒpse sisemise rakenduse, nĂ€iteks DataHubi puhul, on vajalik mĂ€rkimisvÀÀrne aeg. See vĂ€listab tĂ€ielikult avatud lĂ€htekoodiga rakenduse vĂ”imaluse enne, kui kĂ”ik sisemised sĂ”ltuvused on tĂ€ielikult abstraheeritud. SeetĂ”ttu oleme tutvustanud tööriistu, mis aitavad meil avatud lĂ€htekoodi panuseid kiiremini ja oluliselt valutumalt teha. See lahendus on kasulik nii metadatatmeeskonnale (DataHubi arendaja) kui ka avatud lĂ€htekoodi kogukonnale. JĂ€rgmistes osades kĂ€sitletakse seda uut lĂ€henemist.
Avatud lÀhtekoodiga avaldamise automatiseerimine
Metadatatmeeskonna uus lĂ€henemine avatud lĂ€htekoodiga DataHubile hĂ”lmab tööriista loomist, mis automaatselt sĂŒnkroniseerib sisemise koodibaasi ja avatud lĂ€htekoodiga hoidla. Selle tööriista kĂ”rgetasemelised funktsioonid hĂ”lmavad:
- LinkedIni koodi sĂŒnkroonimine avatud lĂ€htekoodiga ja tagasi, sarnaselt .
- Licensi pealkirja genereerimine, sarnaselt .
- Automaatne avatud lĂ€htekoodiga pĂŒhenduste logide genereerimine sisesisestest pĂŒhenduste logidest.
- Siseste muudatuste takistamine, mis vÔivad rikkuda avatud lÀhtekoodiga kogumit, lÀbi .
Allpool olevates alajaotustes kĂ€sitletakse ĂŒksikasjalikult ĂŒlaltoodud funktsioone, millega seotud on huvitavad probleemid.
Allika koodi sĂŒnkroonimine
Erinevalt avatud lĂ€htekoodiga DataHub versioonist, mis on ĂŒksik GitHubi hoidla, on LinkedIn'i DataHub versioon mitmete hoidlate kombinatsioon (töötajate seas tuntud kui ). DataHubi kasutajaliides, metaandmete mudelite teek, metaandmete salvestamisteenuse server ja voogedastustööd asuvad LinkedIn'is erinevates hoidlates. Siiski, et hĂ”lbustada avatud lĂ€htekoodiga kasutajate tööd, on meil olemas ĂŒksik hoidla avatud lĂ€htekoodiga DataHubi versiooni jaoks.

Joonis 1: SĂŒnkroonimine hoidlate vahel LinkedIn DataHub ja ĂŒhes hoidlas DataHub on avatud lĂ€htekoodiga
Automatiseeritud töövoogude toetamiseks, koostamiseks, saatmiseks ja eraldamiseks loob meie uus tööriist automaatselt faili tasemel vaste igale algfailile. Kuid tööriistade jaoks on vajalik esialgne konfigureerimine ning kasutajad peavad esitama kÔrgema taseme mooduli kaardistamise, nagu allpool nÀidatud.
{
"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"
]
}Mooduli taseme kaardistamine on lihtne JSON, mille vÔtmed on sihitud moodulid avatud lÀhtekoodiga hoidlates ja vÀÀrtused on loetelu algmoodulitest LinkedIn'i hoidlates. Iga sihitud moodul avatud lÀhtekoodiga hoidlates vÔib olla toidetud mistahes arvu algmoodulitest. Algmoodulites kasutatavaid sisehoidlate nimesid eristatakse Bash'i stiilis. Kasutades mooduli taseme kaardistamise faili, loob tööriistade komplekt faili taseme kaardistamise, skanneerides kÔik failid seotud kataloogides.
{
"${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,
}Failitasandi loomine toimub automaatselt tööriistade kaudu; siiski vÔib seda ka kasutaja kÀsitsi uuendada. See on 1:1 seos LinkedIn'i algfaili ja avatud lÀhtekoodiga hoidlas oleva faili vahel. Sellega seoses on mitmeid reegleid failitasandi automaatseks loomiseks:
- Kui avatud lĂ€htekoodiga sihmodule jaoks on mitmeid algmodule, vĂ”ivad tekkida konfliktid, nĂ€iteks sama , mis eksisteerib enam kui ĂŒhes algmodulis. Konfliktide lahendamise strateegiana kasutavad meie tööriistad vaikimisi valikut "viimane vĂ”idab".
- "null" tÀhendab, et algfail ei kuulu avatud lÀhtekoodiga hoidla hulka.
- PÀrast iga avatud lÀhtekoodi saatmist vÔi selle vÀljavÔtmist vÀrskendatakse see seos automaatselt ja luuakse hetkepilt. See on vajalik, et mÀÀrata, millisest lÀhtekoodist pÀrast viimast tegevust on lisatud vÔi eemaldatud.
Kohandatud logide loomine
Avatud lĂ€htekoodi commit-logid luuakse automaatselt ka siserepositooriumide logide ĂŒhendamise teel. Allpool on toodud commit-logi nĂ€idis, et nĂ€idata meie tööriista loodud commit-logi struktuuri. Commit nĂ€itab selgelt, millised versioonid lĂ€hte-repositooriumidest on selle commit'i pakitud, ja annab kokkuvĂ”tte commit-logist. Vaadake see reaalses commit-logi nĂ€ites, mis on loodud meie tööriista abil.
metadata-models 29.0.0 -> 30.0.0
Lisatud aspekti mudel foo
Probleem lahendatud bar
dataset-gms 2.3.0 -> 2.3.4
Lisatud rest.li API foo aspekti teenindamiseks
MP_VERSION=dataset-gms:2.3.4
MP_VERSION=metadata-models:30.0.0SÔltuvuste testimine
LinkedInil on , mis aitab tagada, et sisemised mitme toote muudatused ei riku seotud mitme toote kogumist. Avohutusallikaga DataHub'i hoidla ei ole mitme toote, ja see ei saa olla otsene sĂ”ltuvus ĂŒkskĂ”ik millisest mitmest tootest, kuid mitme toote kestaga, mis ekstraktib avohutusallika DataHub'i lĂ€htekoodi, saame me endiselt seda sĂ”ltuvuskatsetuse sĂŒsteemi kasutada. Seega, iga muudatus (mille vĂ”ib hiljem avalikustada) millisestki mitmest tootest, mis toidab avohutusallikaga DataHub'i hoidlat, kĂ€ivitab kestatootes ehitamise sĂŒndmuse. Seega, iga muudatus, mis ei vĂ”imalda mitme toote kestat ehitada, ei lĂ€binud testimist enne lĂ€hte mitme toote kommitimist ja tagastatakse.
See on kasulik mehhanism, mis aitab vĂ€ltida mis tahes sisemist commit'i, mis rikub avatud lĂ€htekoodiga ehitamist, ning tuvastab selle commit'i loomise ajal. Ilma selleta oleks ĂŒsna keeruline mÀÀrata, milline sisemine commit viis avatud lĂ€htekoodiga hoidla ehituse ebaĂ”nnestumiseni, kuna me paigutame paketiga seotud sisemised muudatused DataHub avatud lĂ€htekoodiga hoidlasse.
Erinevused DataHub avatud lÀhtekoodiga ja meie tootmisversiooni vahel
Seni oleme arutanud meie lahendust kahe DataHub hoidla versiooni sĂŒnkroonimiseks, kuid me ei ole seni mÀÀratlenud pĂ”hjuseid, miks meil ĂŒldse on vaja kahte erinevat arendusteed. KĂ€esolevas peatĂŒkis toome vĂ€lja erinevused DataHubi avaliku versiooni ja LinkedIn'i serverites kasutatava tootmisversiooni vahel ning selgitame nende erinevuste pĂ”hjuseid.
Ăks lahknevuse allikas tuleneb tĂ”siasjast, et meie tootmisversioon sĂ”ltub veel avatud lĂ€htekoodiga koodist, nĂ€iteks LinkedInâi Offspring (LinkedInâi sisemiste sĂ”ltuvuste struktuur). Offspring on laialdaselt kasutusel meie sisemises koodibaasis, kuna see on eelistatud meetod dĂŒnaamilise konfiguratsiooni haldamiseks. Kuid see ei ole avatud lĂ€htekoodiga; seetĂ”ttu pidime leidma avatud lĂ€htekoodiga alternatiivid DataHubile.
On ka teisi pĂ”hjuseid. Kui me arendame metadata mudeleid LinkedIni vajaduste jaoks, on need laiendused tavaliselt vĂ€ga spetsiifilised LinkedInile ega pruugi otse teiste keskkondadega seostatavad olla. NĂ€iteks on meil vĂ€ga spetsiifilised sildid osalejate identifikaatorite ja teiste vastavuse metadata tĂŒĂŒpide jaoks. Seega oleme praegu need laiendused avatud lĂ€htekoodiga DataHubi metadata mudelist vĂ€lja jĂ€tnud. Kui me suhtleme kogukonnaga ja mĂ”istame nende vajadusi, töötame nende laienduste avatud lĂ€htekoodiga versioonide kallal, kui see on vajalik.
Kasutusmugavust ja lihtsamat kohandamist avatud lĂ€htekoodiga kogukonna jaoks on ka inspireerinud mĂ”ned erinevused kahe DataHubi versiooni vahel. Erinevused voogedastuse taristutes on hea nĂ€ide. Kuigi meie sisemine versioon kasutab hallatavat voogedastustaristut, otsustasime avatud lĂ€htekoodiga versioonis kasutada integreeritud (iseisev) voogedastust, kuna see vĂ”imaldab vĂ€ltida veel ĂŒhe taristus sĂ”ltuvuse loomist.
Teine nĂ€ide erinevusest on ĂŒks GMS (Ăldine Metainfode MĂ€lukoht) avatud lĂ€htekoodiga rakenduses, mitte mitu GMS-i. GMA (Ăldine Metainfode Arhitektuur) on DataHubi sisemise arhitektuuri nimetus, samas kui GMS on metainfode mĂ€lukoht GMA kontekstis. GMA on vĂ€ga paindlik arhitektuur, mis vĂ”imaldab teil jagada iga andmekonstruktsiooni (nt andmestikud, kasutajad jne) omaenda metainfode mĂ€lukohta vĂ”i hoida mitut andmekonstruktsiooni ĂŒhes metainfode mĂ€lukohas, kuni GMS-is andmestruktuuri kuvamise registrit vĂ€rskendatakse. Lihtsuse huvides valisime ĂŒhe GMS-i, mis salvestab kĂ”ik erinevad andmekonstruktsioonid avatud lĂ€htekoodiga DataHubis.
Kaks rakendust eristavate erinevuste tÀiendav loetelu on toodud tabelis allpool.
Toote omadused
LinkedIn DataHub
Avatud LĂ€htekoodiga DataHub
Toetatud andmekonstruktsioonid
1) Andmestikud 2) Kasutajad 3) NĂ€itajad 4) ML omadused 5) Diagrammid 6) Armatuurlaud
1) Andmestikud 2) Kasutajad
Toetatud metainfode allikad andmestike jaoks
1) 2) Couchbase 3) 4) 5) HDFS 6) Hive 7) Kafka 8) MongoDB 9) MySQL 10) Oracle 11) 12) Presto 12) 13) Teradata 13) Vector 14)
Hive Kafka RDBMS
Pub-sub
Confluent Kafka
Voogedetöötlus
Haldatud
Sisseehitatud (iseseisev)
SĂ”ltuvuste sisestamine ja dĂŒnaamiline konfigureerimine
LinkedIn'i jÀrglased
Ehitusriistad
Ligradle (LinkedIn'i sisemine Gradle'i wrapper)
CI/CD
CRT (LinkedIn'i sisemine CI/CD)
ja
Metadaatide salvestused
Jaotatud mitme GMS: 1) Dataset GMS 2) User GMS 3) Metric GMS 4) Feature GMS 5) Chart/Dashboard GMS
Ăksik GMS: 1) Andmestikud 2) Kasutajad
Mikroteenused Docker'i konteinerites
lihtsustab rakenduste juurutamist ja levitamist . Iga DataHub'i avatud lÀhtekoodiga teenuse osa, sealhulgas infrastruktuuri komponendid nagu Kafka, , ja , omab oma Docker'i pilti. Docker'i konteinerite orkestreerimiseks kasutasime .

Joonis 2: Arhitektuur DataHub *avamooduli*
Saate nÀha DataHub'i kÔrgetasemelist arhitektuuri eespool olevast pildist. Lisaks infrastruktuuri komponentidele on tal neli erinevat Docker'i konteinerit:
datahub-gms: metadaatide salvestusteenus
datahub-frontend: rakendus , mis teenindab DataHub'i liidest.
datahub-mce-consumer: rakendus , mis kasutab metadaatide muutmise sĂŒndmuste voogu (MCE) ja uuendab metadaatide salvestust.
datahub-mae-consumer: rakendus , mis kasutab metadaatide auditi sĂŒndmuste voogu (MAE) ja loob otsinguindeksi ja graafi andmebaasi.
Avatud lÀhtekoodiga repository dokumentatsioon ja sisaldab pÔhjalikku teavet erinevate teenuste omaduste kohta.
CI / CD DataHubis avatud lÀhtekoodiga
DataHubi avatud lÀhtekoodiga hoidla kasutab katkestusteta integreerimist ja katkestusteta juurutamist. MÔlemad integreeruvad hÀsti GitHubiga ja neid on lihtne seadistada. Suurema osa avatud lÀhtekoodiga infrastruktuurist, mille on vÀlja töötanud kogukond vÔi eraettevÔtted (nÀiteks ), on loodud Docker'i pildid ja need on juurutatud Docker Hub's, et kogukond saaks neid hÔlpsasti kasutada. Iga Docker'i pilt, mille leiab Docker Hub'ist, on lihtne kasutada lihtsa kÀsu abil .
Iga kord, kui DataHubi avatud lÀhtekoodiga hoidlas toimub commit, luuakse ja juurutatakse kÔik Docker'i pildid automaatselt Docker Hub's koos 'latest' sildiga. Kui Docker Hub's on seadistatud mÔningaid , siis vabastatakse kÔik sildid avatud lÀhtekoodiga hoidlas ka vastavate siltide nimedega Docker Hub's.
DataHubi kasutamine
on vÀga lihtne ja koosneb kolmest lihtsast sammust:
- Kloonige avatud lÀhtekoodiga repot ja kÀivitage kÔik Docker konteinerid docker-compose abil, kasutades pakutud docker-compose skripti kiireks kÀivitamiseks.
- Laadige alla andmemustrid, mis on esitatud reposis, kasutades ka kÀsurea tööriista, mis on samuti saadud.
- Sirvige DataHub'i oma brauseris.
Aktiivselt jĂ€lgitud on samuti seadistatud kiirete kĂŒsimuste jaoks. Kasutajad saavad luua probleeme otse GitHubi repole. Eriti hindame ja ootame kĂ”iki tagasiside ja ettepanekuid!
Tulevikuplaanid
Praegu on iga DataHub'i avatud lĂ€htekoodiga infrastruktuur vĂ”i mikroteenus ehitatud kui Docker konteiner, ja kogu sĂŒsteem orkestreeritakse . Arvestades selle populaarsust ja laialdast kasutust , tahame lĂ€hitulevikus pakkuda ka Kubernetes'i pĂ”hist lahendust.
Kavandame pakkuda ka valmis lahendust DataHub'i juurutamiseks avalikus pilveteenuses, nĂ€iteks , vĂ”i . Arvestades LinkedIn'i hiljutist teadet migratsioonist Azure'i, vastab see rĂŒhma metainformatsiooni sisemistele prioriteetidele.
Ja viimane, kuid mitte vÀhem tÀhtis: suur tÀnu kÔigile DataHubi esimestele kasutajatele avatud lÀhtekoodiga kogukonnas, kes hindasid DataHubi alfa versioone ja aitasid meil tuvastada probleeme ning parandada dokumentatsiooni.
Allikas: habr.com
