Data Mesh: hur man arbetar med data utan monoliter

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.

Data Mesh: hur man arbetar med data utan monoliter

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 – Data Mesh (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 How to Move Beyond a Monolithic Data Lake to a Distributed Data Mesh(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Ă€rsdomä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:

  1. DevForum, 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.
  2. 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

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster