Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Tere kĂ”igile! Meil on suurepĂ€raseid uudiseid, juunis kĂ€ivitab OTUS taas kursuse „Tarkvara arhitekt“, millega seoses jagame teiega traditsiooniliselt kasulikku materjali.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Kui olete kokku puutunud kogu sellele mikroteenuste jutule ilma igasuguse kontekstita, on teil mĂ”istetav seda veidi kummalisena pidada. Rakenduse jagamine osadeks, mis on omavahel seotud vĂ”rguga, tĂ€hendab kindlasti ka keeruliste talitlushĂ€ired taluvate mehhanismide lisamist tekkinud hajutatud sĂŒsteemi.

Kuigi see lĂ€henemine hĂ”lmab jagamist paljudele sĂ”ltumatutele teenustele, on lĂ”ppeesmĂ€rk midagi enam kui lihtsalt nende teenuste töötamine erinevates masinates. Jutt on siin keskkonna interaktsioonist, mis iseenesest on samuti hajus. Mitte tehnilises mĂ”ttes, vaid pigem ökosĂŒsteemis, mis koosneb paljusid inimesi, meeskondi, programme, ning igaĂŒks neist peab mingil moel oma tööd tegema.

EttevĂ”tted, nĂ€iteks, koosnevad hajusate sĂŒsteemide kogumist, mis kokkuvĂ”ttes aitavad saavutada teatud eesmĂ€rki. Me ignoreerisime seda fakti aastakĂŒmneid, pĂŒĂŒdes saavutada ĂŒhtsust, edastades faile FTP kaudu vĂ”i kasutades ettevĂ”tte integreerimistööriistu, keskendudes samal ajal oma isiklikele lahkarvamustele. Kuid teenuste saabumisega kĂ”ik muutus. Teenused aitasid meil vaadata kaugemale ja nĂ€ha vastastikust sĂ”ltuvust, kus programmid töötavad ĂŒhiselt. Kuid selleks, et edukalt tegutseda, tuleb mĂ”ista ja disainida kahte fundamentaalselt erinevat maailma: vĂ€lismaailm, kus elame paljude teiste teenuste ökosĂŒsteemis, ja meie isiklik, sisemaailm, kus me valitseme ĂŒksi.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Selline hajustatud maailm erineb sellest, kus me kasvasime ja millega harjusime. Traditsioonilise monoliit arhitektuuri ehitamise pĂ”himĂ”tted ei pea mingit kriitikat. SeetĂ”ttu on selliste sĂŒsteemide Ă”ige mĂ”istmine midagi muud kui vaid lahe skeemi loomine valgel tahvlil vĂ”i lahe tĂ”estus kontseptsioonist. Oluline on, et selline sĂŒsteem toimiks edukalt pika aja jooksul. Õnneks on teenused eksisteerinud juba piisavalt kaua, kuigi need nĂ€evad vĂ€lja erinevad. SOA Ă”ppetunnid on endiselt aktuaalsed, isegi kui need on maitsestatud Docker'i, Kubernetes'e ja kergelt kulunud hipsteri habe.

Nii et tĂ€na vaatame, kuidas reeglid on muutunud, miks peame ĂŒmber mĂ”tlema oma lĂ€henemist teenustele ja andmetele, mida nad ĂŒksteisele edastavad, ja miks meil selleks on vaja tĂ€iesti teistsuguseid tööriistu.

Inkaptsulatsioon ei ole alati teie sÔber

Mikroteenused saavad töötada iseseisvalt. Just see omadus annab neile suurima vÀÀrtuse. See omadus vÔimaldab teenustel kasvatada ja laieneda. Mitte ainult mitte kuni kvadriljonite kasutajateni vÔi petabaitide andmeteni (kuigi nad saavad ka siin aidata), vaid pigem inimeste perspektiivist, kuna meeskonnad ja organisatsioonid kasvavad pidevalt.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Kuid iseseisvus on kaheaegne mÔÔk. Teenus vĂ”ib iseenesest töötada lihtsasti ja vaevata. Kuid kui teenuses rakendatakse funktsiooni, mis vajab teise teenuse kaasamist, peame lĂ”puks tegema muudatusi mĂ”lemas teenuses peaaegu samal ajal. Monoliidis on see lihtne, sa lihtsalt teed muudatuse ja saadad selle vĂ€lja, aga iseseisvate teenuste sĂŒnkroniseerimisel on probleeme rohkem. Koordineerimine meeskondade ja vĂ€ljalasettsĂŒklite vahel hĂ€vitab paindlikkuse.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

TavapĂ€rases lĂ€henemises pĂŒĂŒtakse ebameeldivate lĂ€bivoolavate muudatuste tegemist lihtsalt vĂ€ltida, eristades selgelt funktsionaalsust teenuste vahel. Ühtse sisenemise teenus on siin hea nĂ€ide. Sellel on selgelt mÀÀratletud roll, mis eristab seda teistest teenustest. Selline selge jaotus tĂ€hendab, et kiiresti muutuvate nĂ”udmiste maailmas muudatuste osas jÀÀb ĂŒhtse sisenemise teenus tĂ”enĂ€oliselt muutumatuks. See eksisteerib range piiratuse kontekstis.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Probleem seisneb selles, et reaalses maailmas ei saa Àriteenused pidevalt sÀilitada sama puhast rolli jaotust. NÀiteks töötavad need samad Àriteenused laiemalt andmetega, mis on saadud teistelt sarnastelt teenustelt. Kui tegelete veebikaubandusega, siis tellimuste, tootekatalooge vÔi kasutajainformatsiooni töötlemine saab olema paljude teie teenuste nÔudmine. Iga teenus vajab nende andmete töötlemiseks ligipÀÀsu.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega
Enamik Ă€riteenuseid kasutavad ĂŒks ja sama andmevoogu, seetĂ”ttu on nende töö pidevalt omavahel seotud.

Nii oleme jÔudnud olulisse hetke, millest tasub rÀÀkida. Kuigi teenused toimivad hÀsti infrastruktuuri komponentide puhul, mis töötavad suures osas isoleeritult, on enamik Àriteenuseid omavahel tihedalt seotud.

Andmete dikotoomia

Teenustele orienteeritud lÀhenemised vÔivad juba eksisteerida, kuid neis on endiselt vÀhe teavet selle kohta, kuidas vahetada suuri andmemahtusid teenuste vahel.

PĂ”hiprobleem on see, et andmed ja teenused on lahutamatud. Ühest kĂŒljest kutsub kapseldamine meid andmeid peitma, et teenuseid oleks vĂ”imalik omavahel eraldada ning nende kasvu ja edasisi muutusi lihtsustada. Teisest kĂŒljest peame saama vabalt jagada ja hallata ĂŒhiseid andmeid, nagu ka mis tahes teisi. KĂŒsimus on selles, et oleksime vĂ”imelised kohe tööle asuma, sama vabalt kui mis tahes muus infosĂŒsteemis.

Kuid informatsioonisĂŒsteemidel on vĂ€he ĂŒhist kapseldamisega. Tegelikult on see isegi vastupidine. Andmebaasid teevad kĂ”ik endast oleneva, et anda juurdepÀÀs neis hoitavatele andmetele. Need pakuvad vĂ”imsat deklaratiivset liidest, mis vĂ”imaldab andmeid vastavalt vajadusele muuta. See funktsionaalsus on oluline eeluurimise etapis, kuid mitte pidevalt areneva teenuse keerukuse haldamiseks.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Ja siin tekib dilemma. VasturÀÀkivus. Dihotoomia. Sest informatsioonisĂŒsteemid on seotud andmete pakkumisega, samas kui teenused on seotud nende varjamisega.

Need kaks jĂ”udu on fundamentaalsed. Need on meie töö pĂ”hialuseks, pidevalt vĂ”ideldes ĂŒlemvĂ”imu nimel meie loodud sĂŒsteemides.

Teen, kui teenusesĂŒsteemid arenevad ja kasvavad, mĂ€rkame andmete diktoomia erinevaid vĂ€ljundeid. Kas teenuse liides laieneb, pakkudes ĂŒha laiemat funktsioonide kogumit ja hakkab nĂ€gema vĂ€lja nagu veidra koduvalmistatud andmebaas, vĂ”i seisame silmitsi pettumusega ja leiname vajadust leida viise massiliste andmekogumite teenuste vahel liikumiseks vĂ”i teisaldamiseks.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Oma olemuselt viib miski, mis nĂ€eb vĂ€lja nagu veidralt koduvalmistatud andmebaas, terve rea probleemideni. Me ei pĂ”hjalda nĂŒĂŒd, kui ohtlik see on, shared database, lihtsalt ĂŒtleme, et see esindab mĂ€rkimisvÀÀrseid ja kallid inseneri- ja operatiivsed vĂ€ljakutsed ettevĂ”ttele, kes ĂŒritab seda kasutada.

Halvem on see, et andmemaht suurendab teenuste vaheprobleeme. Mida rohkem jagatud andmeid teenuses on, seda keerulisemaks muutub liides ja seda raskem on ĂŒhendada erinevatest teenustest pĂ€rit andmekogumeid.

Alternatiivne lÀhenemine andmekogude tÀieliku eraldamisele ja liigutamisele toob endaga kaasa oma probleemid. Levinud lÀhenemine sellele probleemile on andmekogumi lihtne eraldamine ja sÀilitamine, mille jÀrel hoitakse seda kohapeal igas tarbimisteenus.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Probleem seisneb selles, et erinevad teenused tÔlgendavad andmeid, mida nad tarbivad, erinevalt. Need andmed on alati kÀepÀrast. Need muutuvad ja töödeldakse kohapeal. Suhteliselt kiiresti kaotavad nad igasuguse seose allikate andmetega.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega
Mida mutatiivsemad on koopiad, seda rohkem erinevad andmed aja jooksul.

Veelgi hullem on, et selliseid andmeid on retrospektiivis raske parandada (MDM siin vÔib tÔepoolest abiks tulla). Tegelikult on mÔned keerulised tehnoloogilised probleemid, millega ettevÔtted silmitsi seisavad, tingitud heterogeensetest andmetest, mis paljunevad rakendusest rakendusse.

Selle probleemi lahendamiseks, mis puudutab ĂŒhiseid andmeid, tuleb mĂ”elda teistmoodi. Need peaksid olema esmaklassilised objektid arhitektuurides, mida me loome. Pat Heliand nimeltakse selliseid andmeid "vĂ€listeks", ja see on vĂ€ga oluline omadus. Me vajame kapseldamist, et mitte paljastada teenuse sisemist struktuuri, kuid peame hĂ”lbustama teenustel juurdepÀÀsu jagatud andmetele, et nad saaksid oma tööd tĂ”husalt teha.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Probleem seisneb selles, et ĂŒkski tĂ€napĂ€evane lĂ€henemine ei ole enam asjakohane, kuna ei teenuse liidesed, sĂ”numivahetus ega jagatud andmebaasid ei paku head lahendust vĂ€listest andmetest töötamiseks. Teenuse liidesed ei sobi andmete vahetamiseks mingis mahus. SĂ”numivahetus edastab andmeid, kuid ei hoia nende ajalugu, seetĂ”ttu andmed aja jooksul kahjustuvad. Jagatud andmebaasid keskenduvad liiga tugevalt ĂŒhes kohas, mis pidurdab arengu edenemist. Me jÀÀme paratamatult andmete ebaĂ”nnestumise tsĂŒklisse:

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega
Andmete ebaĂ”nnestumise tsĂŒkkel

Voogud: detsentraliseeritud lÀhenemine andmetele ja teenustele

Ideaalis peaksime muutma lĂ€henemist sellele, kuidas teenused töötavad jagatud andmetega. Praegu seisavad kĂ”ik lĂ€henemised silmitsi ĂŒlaltoodud dikotoomiaga, kuna ei ole olemas mingit imerohtu, mille abil saaksime selle lahendada. Siiski saame problematiseerimist ĂŒmber mĂ”elda ja jĂ”uda kompromissini.

See kompromiss eeldab teatud mÀÀral tsentraliseerimist. Saame kasutada detsentraliseeritud logide mehhanismi, kuna see tagab usaldusvÀÀrsed ja skaleeritavad vood. NĂŒĂŒd on vaja, et teenused saaksid ĂŒhineda ja töötada nende jagatud voogudega, kuid soovime vĂ€ltida keerulisi tsentraliseeritud God Service'e, mis sellist töötlemist teevad. Seega on parim variant integreerida voogude töötlemine igasse teenusekasutajasse. Nii saavad teenused ĂŒhendada andmestikke erinevatest allikatest ja kasutada neid vajalikel viisidel.

Üks viis sellise lĂ€henemisviisi saavutamiseks on voogedastusteenuse kasutamine. Valikuid on palju, kuid tĂ€na vaatame Kafka't, kuna selle Stateful Stream Processing vĂ”imaldab tĂ”husalt lahendada esitatud probleemi.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Jaotatud loggingu mehhanismi kasutamine vĂ”imaldab meil minna kulutatud teed pidi ja kasutada sĂ”numivahetust, et töötada sĂŒndmustepĂ”hise arhitektuuriga. Sellise lĂ€henemise puhul peetakse, et see tagab parema skaleeritavuse ja jaotuse kui "pĂ€ring-vastus" mehhanism, kuna see annab voolu kontrolli saajale, mitte saatjale. Kuid kĂ”ik nĂ”uab elus maksmist, ja siin on teil vaja vahetusjaama. Kuid suurte sĂŒsteemide puhul on see kompromiss seda vÀÀrt (mida ei saa öelda teie keskmiste veebirakenduste kohta).

Kui hajutatud logimise eest vastutab vahendaja, mitte traditsiooniline sĂ”numitesĂŒsteem, saab kasutada lisafunktsioone. Transporti on vĂ”imalik lineaarselt skaleerida peaaegu sama hĂ€sti kui hajutatud failisĂŒsteemi. Andmeid saab salvestada logides piisavalt kaua, seega saame mitte ainult sĂ”numite edastamise, vaid ka teabe hoidmist. Skaleeritav salvestus ilma hirmuta saada muudetav ĂŒhine olek.

SeejĂ€rel saab kasutada stateful stream processing (olekuga voogude töötlemise) mehhanismi, et lisada deklareeritud andmebaasi tööriistu tarbimisteenustele. See on vĂ€ga oluline mĂ”te. Kuni andmed on salvestatud ĂŒhistes voogudes, millega kĂ”ik teenused saavad juurde pÀÀseda, on teenuse poolt ĂŒhendamine ja töötlemine privaatne. Need jÀÀvad rangelt piiratud konteksti isolatsiooni.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega
Vabanege andmete dikotoomiast, eraldades immutaabelne olekuvoog. SeejÀrel lisage see funktsioon igasse teenusesse Stateful Stream Processing'i abil.

Seega, kui teie teenus peab töötama tellimustega, toote katalooge, varudega, on teil tĂ€ielik juurdepÀÀs: ainult teie otsustate, millised andmed ĂŒhendada, kus neid töödelda ja kuidas need ajaga muutuvad. Hoolimata sellest, et andmed on jagatud, on töötlemine tĂ€iesti detsentraliseeritud. See toimub igas teenuses, maailmas, kus kĂ”ik kĂ€ib teie reeglite jĂ€rgi.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega
Jagage andmeid nii, et nende terviklikkus ei oleks ohustatud. Omakorda funktsioon, mitte allikas, igas teenuses, kus seda vajatakse.

Tegelikult vĂ”ib andmeid olla vaja massiliselt liigutada. MĂ”nikord vajab teenus valitud andmebaasi mootori jaoks kohalikke ajaloolisi andmekogumeid. Punkt on see, et vĂ”ite garanteerida, et vajadusel saab koopia taastada allikast, kasutades jaotatud logimise mehhanismi. Kafka ĂŒhendajad teevad seda ĂŒlesannet suurepĂ€raselt.

Nii et tÀnasel kÀsitletud lÀhenemisel on mitmeid eeliseid:

  • Andmed kasutatakse ĂŒhisvoogudena, mis vĂ”ivad pikka aega logides sĂ€ilida, samas kui ĂŒhiste andmete töötlemise mehhanism on igas eraldi kontekstis pĂ”hjalikult sisse ehitatud, mis vĂ”imaldab teenustel toimida lihtsalt ja kiiresti. Selline lĂ€henemine tasakaalustab andmete dualismi.
  • Erinevatest teenustest saadud andmeid saab hĂ”lpsasti liita kogudeks. See lihtsustab suhtlemist ĂŒhiste andmetega ja kaotab vajaduse toetada kohalikke andmekogusid andmebaasis.
  • Stateful Stream Processing salvestab andmeid ainult vahemĂ€llu, samas kui tĂ”e allikaks jÀÀvad ĂŒhised logid, seetĂ”ttu ei ole andmete ajaga kahjustumise probleem nii terav.
  • Oma olemuselt juhitakse teenuseid andmete kaudu, mis tĂ€hendab, et kuigi andmemahtude kasv on pidev, suudavad teenused siiski kiiresti reageerida Ă€risĂŒndmustele.
  • Skaleeritavuse probleemid langevad maaklerite Ă”lule, mitte teenustele. Seega vĂ€heneb teenuste kirjutamise keerukus oluliselt, kuna ei pea muretsema skaleeritavuse pĂ€rast.
  • Uute teenuste lisamine ei nĂ”ua vanade muutmist, mistĂ”ttu on uute teenuste ĂŒhendamine lihtsam.

Nagu nĂ€ete, on see rohkem kui lihtsalt REST. Meil on tööriistade komplekt, mis vĂ”imaldab töötada ĂŒhiste andmetega detsentraliseeritud sĂŒsteemis.

TĂ€na artiklis ei ole kĂ€sitletud kaugeltki kĂ”iki aspekte. Me peame veel vĂ€lja selgitama, kuidas tasakaalustada pĂ€ringute ja vastuste paradigma ning sĂŒndmustepĂ”hise paradigma vahel. Kuid me tegeleme sellega jĂ€rgmisel korral. On teemasid, mida tasub pĂ”hjalikumalt tundma Ă”ppida, nĂ€iteks, mis teeb Stateful Stream Processing nii heaks. Sellest rÀÀgime kolmandas artiklis. Samuti on teisi vĂ”imsaid konstruktsioone, mida saame kasutada, kui me neid rakendame, nĂ€iteks, Exactly Once Processing. Selle abil muutuvad mĂ€ngureeglid jaotatud Ă€risĂŒsteemide jaoks, kuna see konstruktsioon tagab tehingu garantii XA skaleeritaval viisil. Sellest rÀÀgime neljandas artiklis. Ja lĂ”puks peame ĂŒle kĂ€ima nende pĂ”himĂ”tete rakendamise detailidest.

Andmete dikotoomia: uue mÔtlemise suhe andmete ja teenustega

Aga seni lihtsalt pea meeles jĂ€rgmist: andmete dikhootoomia on jĂ”ud, millega me silmitsi seisame Ă€riteenuste loomisel. Ja me peame seda meeles pidama. Fookus on selles, et pöörata kĂ”ik pea peale ja hakata kĂ€sitlema ĂŒhisandmeid esmaklassiliste objektidena. Stateful Stream Processing pakub selleks ainulaadset kompromissi. See vĂ€ldib tsentraliseeritud „jumalikku komponente”, mis pidurdavad progressi. Veelgi enam, see tagab andmevoogude kĂ€ideldavuse, skaleeritavuse ja tĂ”rgeteta töö ning lisab need igasse teenusesse. Nii saame keskenduda ĂŒhiselt mĂ”ttekĂ€igule, millele saab ĂŒhenduda iga teenus ja töötada selle andmetega. SeetĂ”ttu vĂ”tavad teenused omandades rohkem skaleeritavust, vahetatavust ja iseseisvust. Nad nĂ€evad seetĂ”ttu mitte ainult head vĂ€lja tahvelarvutites ja hĂŒpoteeside kontrollimisel, vaid toimivad ja arenevad aastakĂŒmneid.

Uuri kursuse kohta lÀhemalt.

Allikas: habr.com

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