Data Mesh: kuidas töötada andmetega ilma monoliidita

Tere, Habr! Dodo Pizza Engineeringis armastame andmeid (kes ei armasta?). NĂŒĂŒd rÀÀgime loo sellest, kuidas koguda kokku kĂ”ik Dodo Pizza andmed ja anda igale töötajale mugav juurdepÀÀs sellele andmemassiivile. Ülesanne tĂ€htsusega: hoida Data Engineeringi meeskonna nĂ€rve.

Data Mesh: kuidas töötada andmetega ilma monoliidita

Meie, nagu tÔelised Pliushkinid, kogume erinevat teavet meie pitsarestoranide kohta:

  • mĂ€letame kĂ”iki kasutajate tellimusi;
  • teame, kui kaua kulus esimesest pizzast valmistamiseks Syktyvkaris;
  • nĂ€eme, kui kaua pitsad jahtuvad soojendushyllal VoroneĆŸis praegu;
  • salvestame andmed toidukaupade mahakandmise kohta;
  • ja palju muud.

Dodo Pizzas vastutab andmete haldamise eest mitmed meeskonnad, ĂŒks neist on Data Engineeringi meeskond. Praegu seisame silmitsi ĂŒlesandega: anda igale töötajale mugav juurdepÀÀs sellele andmemassiivile.

Kui hakkasime mĂ”tlema, kuidas seda teha ja arutasime ĂŒlesannet, leidsime vĂ€ga huvitava lĂ€henemise andmehaldusele - Data Mesh (link viib suurepĂ€rase artiklini). Selle ideed sobisid suurepĂ€raselt meie ettekujutusega, kuidas soovime oma sĂŒsteemi ĂŒles ehitada. Edasi artiklis jagame meie uuendatud lĂ€henemist ja seda, kuidas nĂ€eme selle rakendamist Dodo Pizza Engineeringis.

Mida mÔtleme «andmete» all

Esiteks, mÀÀratleme, mida mÔistame andmete all Dodo Pizza Engineeringis:

  • SĂŒndmused, mida teenused saadavad (meil on ĂŒldine andmebuss, mis on ĂŒles ehitatud RabbitMQ abil);
  • Kirjed andmebaasis (meie jaoks on need MySQL ja CosmosDB);
  • KlĂ”psu jĂ€lgimine mobiilirakendusest ja veebisaidilt.

Kuna Dodo Pizza ettevÔte peab neid andmeid kasutama ja neile toetuma, on oluline, et jÀrgida jÀrgmisi tingimusi:

  • Need peavad olema terviklikud. Peame olema kindlad, et ei muuda andmeid nende töötlemise, salvestamise ja kuvamise kĂ€igus. Kui ettevĂ”te ei saa meie andmetele toetuda, ei ole nendest mingit kasu.
  • Need peavad olema ajamĂ€rgistatud ja mitte kustutatavad. See tĂ€hendab, et soovime igal ajal tagasi minna ja vaadata andmeid teatud ajavahemiku kohta. NĂ€iteks teada, kui palju pitsasid mĂŒĂŒdi 8. juulil 2018.
  • Need peavad olema usaldusvÀÀrsed. Andmete kogumise ja salvestamise protsessis peame sĂ€ilitama mitte ainult terviklikkuse, vaid ka usaldusvÀÀrsuse. Me ei tohi kaotada andmeid, ajaklippe, sest koos nendega kaotame oma klientide (nii sisemiste kui ka vĂ€limiste) usalduse.
  • Need peavad olema stabiilse struktuuriga – me kirjutame pĂ€ringud nendele andmetele. Me ei sooviks, et rakenduskoodi muutumise, refaktoreerimise kĂ€igus need muutuksid nii palju, et meie pĂ€ringud lakkavad töötamast. See, kes kirjutab pĂ€ringud, ei saa kunagi teada, et olete teinud refaktoreerimise, kuni kĂ”ik on tĂ€ielikult katki. Me ei tahaks seda klientidelt teada saada.

Arvestades nende nĂ”uete kĂ”iki, jĂ”udsime jĂ€reldusele, et andmed Dodo's on toode. Sama nagu teenuse avalik API. Seega peab andmeid haldama sama meeskond, kes haldab teenust. Samuti peavad andmeskeemi muudatused olema alati tagasipöördumisega ĂŒhilduvad.

Traditsiooniline lĂ€henemine – AndmejĂ€rv

Suurte andmete usaldusvÀÀrseks salvestamiseks ja töötlemiseks on olemas traditsiooniline lĂ€henemine, mida paljud ettevĂ”tted, kes töötavad sellise teabega, jĂ€rgivad – AndmejĂ€rv. Selle lĂ€henemisviisi raames koguvad andmeinsenerid teavet kĂ”igist sĂŒsteemi komponentidest ja koguvad selle ĂŒhte suure hulka (nĂ€iteks vĂ”ib see olla Hadoop, Azure Kusto, Apache Cassandra vĂ”i isegi MySQL replikatsioon, kui andmed sinna mahuvad).

Edasi kirjutavad samad insenerid pĂ€ringud sellele ladustamisele. Dodo Pizza Engineeringu rakendamine eeldab, et Data Engineeringi meeskond haldab analĂŒĂŒtilise ladustamise andmeskeemi.

Sellise arengu korral muutub meeskond vÀga kurvaks, ja siin on, miks:

  • Neil tuleb jĂ€lgida muutusi kĂ”igis TEENUSTES ettevĂ”ttes. Ja neid on palju ning muudatusi on ka palju (keskmiselt sulandame ~100 pull request'i nĂ€dalas, samas kui paljud teenused ei tee pull request'e ĂŒldse).
  • Andmeskeemi muutmisel peavad tootmise omanik ja meeskond, kes andmeskeemi muudetakse, ootama, kuni Data Engineering kirjutab koodi, mis on vajalik muudatuste toetamiseks. Olukord, kus ĂŒks meeskond ootab teist, on meil juba ammu olemas ja see, et see muutub „normaalseks” osaks arendusprotsessist, ei ole soovitav.
  • Neil peab olema arusaam KOGU ettevĂ”tte Ă€ri kohta. Pitsarestoranide ketti vĂ”ib pidada lihtsaks Ă€riharuks, kuid see on vaid vĂ€line mulje. VĂ€ga keeruline on koguda ĂŒhte meeskonda piisavalt pĂ€devusi, et luua kogu ettevĂ”tte jaoks adekvaatne andmemudel.
  • See on ainus tĂ”rkeallikas. Iga kord, kui on vaja muudatusi teha teenuse tagastatavates andmetes vĂ”i kirjutada pĂ€ring, langevad kĂ”ik need ĂŒlesanded andmeinseneride meeskonna Ă”lgadele. Selle tulemusena on meeskond ĂŒlekoormatud backlog'iga.

Kasutatakse, et meeskond asub tohutu vajaduste ristumiskohas ja tĂ”enĂ€oliselt ei suuda neid kĂ”iki rahuldada. Samuti on nad pidevas ajapuuduses ja stressis. Me ei sooviks seda. Seega peame mĂ”tlema, kuidas neid probleeme lahendada ja samas vĂ”imaldada andmete analĂŒĂŒsi.

Liikudes Data Lake'ist Data Mesh'i

Õnneks pole me selle kĂŒsimuse esitanud ĂŒksnes meie. TĂ”epoolest, sarnane probleem on tööstuses juba lahendatud (alleluuja!). Ainult teises valdkonnas: rakenduste juurutamises. Jah, rÀÀgin DevOps'i lĂ€henemisest, kus meeskond mÀÀrab, kuidas toota oma loodud toodet.

Sarnast lĂ€henemist Data Lake'i probleemide lahendamiseks pakkus Zhamak Dehghani, ThoughtWorksi konsultant. Vaadates, kuidas sarnaseid ĂŒlesandeid lahendavad Netflix ja Spotify, kirjutas ta suurepĂ€rase artikli How to Move Beyond a Monolithic Data Lake to a Distributed Data Mesh(link sellele oli artikli alguses). Peamised ideed, mida me sellest vĂ€lja tĂ”ime:

  • Jagada suur Data Lake andme domeenideks, mis sarnanevad domeenide ĂŒlesehitusele. Iga domeen on vĂ€ike bounded context.
  • Feature Team'id, mis vastutavad DDD domeenide eest, vastutavad ka vastavate andme domeenide eest. Nad haldavad skeemi, teevad selles muudatusi, laadivad andmeid. Samuti teavad nad, kuidas andmete laadimist muuta ilma, et rakendus puruneks. Teadmised ei kao kuhugi. Andmete avamiseks ei pea nad kuhugi minema. Meeskond juhib kogu arendusprotsessi operatiivsete andmete muutmisest kuni analĂŒĂŒtiliste andmete esitamiseni teistele osapooltele. Üks meeskond haldab kĂ”ike, mis seondub domeeniga (nii Ă€ri domeeni kui ka andme domeeni).
  • Data Engineer – roll Feature Team'is. See ei pea olema tingimata eraldi isik, kuid meeskonnal peab olema see oskus.

Ja samal ajal töötab Data Engineering'i meeskond...

Kui kujutame ette, et kĂ”ik see teostatakse sĂ”rmenipsuga, jÀÀb vastata kahele kĂŒsimusele:

Millega hakkab nĂŒĂŒd tegelema Data Engineering'i meeskond? Dodo Pizza Engineering'is on juba platvormi/SRE meeskond. Nende ĂŒlesanne on pakkuda arendajatele tööriistu teenuste lihtsaks juurutamiseks. Data Engineering'i meeskond tĂ€idab sama rolli, vaid andmete jaoks.

Operatiivsete andmete muutmine analĂŒĂŒtilisteks on keeruline protsess. Muuta analĂŒĂŒtilised andmed kergesti kĂ€ttesaadavaks kogu ettevĂ”ttele on veelgi keerulisem. Just nende probleemide lahendamisega tegeleb Data Engineering'i meeskond.

Kavatseme anda Feature Team'ile mugava tööriistade ja praktikate komplekti, millega nad saavad oma teenusest andmeid kogu ettevĂ”ttele avaldada. Samuti vastutame andmeprotsessi (jĂ€rjekorrad, usaldusvÀÀrne salvestus, klastrid andmete töötlemiseks) ĂŒldiste infrastruktuuri osade eest.

Kuidas saavad Data Engineer'i oskused ilmuda Feature Team'is? Feature Team'iga on keerulisem. Loomulikult vĂ”iksime proovida vĂ€rbata igaĂŒhte meie tiimidesse Data Engineer'iks. Kuid see on vĂ€ga keeruline. Leida inimene, kellel on hea andmete töötlemise taust, ja veenda teda töötama toote meeskonnas on raske.

Dodo suur eelis on see, et me armastame sisemist koolitust. Nii et meie plaan on selline: Data Engineering'i meeskond alustab teatud teenuste andmete avaldamist, nutses, astudes, kuid jÀtkab kaktuse neelamist. Kui me saame aru, et meil on avaldamiseks valmis protsess, hakkame sellest rÀÀkima Feature Team'ile.

Meil on mitmeid viise, kuidas seda teha:

  1. DevForum, kus rÀÀgime, kuidas vÀlja nÀeb protsess, mille me oleme loonud, millised on tööriistad ja kuidas neid kÔige efektiivsemalt kasutada.
  2. Esinemine DevForum'il aitab meil koguda tagasisidet tootearendajatelt. PĂ€rast seda saame liituda tootemeeskondadega ja aidata neil andmete avaldamisega seotud probleeme lahendada, korraldada meeskondadele koolitusi.

Andmete tarbimine

Olen praegu palju rÀÀkinud andmete avaldamisest. Kuid on ka andmete tarbimine. Mis on selle kohta?

Meil on suurepĂ€rane BI meeskond, kes kirjutab juhtivale ettevĂ”ttele vĂ€ga keerulisi aruandeid. Dodo IS sees on palju aruandeid meie partneritele, mis aitavad neil pizzeriaid juhtida. Meie uues mudelis mĂ”tleme neile kui andmete tarbijatele, kellel on oma andmevaldkonnad. Ja just tarbijad vastutavad oma valdkondade eest. MĂ”nikord vĂ”ib tarbija domeen olla kirjeldatud ĂŒhe pĂ€ringuga analĂŒĂŒtika andmelaos – ja see on hea. Kuid mĂ”istame, et see ei pruugi alati toimida. Just seetĂ”ttu soovime, et platvorm, mille loome toote meeskondadele, vĂ”iks kasutada ka andmete tarbijad (sest Dodo IS aruannete puhul on need samad meeskonnad).

Nii nÀeme me andmetega töötamist Dodo Pizza Engineeringus. Ootame huviga teie mÔtteid selle kohta kommentaarides.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster