AndmevÔrk: kuidas töötada andmetega ilma monoliidita

Tere, Habr! Me Dodo Pizza Engineeringus armastame andmeid (kes neid praegu ei armasta?). Hetkel rÀÀgime sellest, kuidas koguda kĂ”ik Dodo Pizza andmed ja anda igale töötajale mugav ligipÀÀs sellele andmehulgale. Üks tĂ€htis ĂŒlesanne on: hoida Data Engineering meeskonna nĂ€rvid rahul.

AndmevÔrk: kuidas töötada andmetega ilma monoliidita

Nagu tÔelised Pljuƥkini, kogume me igasugust infot meie pitsakohvikute kohta:

  • me mĂ€letame kĂ”iki kasutajate tellimusi;
  • me teame, kui palju aega kulus esimese pitsa valmistamiseks Syktyvkari linnas;
  • me nĂ€eme, kui kaua pitsa praegu VoroneĆŸis jahtub soojendusriiulil;
  • me hoiame andmeid toodete arveldamise kohta;
  • ja palju-palju muud.

Dodo Pizza andmete haldamisega tegeleb praegu mitu meeskonda, neist ĂŒks on Data Engineering meeskond. Praegu seisab meie (ehk siis meie) ees ĂŒlesanne: anda igale töötajale mugav ligipÀÀs sellele andmehulgale.

Kui me hakkasime mĂ”tlema, kuidas seda teha, ja arutama ĂŒlesannet, leidsime me vĂ€ga huvitava lĂ€henemise andmete haldamisele - Data Mesh (lingil leiate tohutu suure artikli). Selle ideed sobivad vĂ€ga hĂ€sti meie ettekujutusega sellest, kuidas me tahame oma sĂŒsteemi ĂŒles ehitada. Edasi artiklis saab lugeda meie ĂŒmbermĂ”testamisest ja sellest, kuidas me nĂ€eme selle rakendamist Dodo Pizza Engineeringus.

Mida me mĂ”tleme sĂ”na „andmed” all

Esmalt, laske meil mÀÀratleda, mida me mÔistame andmete all Dodo Pizza Engineeringus:

  • SĂŒndmused, mida teenused saadavad (meil on ĂŒhiselt ehitatud buss RabbitMQ abil);
  • Kirjed andmebaasis (meie jaoks on see MySQL ja CosmosDB);
  • KĂŒlastusvoog mobiilirakendusest ja veebisaidilt.

Kuna Dodo Pizza Àri saab kasutada neid andmeid ja neile toetuda, on oluline, et oleksid tÀidetud jÀrgmised tingimused:

  • Need peavad olema terviklikud. Peame olema kindlad, et me ei muuda andmeid nende töötlemise, sĂ€ilitamise ja kuvamise kĂ€igus. Kui Ă€ri ei saa meie andmetele usaldada, siis ei ole neist mingit kasu.
  • Neil peavad olema ajatempli ja nad ei tohi kustutada. See tĂ€hendab, et me soovime igal ajal tagasi minna ja vaadata andmeid selle ajaperioodi kohta. NĂ€iteks teada saada, kui palju pitzasid mĂŒĂŒdi 8. juulil 2018.
  • Need peavad olema usaldusvÀÀrsed. Andmete kogumise ja hoidmise protsessis peame sĂ€ilitama mitte ainult terviklikkuse, vaid ka usaldusvÀÀrsuse. Me ei saa kaotada andmeid, ajablokeeringuid, sest koos nendega kaotame meie klientide (nii vĂ€listest kui sisemistest) usaldust.
  • Need peavad olema stabiilse skeemiga – kirjutame nende andmete jaoks pĂ€ringud. Me ei tahaks, et rakenduse koodi muutumise vĂ”i refaktoreerimisega muutuksid need nii, et meie pĂ€ringud lĂ”petaksid töötamise. See, kes kirjutab pĂ€ringud, ei tea kunagi, et te tegite refaktoreerimise, kuni kĂ”ik ei lagune tĂ€iesti. Ei tahaks seda klientidelt teada saada.

Arvestades kÔiki neid nÔudeid, jÔudsime jÀreldusele, et Dodo andmed on toode. Samasugune nagu teenuse avalik API. Seega peavad andmetega mahtuma samad inimesed, kes omavad teenust. Samuti peavad andmeskeemi muudatused olema alati tagasipööratavad.

Traditsiooniline lĂ€henemine – Data Lake

UsaldusvÀÀrse suure andmete sĂ€ilitamise ja töötlemise probleemide lahendamiseks on olemas traditsiooniline lĂ€henemine, mida on rakendanud paljud ettevĂ”tted, kes töötavad sellise teabe kogumiga – Data Lake. Selle lĂ€henemise raames koguvad andmeinsenerid teavet kĂ”igist sĂŒsteemi komponentidest ja salvestavad selle ĂŒhte suurde ladustamisse (see vĂ”ib olla nĂ€iteks Hadoop, Azure Kusto, Apache Cassandra vĂ”i isegi MySQL replikatsioon, kui andmed mahuvad sinna).

SeejĂ€rel kirjutavad samad insenerid pĂ€ringud sellele ladustamisele. Dodo Pizza Engineeringus tĂ€hendab selle lĂ€henemise rakendamine, et Data Engineeringi meeskond omab andmeskeemi analĂŒĂŒtilises ladustamises.

Antud stsenaariumis muutub meeskond vÀga kurvaks kassiks ja siin on pÔhjused:

  • Peab jĂ€lgima muudatusi KÕIKIDES ettevĂ”tte teenustes. Ja neid on palju, ning muudatusi on vĂ€ga palju (keskmiselt ĂŒhendame ~100 pull requesti nĂ€dalas, olles samas paljud teenused ei tee ĂŒldse pull requeste).
  • Kui andmeskeem muutub, peab toodete omanik ja andmeskeemi muudatustega meeskond ootama, kuni Data Engineering kirjutab vajalikud koodimuudatused, et toetada muudatusi. Samuti oleme juba ammu saanud tuttavaks olukorraga, kus ĂŒks meeskond ootab teist – see on vĂ€ga haruldane. Ja me ei taha, et see saaks arendusprotsessi „normaalseks“ osaks.
  • Peab olema sĂŒgavalt seotud KÕIKIDE ettevĂ”tte Ă€ri. Pizzaalade vĂ”rgustik nĂ€ib olema lihtne Ă€ri, aga see on vaid pealispind. On ÀÀrmiselt keeruline koguda ĂŒhte meeskonda piisavalt teadmisi, et luua kĂ”ikehĂ”lmav andmemudeli suhtes Ă”ige alus.
  • See on ainus rikke punkt. Iga kord, kui on vaja muuta andmeid, mida teenus tagastab, vĂ”i esitada pĂ€ring, langevad kĂ”ik need ĂŒlesanded Data Engineering'i meeskonna kaela. LĂ”puks on meeskond ĂŒlekoormatud tagasiside nimekirjaga.

Nii et meeskond on tohutu vajaduste ristis ja tĂ”enĂ€oliselt ei saa neid rahuldada. Samal ajal peavad nad pidevalt olema ajapuuduses ja stressis. Me ei sooviks seda. SeetĂ”ttu peame mĂ”tlema, kuidas neid probleeme lahendada ja samal ajal andmeid analĂŒĂŒsida.

Liikudes Data Lake'ist Data Mesh'i

KĂŒll aga on see kĂŒsimus vaevanud mitte ainult meid. Tegelikult on sarnane probleem juba tööstuses lahendatud (halleluuja!). Kuid teises valdkonnas: rakenduste juurutamine. Jah, ma rÀÀgin DevOps'i lĂ€henemisest, kus meeskond otsustab, kuidas tooteid juurutada, mida nad loovad.

Sarnase lĂ€henemise andmete jĂ€rve probleemide lahendamiseks pakkus vĂ€lja Zhamak Dehghani, konsultant ThoughtWorks'is. 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 oli artikli alguses). Peamised ideed, mille me sealt vĂ€lja tĂ”ime:

  • Jagada suur Data Lake andme domeenideks, mis on vĂ€ga sarnased domeenipĂ”hisest disainist tulenevates domeenidesse. Iga domeen on vĂ€ike bounded context.
  • Funktsioonimeeskonnad, kes vastutavad DDD domeenide eest, vastutavad ka vastavate andme domeenide eest. Nad hoidavad skeemi, muudavad seda, laadivad andmeid sisse. Samuti teavad nad kĂ”ike: kuidas andmete laadimist muuta ja mitte midagi purustada, kui rakendus muutub. Teadmised ei kao kuhugi. Andmete avamiseks ei pea nad kuhugi minema. Meeskond viib lĂ€bi kogu arendustsĂŒkli alates operatiivandmete muutmisest kuni analĂŒĂŒsiandmete pakkumiseni kolmandatele isikutele. Üks meeskond omab kĂ”ike, mis on seotud domeeniga (nii Ă€ridomeeni kui ka andmedomeeni).
  • Data Engineer – roll Funktsioonimeeskonnas. See ei pruugi olla eraldi inimene, kuid on oluline, et meeskond omaks selle valdkonna oskusi.

Ja sel ajal tegeleb Data Engineering'i meeskond...

Kui kujutada ette, et see kĂ”ik realiseerub sĂ”rmenipsust, jÀÀb vastata kahele kĂŒsimusele:

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

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

Kavatseme pakkuda Feature Team'ile mugavat tööriistade ja praktikate komplekti, mille abil nad saavad oma teenusest andmeid ĂŒlejÀÀnud ettevĂ”ttele esitada. Samuti vastutame andmevoogude (jĂ€rjekorrad, usaldusvÀÀrne salvestamine, andmete töötlemise klastrid) ĂŒldiste infrastruktuuriosade eest.

Kuidas saavad Data Engineering'i oskused Feature Team'is ilmuda? Feature Team'iga on keerulisem. Loomulikult vĂ”iksime proovida igasse meie meeskonda palgata ĂŒhe Data Engineer'i. Kuid see on vĂ€ga keeruline. Leiutada inimene, kellel on hea taust andmetöötluses, ja veenda teda töötama toote meeskonnas on raske.

Dodo suur pluss on see, et me armastame sisekoolitust. Nii et praegu on meie plaan selline: Data Engineering'i meeskond hakkab avaldama mÔnede teenuste andmeid, nutab, torgib end, kuid jÀtkab kaktuse söömist. Niikaua kui me saame aru, et meil on valminud protsess avaldamiseks, hakkame sellest Feature Team'ile rÀÀkima.

Meil on mitu vÔimalust, kuidas seda teha:

  1. DevForum, kus rÀÀgime, milline on protsess, mille oleme loonud, millised on tööriistad ja kuidas neid kÔige tÔhusamalt kasutada.
  2. Esinemine DevForum'il aitab meil saada tagasisidet tootearendajatelt. PĂ€rast seda saame liituda tootemeeskondadega ja aidata neil andmete avaldamisega seotud ĂŒlesandeid lahendada, korraldada meeskondadele koolitusi.

Andmete tarbimine

Praegu olen ma palju rÀÀkinud andmete avaldamisest. Kuid on veel ka tarbimine. Mis on sellega seoses?

Meil on suurepĂ€rane BI meeskond, kes koostab keerulisi aruandeid haldusettevĂ”ttele. Dodo IS sees on palju aruandeid meie partneritele, mis aitavad neil pizzeriate haldamisel. Meie uues mudelis nĂ€eme neid kui andmekasutajaid, kellel on oma andmevaldkonnad. Just need kasutajad vastutavad oma andmevaldkondade eest. MĂ”nikord vĂ”ib kasutaja valdkonda kirjeldada ĂŒhe pĂ€ringuga analĂŒĂŒtilisse andmehoidlasse – ja see on hea. kuid me mĂ”istame, et see ei pruugi alati toimida. Just seetĂ”ttu tahame, et platvorm, mille viime ellu tootemeeskondade jaoks, oleks samuti kasutatav andmekasutajate poolt (sest Dodo IS aruannete puhul toimetavad need vaid mĂ”ned meeskonnad).

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

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster