{"id":83248,"date":"2020-05-29T19:42:48","date_gmt":"2020-05-29T17:42:48","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam"},"modified":"2020-05-29T19:42:48","modified_gmt":"2020-05-29T17:42:48","slug":"dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","title":{"rendered":"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Hej alla! Vi har fantastiska nyheter, i juni startar OTUS \u00e5terigen en kurs <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/rVZl\/\">Software Architect<\/a><\/noindex>, d\u00e4rf\u00f6r delar vi traditionellt med oss av anv\u00e4ndbart material till er.<\/b><\/i><\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/6092ffb23e765239b4a8f27d4a0cb846.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n Om du har st\u00f6tt p\u00e5 hela denna historia med mikrotj\u00e4nster utan n\u00e5got sammanhang, kan du kanske tycka att den \u00e4r lite konstig. Att bryta ner en applikation i fragment som \u00e4r kopplade till varandra via n\u00e4tverket inneb\u00e4r n\u00f6dv\u00e4ndigtvis att man m\u00e5ste l\u00e4gga till komplexa felhanteringsmetoder i det resulterande distribuerade systemet. <\/p>\n<p>Trots att denna metod inkluderar uppdelning i m\u00e5nga oberoende tj\u00e4nster, \u00e4r det slutgiltiga m\u00e5let mycket mer \u00e4n bara att dessa tj\u00e4nster fungerar p\u00e5 olika maskiner. Det handlar om interaktion med omv\u00e4rlden, som i sin natur ocks\u00e5 \u00e4r distribuerad. Inte i teknisk mening, utan snarare i mening av ett ekosystem som best\u00e5r av m\u00e5nga m\u00e4nniskor, team och program, och varje del m\u00e5ste p\u00e5 sitt s\u00e4tt utf\u00f6ra sitt arbete.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>F\u00f6retag, till exempel, representerar en upps\u00e4ttning distribuerade system som tillsammans bidrar till att n\u00e5 ett visst m\u00e5l. Vi har ignorerat denna fakta i \u00e5rtionden, p\u00e5 jakt efter sammanslagning, genom att \u00f6verf\u00f6ra filer via FTP eller anv\u00e4nda f\u00f6retagsintegrationsverktyg, samtidigt som vi har fokuserat p\u00e5 v\u00e5ra egna isolerade m\u00e5l. Men med tj\u00e4nsternas ankomst f\u00f6r\u00e4ndrades allt. Tj\u00e4nster har hj\u00e4lpt oss att se bortom horisonten och uppt\u00e4cka en v\u00e4rld av \u00f6msesidigt beroende program som arbetar tillsammans. Men f\u00f6r att lyckas m\u00e5ste vi erk\u00e4nna och konstruera tv\u00e5 helt olika v\u00e4rldar: den externa v\u00e4rlden, d\u00e4r vi lever i ett ekosystem av m\u00e5nga andra tj\u00e4nster, och v\u00e5r personliga, interna v\u00e4rld, d\u00e4r vi h\u00e4rskar ensamma.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/93f535f6f3319d7b2829d35c0fe1c48f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Denna distribuerade v\u00e4rld skiljer sig fr\u00e5n den vi v\u00e4xte upp i och \u00e4r vana vid. Principerna f\u00f6r att bygga traditionell monolitisk arkitektur h\u00e5ller inte f\u00f6r granskning. D\u00e4rf\u00f6r \u00e4r en korrekt f\u00f6rst\u00e5else av s\u00e5dana system mer \u00e4n bara att skapa en snygg skiss p\u00e5 en vit tavla eller ett imponerande bevis p\u00e5 konceptet. Det handlar om att s\u00e5dana system m\u00e5ste fungera framg\u00e5ngsrikt under l\u00e5ng tid. Lyckligtvis har tj\u00e4nster funnits ganska l\u00e4nge, \u00e4ven om de ser olika ut. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-oriented_architecture\">SOA-lektioner<\/a><\/noindex> \u00e4r fortfarande relevanta, \u00e4ven om de \u00e4r kryddade med Docker, Kubernetes och lite slitna hiptster-sk\u00e4gg. <\/p>\n<p>S\u00e5 idag ska vi titta p\u00e5 hur reglerna har f\u00f6r\u00e4ndrats, varf\u00f6r vi beh\u00f6ver ompr\u00f6va v\u00e5rt tillv\u00e4gag\u00e5ngss\u00e4tt till tj\u00e4nster och den data de utbyter med varandra, och varf\u00f6r vi kommer att beh\u00f6va helt andra verktyg f\u00f6r detta.<\/p>\n<h3>Inkapsling kommer inte alltid vara din v\u00e4n.<\/h3>\n<p>\n Mikrotj\u00e4nster kan fungera oberoende av varandra. Just denna egenskap ger dem det st\u00f6rsta v\u00e4rdet. Denna egenskap m\u00f6jligg\u00f6r ocks\u00e5 att tj\u00e4nster kan skala och v\u00e4xa. Inte s\u00e5 mycket i termer av att skala till kvadriljoner anv\u00e4ndare eller petabyte data (\u00e4ven om de kan hj\u00e4lpa till d\u00e4r ocks\u00e5), utan i termer av att skala i fr\u00e5ga om m\u00e4nniskor, eftersom team och organisationer st\u00e4ndigt v\u00e4xer.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/ec36218b6152c2b713f72689b4ea6916.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMen oberoende \u00e4r ett dubbel\u00e4ggat sv\u00e4rd. Det vill s\u00e4ga, en tj\u00e4nst kan enkelt och smidigt k\u00f6ras p\u00e5 egen hand. Men om en funktion inom tj\u00e4nsten kr\u00e4ver att en annan tj\u00e4nst aktiveras, s\u00e5 m\u00e5ste vi i slut\u00e4ndan g\u00f6ra \u00e4ndringar i b\u00e5da tj\u00e4nsterna n\u00e4stan samtidigt. I en monolit \u00e4r det enkelt, man g\u00f6r bara \u00e4ndringen och skickar ut den, men i fallet med samordning av oberoende tj\u00e4nster finns det fler problem. Koordinering mellan team och releasecykler undergr\u00e4ver flexibelheten.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/5fc993636f29e9eb9831d05cbc0bd7f8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInom den standardmetoden f\u00f6rs\u00f6ker man helt enkelt undvika frustrerande tv\u00e4rg\u00e5ende f\u00f6r\u00e4ndringar genom att tydligt separera funktionaliteten mellan tj\u00e4nsterna. En systemets enhetliga ing\u00e5ngstj\u00e4nst kan h\u00e4r vara ett bra exempel. Den har en klart definierad roll som s\u00e4rskiljer den fr\u00e5n andra tj\u00e4nster. En s\u00e5dan tydlig separation inneb\u00e4r att i en v\u00e4rld av snabbt f\u00f6r\u00e4nderliga krav p\u00e5 kringliggande tj\u00e4nster, l\u00e4r systemets enhetliga ing\u00e5ngstj\u00e4nst s\u00e4llan att f\u00f6r\u00e4ndras. Den existerar inom en strikt avgr\u00e4nsad kontext.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/095fd7a6e02ead4924abf180e3b1d26b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Problemet \u00e4r att aff\u00e4rstj\u00e4nster i verkligheten inte kan uppr\u00e4tth\u00e5lla en konstant tydlig separation av roller. Till exempel arbetar dessa aff\u00e4rstj\u00e4nster i st\u00f6rre utstr\u00e4ckning med data som kommer fr\u00e5n andra liknande tj\u00e4nster. Om du bedriver e-handel kommer hantering av best\u00e4llningsfl\u00f6den, produktkataloger eller anv\u00e4ndarinformation att vara ett krav f\u00f6r m\u00e5nga av dina tj\u00e4nster. Varje tj\u00e4nst beh\u00f6ver tillg\u00e5ng till dessa data f\u00f6r att fungera. <\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/2a3d23850c88d574c990dfdc6015072c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>De flesta aff\u00e4rstj\u00e4nster anv\u00e4nder samma datak\u00e4lla, vilket g\u00f6r att deras arbete alltid sammanfl\u00e4tas.<\/i><\/p>\n<p>S\u00e5 vi har kommit till en viktig punkt som f\u00f6rtj\u00e4nar att diskuteras. Medan tj\u00e4nster fungerar bra f\u00f6r infrastrukturella komponenter som i stor utstr\u00e4ckning \u00e4r avskilda, visar det sig att de flesta aff\u00e4rstj\u00e4nster \u00e4r mycket mer t\u00e4t sammanfl\u00e4tade.<\/p>\n<h3>Datanikomi<\/h3>\n<p>\n Tj\u00e4nsteorienterade tillv\u00e4gag\u00e5ngss\u00e4tt kan redan existera, men det finns fortfarande brist p\u00e5 information om hur man utbyter stora datam\u00e4ngder mellan tj\u00e4nster.<\/p>\n<p>Huvudproblemet \u00e4r att data och tj\u00e4nster \u00e4r oskiljaktiga. \u00c5 ena sidan uppmanar inkapsling oss att d\u00f6lja data s\u00e5 att tj\u00e4nster kan separeras fr\u00e5n varandra, vilket underl\u00e4ttar deras tillv\u00e4xt och vidare f\u00f6r\u00e4ndringar. \u00c5 andra sidan beh\u00f6ver vi ha m\u00f6jlighet att fritt dela och f\u00f6rvalta gemensamma data, precis som med alla andra. Det handlar om att kunna b\u00f6rja arbeta genast, lika fritt som i vilket annat informationssystem som helst.<\/p>\n<p>Men informationssystem har lite gemensamt med inkapsling. Faktum \u00e4r att det \u00e4r motsatsen. Databaser g\u00f6r allt de kan f\u00f6r att ge tillg\u00e5ng till de data som lagras i dem. De levereras med ett kraftfullt deklarativt gr\u00e4nssnitt som l\u00e5ter dig modifiera data enligt dina behov. Denna funktionalitet \u00e4r viktig i forskningsskedet, men inte f\u00f6r att hantera den v\u00e4xande komplexiteten hos en st\u00e4ndigt utvecklande tj\u00e4nst.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/830465d4aa3bd2e6c02772a982f170bd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Och h\u00e4r uppst\u00e5r dilemman. Mots\u00e4gelser. Dikotomier. F\u00f6r informationssystem handlar det om att tillhandah\u00e5lla data, medan tj\u00e4nster handlar om att d\u00f6lja.<\/p>\n<p>Dessa tv\u00e5 krafter \u00e4r fundamentala. De ligger till grund f\u00f6r det mesta av v\u00e5rt arbete, st\u00e4ndigt k\u00e4mpande om \u00f6verl\u00e4gsenhet i de system vi skapar.<\/p>\n<p>Allteftersom tj\u00e4nstesystem v\u00e4xer och utvecklas ser vi olika manifestationer av konsekvenserna av datadichotomier. Antingen kommer tj\u00e4nstens gr\u00e4nssnitt att v\u00e4xa, erbjuda en alltmer omfattande upps\u00e4ttning funktioner och b\u00f6rja likna en mycket egenh\u00e4ndigt skapad databas, eller s\u00e5 drabbas vi av besvikelse och m\u00e5ste implementera ett s\u00e4tt att extrahera eller flytta hela datam\u00e4ngder fr\u00e5n tj\u00e4nst till tj\u00e4nst.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/da718c87570a4eb20b18f9c880ae8a1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Att skapa n\u00e5got som ser ut som en egenh\u00e4ndigt skapad databas leder i sin tur till en rad problem. Vi g\u00e5r inte in p\u00e5 detaljer om vad som \u00e4r farligt med <i>shared database<\/i>, utan s\u00e4ger bara att det medf\u00f6r betydande kostsamma tekniska och operativa <noindex><a rel=\"nofollow\" href=\"http:\/\/microservices.io\/patterns\/data\/shared-database.html\">utmaningar<\/a><\/noindex> f\u00f6r ett f\u00f6retag som f\u00f6rs\u00f6ker anv\u00e4nda den.<\/p>\n<p>V\u00e4rre \u00e4r att datavolymerna f\u00f6rv\u00e4rrar problemen med tj\u00e4nstebehovens gr\u00e4nser. Ju fler gemensamma data som finns inom en tj\u00e4nst, desto mer komplicerat blir gr\u00e4nssnittet och desto sv\u00e5rare blir det att kombinera datam\u00e4ngder som kommer fr\u00e5n olika tj\u00e4nster.<\/p>\n<p>Ett alternativt tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6r att extrahera och flytta hela datam\u00e4ngder har ocks\u00e5 sina problem. Den vanligaste metoden ser ut som en enkel extraktion och lagring av datam\u00e4ngden i sin helhet, f\u00f6r att sedan lagra den lokalt i varje mottagande tj\u00e4nst.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/63934c6876cb89e87155d4c097657617.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Problemet \u00e4r att olika tj\u00e4nster tolkar de data de konsumerar p\u00e5 olika s\u00e4tt. Dessa data finns alltid tillg\u00e4ngliga. De \u00e4ndras och bearbetas lokalt. Snart har de inte l\u00e4ngre n\u00e5got gemensamt med de data som finns i k\u00e4llan.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/616e390ad3df3317ac34ac8d861ce804.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Ju mer muterbara kopiorna blir, desto mer kommer data att avvika med tiden.<\/i><\/p>\n<p>Vad som \u00e4r \u00e4nnu v\u00e4rre \u00e4r att s\u00e5dana data \u00e4r sv\u00e5ra att korrigera i efterhand (<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Master_data_management\">MDM<\/a><\/noindex> kan verkligen hj\u00e4lpa h\u00e4r). Faktum \u00e4r att vissa av de sv\u00e5r\u00f6verblickbara tekniska problem som f\u00f6retag st\u00e5r inf\u00f6r uppst\u00e5r p\u00e5 grund av heterogena data som multipliceras fr\u00e5n applikation till applikation.<\/p>\n<p>F\u00f6r att hitta en l\u00f6sning p\u00e5 detta problem med gemensamma data m\u00e5ste vi t\u00e4nka annorlunda. De m\u00e5ste bli f\u00f6rstklassiga objekt i de arkitekturer vi bygger. <noindex><a rel=\"nofollow\" href=\"http:\/\/cidrdb.org\/cidr2005\/papers\/P12.pdf\">P\u00e4t Hailand<\/a><\/noindex> ben\u00e4mner s\u00e5dan data som \"extern\", och det \u00e4r en mycket viktig egenskap. Vi beh\u00f6ver inkapsling f\u00f6r att inte avsl\u00f6ja den inre strukturen av tj\u00e4nsten, men vi m\u00e5ste underl\u00e4tta \u00e5tkomsten till delad data f\u00f6r tj\u00e4nster s\u00e5 att de kan utf\u00f6ra sina uppgifter korrekt.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/9703ffdbb528320edc62ee7a680a3258.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Problemet \u00e4r att ingen av metoderna idag \u00e4r relevanta l\u00e4ngre, eftersom varken tj\u00e4nstegr\u00e4nssnitt, meddelandefl\u00f6den eller delad databas erbjuder en bra l\u00f6sning f\u00f6r arbete med externa data. Tj\u00e4nstegr\u00e4nssnitt passar d\u00e5ligt f\u00f6r datadelning i n\u00e5gon skala. Meddelandefl\u00f6den flyttar data, men lagrar inte deras historia, vilket g\u00f6r att data blir skadade \u00f6ver tid. Delade databaser fokuserar f\u00f6r mycket p\u00e5 en enda punkt, vilket hindrar utvecklingen av framsteg. Vi hamnar oundvikligen i en cykel av otillr\u00e4cklighet av data:<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/f17ac7063a813cb76bad71ae8622912c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Cykel av otillr\u00e4cklighet av data<\/i><\/p>\n<h3>Fl\u00f6den: en decentraliserad metod f\u00f6r data och tj\u00e4nster<\/h3>\n<p>\n I idealfallet beh\u00f6ver vi f\u00f6r\u00e4ndra s\u00e4ttet p\u00e5 vilket tj\u00e4nster arbetar med gemensam data. Just nu st\u00e5r varje metod inf\u00f6r den tidigare n\u00e4mnda dikotomin, eftersom det inte finns n\u00e5gon magisk l\u00f6sning som kan str\u00f6s gener\u00f6st f\u00f6r att f\u00e5 den att f\u00f6rsvinna. Men vi kan omformulera problemet och n\u00e5 en kompromiss.<\/p>\n<p>Denna kompromiss inneb\u00e4r en viss grad av centralisering. Vi kan dra nytta av mekanismen f\u00f6r distribuerade loggar, eftersom den erbjuder tillf\u00f6rlitliga skalbara fl\u00f6den. Nu beh\u00f6ver tj\u00e4nster kunna ansluta och arbeta med dessa gemensamma fl\u00f6den, men vi vill undvika komplexa centraliserade God Service:er som utf\u00f6r s\u00e5dan bearbetning. D\u00e4rf\u00f6r \u00e4r det b\u00e4sta alternativet att integrera str\u00f6mbehandling i varje tj\u00e4nst-konsument. P\u00e5 s\u00e5 s\u00e4tt kan tj\u00e4nster kombinera datam\u00e4ngder fr\u00e5n olika k\u00e4llor och arbeta med dem som de beh\u00f6ver.<\/p>\n<p>Ett s\u00e4tt att n\u00e5 en s\u00e5dan metod \u00e4r att anv\u00e4nda en str\u00f6mmande plattform. Det finns m\u00e5nga alternativ, men idag kommer vi att titta p\u00e5 just Kafka, eftersom dess Stateful Stream Processing effektivt l\u00f6ser det presenterade problemet.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/353c7f12af87901e721abb7ea92d8196.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Anv\u00e4ndningen av mekanismen f\u00f6r distribuerad loggning g\u00f6r att vi kan g\u00e5 p\u00e5 den stig som redan har trampats, och anv\u00e4nda meddelandefl\u00f6den f\u00f6r att arbeta med <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Event-driven_architecture\">h\u00e4ndelseorienterad arkitektur<\/a><\/noindex>. Det anses att detta tillv\u00e4gag\u00e5ngss\u00e4tt ger b\u00e4ttre skalbarhet och separation \u00e4n \"request-response\"-mekanismen, eftersom det ger mottagaren snarare \u00e4n avs\u00e4ndaren kontroll \u00f6ver fl\u00f6det. Men f\u00f6r allt i livet f\u00e5r man betala, och h\u00e4r beh\u00f6ver du en broker. Men f\u00f6r stora system \u00e4r denna kompromiss v\u00e4rd det (vilket inte g\u00e4ller f\u00f6r dina genomsnittliga webbapplikationer).<\/p>\n<p>Om det distribuerade loggandet hanteras av en broker snarare \u00e4n ett traditionellt meddelandesystem kan ytterligare funktioner utnyttjas. Transporten kan skalas linj\u00e4rt n\u00e4stan lika bra som ett distribuerat filsystem. Data kan lagras i loggar ganska l\u00e4nge, s\u00e5 vi f\u00e5r inte bara meddelandeutbyte utan ocks\u00e5 lagring av information. Skalbar lagring utan r\u00e4dsla f\u00f6r att f\u00e5 ett f\u00f6r\u00e4ndrat gemensamt tillst\u00e5nd.<\/p>\n<p>D\u00e4refter kan en stateful stream processing-mekanism (bearbetning av str\u00f6m med bevarande av tillst\u00e5nd) anv\u00e4ndas f\u00f6r att l\u00e4gga till deklarativa databasverktyg i konsumenttj\u00e4nster. Detta \u00e4r en mycket viktig tanke. S\u00e5 l\u00e4nge data lagras i gemensamma str\u00f6mmar, som alla tj\u00e4nster kan f\u00e5 tillg\u00e5ng till, \u00e4r sammanfogningen och bearbetningen som g\u00f6rs av tj\u00e4nsten privata. De visar sig vara isolerade inom en strikt begr\u00e4nsad kontext.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/01c8beabb9a02e4c06dffb84f9161324.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Bli av med dikotomin av data genom att dela upp den immutabla fl\u00f6det av tillst\u00e5nd. L\u00e4gg sedan till denna funktion i varje tj\u00e4nst med hj\u00e4lp av Stateful Stream Processing.<\/i><\/p>\n<p>S\u00e5 om din tj\u00e4nst m\u00e5ste arbeta med best\u00e4llningar, produktkataloger, lager, s\u00e5 kommer den att ha full tillg\u00e5ng: endast du best\u00e4mmer vilka data som ska sammanfogas, var de ska bearbetas och hur de ska f\u00f6r\u00e4ndras \u00f6ver tid. Trots att data \u00e4r gemensamma, \u00e4r arbetet med dem helt decentraliserat. Det utf\u00f6rs inom varje tj\u00e4nst, i en v\u00e4rld d\u00e4r allt g\u00e5r efter dina regler.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/4b2635ad8ddd18f455eea654e472f85e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Dela data p\u00e5 ett s\u00e4tt som inte bryter deras integritet. Kapsla in funktionen, inte k\u00e4llan, i varje tj\u00e4nst som beh\u00f6ver den.<\/i><\/p>\n<p>Det h\u00e4nder att data beh\u00f6ver flyttas i bulk. Ibland kr\u00e4ver tj\u00e4nsten ett lokalt historiskt dataset i den valda databashanteraren. Nyckeln \u00e4r att man kan garantera att en kopia kan \u00e5terst\u00e4llas fr\u00e5n k\u00e4llan vid behov genom att anv\u00e4nda den distribuerade loggmekanismen. Anslutare i Kafka g\u00f6r ett utm\u00e4rkt jobb med denna uppgift.<\/p>\n<p>S\u00e5, den metod vi diskuterat idag har flera f\u00f6rdelar:<\/p>\n<ul>\n<li>Data anv\u00e4nds i form av gemensamma fl\u00f6den som kan lagras l\u00e4nge i loggar, och sj\u00e4lva mekanismen f\u00f6r att hantera gemensamma data \u00e4r inbyggd i varje separat kontext, vilket g\u00f6r att tj\u00e4nster kan fungera enkelt och snabbt. P\u00e5 detta s\u00e4tt kan man balansera data-dikotomin.<\/li>\n<li>Data som kommer fr\u00e5n olika tj\u00e4nster kan enkelt kombineras i dataset. Detta f\u00f6renklar interaktionen med gemensamma data och eliminerar behovet av att st\u00f6dja lokala dataset i databasen.<\/li>\n<li>Stateful Stream Processing cachar bara data, och den sanna k\u00e4llan f\u00f6rblir de gemensamma loggarna, s\u00e5 problemet med dataskador \u00f6ver tid \u00e4r inte s\u00e5 uttalat.<\/li>\n<li>I sin k\u00e4rna styrs tj\u00e4nster av data, vilket inneb\u00e4r att trots den st\u00e4ndiga \u00f6kningen av datavolymer, kan tj\u00e4nster fortfarande snabbt reagera p\u00e5 aff\u00e4rsh\u00e4ndelser.<\/li>\n<li>Skalbarhetsproblem hamnar p\u00e5 m\u00e4klaren, inte p\u00e5 tj\u00e4nsterna. Detta minskar betydligt komplexiteten i att skriva tj\u00e4nster, eftersom det inte finns n\u00e5got behov av att t\u00e4nka p\u00e5 skalbarhet.<\/li>\n<li>Att l\u00e4gga till nya tj\u00e4nster kr\u00e4ver inga \u00e4ndringar av de gamla, vilket g\u00f6r att anslutningen av nya tj\u00e4nster blir enklare.<\/li>\n<\/ul>\n<p>\nSom ni ser \u00e4r detta mer \u00e4n bara REST. Vi har f\u00e5tt en upps\u00e4ttning verktyg som m\u00f6jligg\u00f6r decentraliserad hantering av gemensamma data.<\/p>\n<p>I dagens artikel har vi inte t\u00e4ckt alla aspekter. Vi beh\u00f6ver fortfarande best\u00e4mma hur man balanserar mellan \"fr\u00e5ga-svar\"-paradigmen och eventdriven paradigm. Men det kommer vi att ta itu med n\u00e4sta g\u00e5ng. Det finns \u00e4mnen som vi beh\u00f6ver bekanta oss b\u00e4ttre med, s\u00e5som varf\u00f6r Stateful Stream Processing \u00e4r s\u00e5 bra. Detta kommer vi att prata om i den tredje artikeln. Dessutom finns det andra kraftfulla konstruktioner som vi kan utnyttja om vi v\u00e4nder oss till dem, exempelvis, <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging\">Precis En G\u00e5ng Bearbetning<\/a><\/noindex>. Det f\u00f6r\u00e4ndrar spelets regler f\u00f6r distribuerade aff\u00e4rssystem, eftersom denna konstruktion s\u00e4kerst\u00e4ller transaktionsgarantier f\u00f6r <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/X\/Open_XA\">XA<\/a><\/noindex> i en skalbar form. Detta kommer att diskuteras i den fj\u00e4rde artikeln. Och slutligen beh\u00f6ver vi g\u00e5 igenom detaljerna f\u00f6r implementeringen av dessa principer.<\/p>\n<p><img decoding=\"async\" alt=\"Data Dichotomy: Ompr\u00f6va f\u00f6rh\u00e5llandet till data och tj\u00e4nster\" src=\"\/wp-content\/uploads\/2020\/05\/f66eadcc538cf3da74ccb120e1de2ae7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMen kom ih\u00e5g detta: datadikotomi \u00e4r den kraft vi st\u00e5r inf\u00f6r n\u00e4r vi skapar aff\u00e4rstj\u00e4nster. Och vi m\u00e5ste t\u00e4nka p\u00e5 det. Fokus \u00e4r att v\u00e4nda allt upp och ner och b\u00f6rja betrakta gemensamma data som f\u00f6rstklassiga objekt. Stateful Stream Processing erbjuder en unik kompromiss f\u00f6r detta. Det undviker centraliserade \"God Components\" som begr\u00e4nsar utvecklingens framsteg. Dessutom s\u00e4kerst\u00e4ller det snabbhet, skalbarhet och felresistens i datastreaming-pipelines och integrerar dem i varje tj\u00e4nst. D\u00e4rf\u00f6r kan vi fokusera p\u00e5 det gemensamma medvetandet som vilken tj\u00e4nst som helst kan ansluta sig till och arbeta med dess data. S\u00e5 tj\u00e4nster blir mer skalbara, utbytbara och autonoma. D\u00e4rf\u00f6r kommer de inte bara att se bra ut p\u00e5 whiteboards och vid hypotespr\u00f6vningar, utan ocks\u00e5 fungera och utvecklas i \u00e5rtionden. <\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/rVZl\/\">L\u00e4s mer om kursen.<br \/>\n<\/a><\/noindex><\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/504310\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0423 \u043d\u0430\u0441 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0432 \u0438\u044e\u043d\u0435 OTUS \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u0443\u0440\u0441 \u00ab\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u041f\u041e\u00bb, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u043c\u044b \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441\u043e \u0432\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438 \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0442\u043e \u0432\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0439. \u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441\u0435\u0442\u044c\u044e, \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83249,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83248","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0414\u0438\u0445\u043e\u0442\u043e\u043c\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445: \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-29T17:42:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-29T17:42:48+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Datadikotomi: en omv\u00e4rdering av v\u00e5r relation till data och tj\u00e4nster | ProHoster","description":"Hej alla!","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0414\u0438\u0445\u043e\u0442\u043e\u043c\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445: \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-29T17:42:48+00:00","article:modified_time":"2020-05-29T17:42:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83248","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:22:24","updated":"2022-09-30 09:53:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/83248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=83248"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/83248\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/83249"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=83248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=83248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=83248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}