Hej, Habr! Vi pÄ Dodo Pizza Engineering Àlskar verkligen data (vem gör inte det nuförtiden?). HÀr kommer en historia om hur man samlar in all data i Dodo Pizza-vÀrlden och ger varje anstÀlld pÄ företaget enkel tillgÄng till den massiva datamÀngden. Uppdraget med stjÀrna: att bevara teamet Data Engineerings nerver.

Som riktiga Pljushkin samlar vi all möjlig information om driften av vÄra pizzerior:
- vi minns alla anvÀndares bestÀllningar;
- vi vet hur lÄng tid det tog att göra den allra första pizzan i Syktyvkar;
- vi ser hur lÀnge en pizza kyls ner pÄ vÀrmehyllan i Voronezh just nu;
- vi lagrar data om avskrivning av produkter;
- och mycket, mycket mer.
Flera team ansvarar för datan pÄ Dodo Pizza just nu, ett av dem Àr teamet Data Engineering. Just nu stÄr vi (det vill sÀga vi) inför uppgiften: att ge varje anstÀlld i företaget enkel tillgÄng till denna massiva datamÀngd.
NĂ€r vi började tĂ€nka pĂ„ hur vi skulle göra detta och började diskutera uppgiften, hittade vi en mycket intressant metod för datastyrning â (i lĂ€nken hittar du en fantastisk och omfattande artikel). Deras idĂ©er passade mycket vĂ€l in i vĂ„r syn pĂ„ hur vi vill bygga vĂ„rt system. HĂ€r i artikeln kommer vĂ„r nytĂ€nkning av metoden och hur vi ser dess implementering i Dodo Pizza Engineering.
Vad menar vi med "data"
Först och frÀmst lÄt oss definiera vad vi menar med data pÄ Dodo Pizza Engineering:
- HÀndelser som skickas av tjÀnster (vi har en gemensam buss byggd med RabbitMQ);
- Poster i databasen (för oss Àr det MySQL och CosmosDB);
- Clickstream frÄn mobilapplikationen och webbplatsen.
För att Dodo Pizza ska kunna anvÀnda denna data och lita pÄ den Àr det viktigt att följande villkor uppfylls:
- De mÄste vara hela. Vi mÄste vara sÀkra pÄ att vi inte Àndrar datan under dess bearbetning, lagring och visning. Om verksamheten inte kan lita pÄ vÄr data, kommer den inte att vara till nÄgon nytta.
- De mÄste ha tidsstÀmplar och fÄr inte skrivas över. Det betyder att vi alltid vill ha möjlighet att gÄ tillbaka och se datan frÄn den tidpunkten. Till exempel, att fÄ veta hur mÄnga pizzor som sÄldes den 8 juli 2018.
- De mÄste vara pÄlitliga. Under data collection and storage, we must not only maintain integrity but also reliability. We cannot afford to lose data, time slices, because with them we lose the trust of our clients (both external and internal).
- They must have a stable scheme â we write queries for this data. We would really prefer that with changes to the application code, during refactoring, they do not change so much that our queries cease to work. Those who write queries will never know that you made a refactor until everything breaks down completely. We wouldnât want to find out about this from clients.
Considering all these requirements, we concluded that data in Dodo is a product. Just like the public API of the service. Accordingly, the same team that owns the service should own the data. Additionally, changes to the data schema must always be backward-compatible.
The traditional approach is Data Lake.
To address the challenges of reliable storage and processing of big data, there is a traditional approach adopted by many companies that deal with such a pool of information â Data Lake. Within this approach, data engineers collect information from all system components and store it in one large repository (this could be, for instance, Hadoop, Azure Kusto, Apache Cassandra, or even a MySQL replica if the data fits in it).
Then these very engineers write queries against such a repository. The implementation of this approach at Dodo Pizza Engineering implies that the Data Engineering team will own the data schema in the analytical repository.
In this scenario, the team becomes very sad kittens, and here's why:
- They must keep track of changes in ALL services within the company. And there are many of them, and changes occur quite frequently (on average, we merge ~100 pull requests per week, and many services do not make pull requests at all).
- When the data schema changes, the product owner and the team changing the data schema must wait for the Data Engineering to write the necessary code to support the changes. At the same time, it's been quite a while since we have been implementing features, and the situation where one team waits for another is quite rare. We do not want this to become a 'normal' part of the development process.
- They must be immersed in EVERY Företagets affÀr. En pizzakedja kan verka som en enkel verksamhet, men sÄ Àr det bara till synes. Det Àr mycket svÄrt att samla tillrÀckliga kompetenser i ett och samma team för att bygga en adekvat datamodell för hela företaget.
- Den utgör en enskild felpunkt. Varje gÄng det behövs Àndra de data som tjÀnsten returnerar eller skriva en förfrÄgan, hamnar dessa uppgifter pÄ Data Engineering-teamet. Resultatet blir att teamet har en överbelastad backlogg.
Det visar sig att teamet befinner sig i skÀrningspunkten av ett stort antal behov och knappast kan tillfredsstÀlla dem. Samtidigt kommer de att vara i stÀndig tidsnöd och stress. Det vill vi verkligen undvika. DÀrför mÄste vi tÀnka pÄ hur vi kan lösa dessa problem och samtidigt fÄ möjlighet att analysera data.
FrÄn Data Lake till Data Mesh
Som tur Àr har inte bara vi stÀllt denna frÄga. Faktum Àr att denna typ av problem redan har lösts inom industrin (halleluja!). Men inom ett annat omrÄde: distribution av applikationer. Ja, jag pratar om DevOps-ansatsen, dÀr teamet bestÀmmer hur produkten som de skapar ska distribueras.
En liknande ansats för att lösa Data Lake-problem föreslogs av Zhamak Dehghani, konsult pÄ ThoughtWorks. Genom att observera hur liknande problem hanteras av Netflix och Spotify skrev hon en fantastisk artikel (lÀnken till den var i början av artikeln). Huvudidéerna som vi tog med oss frÄn den Àr:
- Dela upp den stora Data Lake i datadomÀner, vilka liknar domÀner inom domain-driven design. Varje domÀn Àr en liten bounded context.
- Feature Team som ansvarar för DDD-domĂ€ner ansvarar ocksĂ„ för motsvarande datadomĂ€ner. De lagrar strukturen, gör Ă€ndringar i den, laddar upp data i den. De vet ocksĂ„ hur man Ă€ndrar datainlĂ€sningen utan att nĂ„got gĂ„r sönder nĂ€r applikationen Ă€ndras. Kunskapen försvinner inte. För att öppna data behöver de inte gĂ„ nĂ„gonstans. Teamet har hela utvecklingscykeln, frĂ„n att Ă€ndra operationella data till att tillhandahĂ„lla analytiska data till tredje part. Ett team har fullt ansvar för allt som rör domĂ€nen (bĂ„de affĂ€rsdomaÌnen och datadomĂ€nerna).
- Data Engineer â en roll inom Feature Team. Det behöver inte vara en separat person, men det Ă€r absolut nödvĂ€ndigt att teamet har denna kompetens.
Under tiden arbetar Data Engineering-teamet ...
Om vi tÀnker oss att allt detta kan genomföras med ett fingerknÀpp, kvarstÄr det att besvara tvÄ frÄgor:
Vad kommer Data Engineering-teamet att syssla med nu? Inom Dodo Pizza Engineering finns det redan ett plattforms-/SRE-team. Deras uppgift Àr att ge utvecklarna verktyg för enkel distribution av tjÀnster. Data Engineering-teamet kommer att ha en liknande roll, men för data.
Att omvandla operativa data till analytiska Àr en komplex process. Att göra de analytiska data tillgÀngliga för hela företaget Àr Ànnu svÄrare. Det Àr dessa problem som Data Engineering-teamet kommer att fokusera pÄ.
Vi planerar att ge Feature Team ett bekvÀmt verktygspaket och metoder, sÄ att de kan publicera data frÄn sina tjÀnster till resten av företaget. Vi kommer ocksÄ att vara ansvariga för de gemensamma infrastrukturella delarna av data-pipeline (köer, pÄlitlig lagring, kluster för datatransformationer).
Hur kommer Data Engineer-kunskaper att uppstÄ inom Feature Team? Det Àr mer komplicerat med Feature Team. SjÀlvklart skulle vi kunna försöka anstÀlla en Data Engineer i varje team. Men det Àr vÀldigt svÄrt. Att hitta nÄgon med en bra bakgrund inom databehandling och övertyga dem att arbeta i produktteam Àr en utmaning.
En stor fördel med Dodo Àr att vi Àlskar intern utbildning. SÄ nu Àr vÄr plan denna: Data Engineering-teamet börjar publicera data frÄn vissa tjÀnster, de grÄter, sticks, men fortsÀtter att Àta kaktusen. SÄ snart vi förstÄr att vi har en fÀrdig process för publicering kommer vi att börja berÀtta om den för Feature Team.
Vi har flera sÀtt att göra detta:
- , dÀr vi kommer att berÀtta hur den process vi har skapat ser ut, vilka verktyg som finns och hur de kan anvÀndas mest effektivt.
- Att tala pÄ DevForum kommer att hjÀlpa oss att samla in feedback frÄn produktutvecklare. Efter detta kan vi gÄ med i produktteam och hjÀlpa dem att lösa problem med datpublicering, organisera trÀning för team.
Konsumtion av data
Just nu har jag pratat mycket om publicering av data. Men det finns ocksÄ konsumtion. Vad har vi för information om det?
Vi har ett fantastiskt BI-team som skriver mycket komplexa rapporter för förvaltningsbolaget. Inom Dodo IS finns det mĂ„nga rapporter för vĂ„ra partner som hjĂ€lper dem att styra pizzerior. I vĂ„r nya modell ser vi dem som datakonsumenter, som har sina egna datadomĂ€ner. Det Ă€r faktiskt konsumenterna som kommer att ansvara för sina egna domĂ€ner. Ibland kan konsumentens domĂ€n beskrivas med en enda frĂ„ga i analyslagret â och det Ă€r bra. Men vi förstĂ„r att detta inte alltid kommer att fungera. DĂ€rför vill vi att den plattform vi skapar för produktteam ocksĂ„ ska kunna anvĂ€ndas av datakonsumenter (eftersom det i fallet med rapporterna inom Dodo IS â kommer att vara samma team).
SÄ hÀr ser vi pÄ arbete med data inom Dodo Pizza Engineering. Vi ser fram emot att lÀsa era tankar om detta i kommentarerna.
KĂ€lla: habr.com
