Data Mesh: kuidas töötada andmetega ilma monoliidita

Tere, Habr! Meie Dodo Pizza Engineeringus armastame andmeid (kes tÀnapÀeval ei armastaks?). See on meie lugu sellest, kuidas koguda kÔik Dodo Pizza maailma andmed ja anda igale töötajale lihtne juurdepÀÀs sellele tohutule andmekogumile. EesmÀrk on hoida andmetehnika meeskond valvel.

Data Mesh: kuidas töötada andmetega ilma monoliidita

Nagu tÔelised Pljuƥkinid ikka, kogume ka meie igasugust teavet oma pitsarestoranide tegevuse kohta:

  • Me mĂ€letame kĂ”iki kasutajate korraldusi;
  • me teame, kui kaua aega kulus kĂ”ige esimese pitsa valmistamiseks SĂ”ktĂ”vkaris;
  • Me nĂ€eme, kui kaua aega vĂ”tab pitsa jahtumine VoroneĆŸis soojendusriiulil praegu;
  • Me sĂ€ilitame andmeid toodete mahakandmiste kohta;
  • ja paljud paljud teised.

Dodo Pizzas vastutab andmetega töötamise eest praegu mitu meeskonda, millest ĂŒks on andmetehnika meeskond. Nende (st meie) praegune ĂŒlesanne on pakkuda igale ettevĂ”tte töötajale mugavat juurdepÀÀsu sellele tohutule andmekogumile.

Kui hakkasime mĂ”tlema, kuidas seda teha, ja probleemi arutama, leidsime vĂ€ga huvitava lĂ€henemisviisi andmehaldusele – AndmevĂ”rk (Lingilt leiate suurepĂ€rase ja mahuka artikli.) Tema ideed kĂ”lasid vĂ€ga hĂ€sti meie nĂ€gemusega sellest, kuidas me tahame oma sĂŒsteemi ĂŒles ehitada. Artikli ĂŒlejÀÀnud osas uurime meie selle lĂ€henemisviisi ĂŒmbermĂ”testamist ja seda, kuidas me nĂ€eme selle rakendamist Dodo Pizza Engineeringus.

Mida me "andmete" all mÔtleme?

KÔigepealt defineerime, mida me Dodo Pizza Engineeringus andmete all mÔtleme:

  • Teenuste saadetud sĂŒndmused (meil on RabbitMQ abil ehitatud ĂŒhine siin);
  • Andmebaasis olevad kirjed (meie puhul on need MySQL ja CosmosDB);
  • KlĂ”psuvoog mobiilirakendusest ja veebisaidilt.

Selleks, et Dodo Pizza saaks neid andmeid kasutada ja neile tugineda, on oluline, et oleksid tÀidetud jÀrgmised tingimused:

  • Need peavad olema lahutamatud. Peame olema kindlad, et me ei muuda andmeid töötlemise, salvestamise ja kuvamise ajal. Kui ettevĂ”tted ei saa meie andmeid usaldada, pole neist mingit kasu.
  • Need peavad olema ajatempliga ja neid ei tohi ĂŒle kirjutada. See tĂ€hendab, et me tahame igal ajahetkel saada tagasiulatuvaid andmeid ja vaadata selle perioodi andmeid. NĂ€iteks selleks, et teada saada, kui palju pitsasid mĂŒĂŒdi 8. juulil 2018.
  • Nad peavad olema usaldusvÀÀrsed. Andmete kogumisel ja sĂ€ilitamisel peame sĂ€ilitama mitte ainult terviklikkuse, vaid ka usaldusvÀÀrsuse. Me ei tohi kaotada andmeid ega ajalĂ”ike, sest nendega kaotame oma klientide (nii vĂ€liste kui ka sisemiste) usalduse.
  • Neil peab olema stabiilne skeem – me kirjutame nende andmete jaoks pĂ€ringuid. Meile ei meeldiks, kui ĂŒmbertöödeldud rakendus muudaks koodi nii palju, et pĂ€ringud lakkaksid töötamast. PĂ€ringute kirjutaja ei saa enne tĂ€ielikku lagunemist teada, et rakendus on ĂŒmbertöödeldud. Me ei tahaks oma klientidelt sellest kuulda.

KĂ”iki neid nĂ”udeid arvesse vĂ”ttes jĂ”udsime jĂ€reldusele, et Dodo andmed on toode, nagu ka teenuse avalik API. Seega peaksid andmed kuuluma samale meeskonnale, kellele kuulub teenus. Samuti peaksid andmeskeemi muudatused alati olema tagasiĂŒhilduvad.

Traditsiooniline lĂ€henemine – andmejĂ€rv

Suurandmete usaldusvÀÀrse salvestamise ja töötlemise probleemi lahendamiseks on paljude selliste teabekogumitega töötavate ettevĂ”tete traditsiooniline lĂ€henemisviis andmejĂ€rv (Data Lake). Selle lĂ€henemisviisi puhul koguvad andmeinsenerid teavet kĂ”igilt sĂŒsteemikomponentidelt ja salvestavad selle ĂŒhte suurde salvestusruumi (nĂ€iteks Hadoop, Azure Kusto, Apache Cassandra vĂ”i isegi MySQL-i koopia, kui andmed sobivad).

SeejĂ€rel kirjutavad needsamad insenerid pĂ€ringuid sellele andmelaole. Selle lĂ€henemisviisi rakendamine Dodo Pizza Engineeringus tĂ€hendab, et andmetehnika meeskond omab analĂŒĂŒtilise andmelao andmeskeemi.

Selles stsenaariumis muutuvad meeskonnad vÀga kurbadeks kassideks ja siin on pÔhjus, miks:

  • Ta peab jĂ€lgima muutusi KÕIK ettevĂ”ttesisesed teenused. Ja neid on palju ning toimub palju muudatusi (keskmiselt ĂŒhendame ~100 pull requesti nĂ€dalas, samas kui paljud teenused ei tee ĂŒldse ĂŒhtegi pull requesti).
  • Alati, kui andmeskeem muutub, peavad tooteomanik ja andmeskeemi muutev meeskond ootama, kuni andmetehnika kirjutab muudatuste toetamiseks vajaliku koodi. Oleme pikka aega olnud funktsioonikesksed ja olukord, kus ĂŒks meeskond ootab teist, on vĂ€ga haruldane. Me ei taha, et sellest saaks arendusprotsessi "normaalne" osa.
  • Ta peab olema sukeldunud KÕIK EttevĂ”tte Ă€ritegevus. Pitsarestoran tundub lihtsa ettevĂ”ttena, kuid see on vaid pealtnĂ€ha nii. On vĂ€ga raske ĂŒhte meeskonda koondada piisavalt kompetentse, et luua kogu ettevĂ”tte jaoks piisav andmemudel.
  • See on ĂŒhekordne rike. Iga kord, kui teenuse tagastatud andmeid on vaja muuta vĂ”i pĂ€ringut kirjutada, langevad kĂ”ik need ĂŒlesanded andmetehnika meeskonna kanda. Selle tulemusel on meeskonnal ĂŒlekoormatud töömaht.

Selgub, et meeskond seisab silmitsi tohutu hulga vajadustega ja tĂ”enĂ€oliselt ei suuda neid kĂ”iki rahuldada. Samal ajal on nad pideva ajalise surve ja stressi all. Me tĂ”esti ei taha seda. SeetĂ”ttu peame mĂ”tlema, kuidas neid probleeme lahendada, sĂ€ilitades samal ajal andmete analĂŒĂŒsimise vĂ”imaluse.

AndmejÀrvest andmevÔrku liikumine

Õnneks polnud me ainsad, kes seda kĂŒsimust esitasid. Tegelikult on sarnane probleem selles valdkonnas juba lahendatud (halleluuja!). Lihtsalt teises valdkonnas: rakenduste juurutamine. Jah, ma rÀÀgin DevOps-lĂ€henemisest, kus meeskond mÀÀrab, kuidas toodet, mida nad loovad, juurutada.

Sarnase lÀhenemisviisi andmejÀrve probleemide lahendamiseks pakkus vÀlja ThoughtWorksi konsultant Zhamak Dehghani. PÀrast seda, kui ta oli vaadanud, kuidas Netflix ja Spotify sarnaste probleemidega toime tulid, kirjutas ta pÔneva artikli. Kuidas liikuda monoliitsest andmejÀrvest hajutatud andmevÔrguni(Link sellele oli artikli alguses). Peamised ideed, mida me sealt Ôppisime:

  • Jaga suur andmejĂ€rv andmevaldkondadeks, mis on vĂ€ga sarnased valdkonnapĂ”histe disainivaldkondadega. Iga valdkond on vĂ€ike, piiratud kontekst.
  • DDD-domeenide eest vastutav funktsioonide meeskond vastutab ka vastavate andmedomeenide eest. Nad haldavad skeemi, teevad selles muudatusi ja laadivad sinna andmeid. Nad teavad ka kĂ”ike ise: kuidas muuta andmete laadimise protsessi ja vĂ€ltida rikkeid rakenduse muutumisel. See teadmine on alati olemas. Nad ei pea andmetele juurdepÀÀsuks kuhugi minema. Meeskond ise haldab kogu arendustsĂŒklit, alates operatiivandmete muutmisest kuni analĂŒĂŒtiliste andmete edastamiseni kolmandatele osapooltele. Üks meeskond omab kĂ”ike, mis on seotud valdkonnaga (nii Ă€ri- kui ka andmedomeen).
  • Andmeinsener on ĂŒks roll funktsioonide meeskonnas. See ei pea tingimata olema eraldi inimene, kuid see eeldab meeskonnalt selle pĂ€devuse olemasolu.

Samal ajal andmetehnika meeskond


Kui kujutame ette, et seda kĂ”ike saab ĂŒhe sĂ”rmenipsuga teostada, siis jÀÀb veel vastuseta kaks kĂŒsimust:

Mida andmetehnika meeskond nĂŒĂŒd teeb? Dodo Pizza Engineeringul on juba platvormi/SRE meeskond. Selle eesmĂ€rk on pakkuda arendajatele tööriistu teenuste hĂ”lpsaks juurutamiseks. Andmetehnika meeskond tĂ€idab sarnast rolli, aga andmete osas.

Operatiivandmete analĂŒĂŒtilisteks andmeteks muutmine on keeruline protsess. AnalĂŒĂŒtiliste andmete kĂ€ttesaadavaks tegemine kogu ettevĂ”ttele on veelgi keerulisem. Just nende vĂ€ljakutsetega andmetehnika meeskond tegelebki.

Plaanime pakkuda funktsioonide meeskonnale kasutajasĂ”braliku tööriistade ja tavade komplekti, mis vĂ”imaldab neil avaldada oma teenuse andmeid ĂŒlejÀÀnud ettevĂ”ttele. Samuti vastutame andmekanali jagatud infrastruktuuri komponentide eest (jĂ€rjekorrad, usaldusvÀÀrne salvestusruum ja klastrid andmete teisendamiseks).

Kuidas andmeinseneri oskused funktsioonimeeskonnas kajastuvad? Funktsioonimeeskond on keerulisem. Muidugi vÔiksime proovida palgata igale meeskonnale andmeinseneri. Aga see on vÀga keeruline. Raske on leida kedagi, kellel on tugev andmeteaduse taust, ja veenda teda tootemeeskonnas töötama.

Dodo suur eelis on see, et me armastame sisekoolitust. Seega on meie praegune plaan jÀrgmine: andmetehnika meeskond hakkab avaldama andmeid mÔnest teenusest ja samal ajal jÀtkame proovimist. Kui oleme kindlad, et meil on avaldamiseks valmis protsess, hakkame seda funktsioonide meeskonnaga jagama.

Selleks on meil mitu vÔimalust:

  1. DevFoorum, kus selgitame, milline meie loodud protsess vÀlja nÀeb, millised tööriistad meil on ja kuidas neid kÔige tÔhusamalt kasutada.
  2. DevForumil esinemine aitab meil tootearendajatelt tagasisidet koguda. PĂ€rast seda saame liituda tootemeeskondadega ja aidata neil lahendada andmete avaldamise probleeme ning korraldada meeskondadele koolitusi.

Andmete tarbimine

Olen palju rÀÀkinud andmete avaldamisest. Aga on ka tarbimine. Kuidas on lood sellega?

Meil on suurepĂ€rane BI-meeskond, kes kirjutab haldusfirmale vĂ€ga keerukaid aruandeid. Dodo IS sisaldab ka palju aruandeid meie partneritele, aidates neil oma pitsabaare hallata. Meie uues mudelis mĂ”tleme neist kui andmetarbijatest, kellel kĂ”igil on oma andmedomeenid. Ja just need tarbijad vastutavad oma domeenide eest. MĂ”nikord saab tarbijadomeeni kirjeldada ĂŒhe pĂ€ringuga analĂŒĂŒtilisele ladule – ja see on okei. Aga me mĂ”istame, et see ei toimi alati. SeetĂ”ttu tahame, et tootemeeskondadele loodav platvorm oleks kasutatav ka andmetarbijate jaoks (sest Dodo IS-i aruannete puhul on need samad meeskonnad).

Nii nÀeme meie Dodo Pizza Engineeringus andmetöötlust. Tahaksime teie mÔtteid kommentaarides kuulda.

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster