Tere, kÔigile! Meil on suurepÀrased uudised, juunis alustab OTUS taas kursust , seetÔttu jagame traditsiooniliselt teiega kasulikke materjale.

Kui olete sattunud kogu sellele mikroteenuste jutu peale ilma igasuguse kontekstita, siis on teil vabandatav seda veidi kummalisena pidada. Rakenduse jagamine fragmentideks, mis on omavahel seotud vĂ”rguga, tĂ€hendab kindlasti keerukate talitlushĂ€irete taluvuse reĆŸiimide lisamist tekkivasse jaotatud sĂŒsteemi.
Kuigi selline lĂ€henemine hĂ”lmab mitme eraldiseisva teenuse jagamist, on lĂ”ppkokkuvĂ”tte eesmĂ€rk palju rohkem kui lihtsalt nende teenuste töö erinevates masinates. Siin on juttu suheldes ĂŒmbritseva maailmaga, mis oma olemuselt on samuti jaotatud. Mitte tehnilises mĂ”ttes, vaid pigem ekosĂŒsteemi mĂ”ttes, mis koosneb paljusid inimesi, meeskondi, programme, ja iga ĂŒks neist peab omamoodi oma tööd tegema.
EttevĂ”tted, nĂ€iteks, on nagu kogum jaotatud sĂŒsteeme, mis koos aitavad kaasa teatud eesmĂ€rgi saavutamisele. Me oleme ignoreerinud seda fakti aastakĂŒmneid, pĂŒĂŒdes saavutada ĂŒhtsust, edastades faile FTP kaudu vĂ”i kasutades ettevĂ”tte integratsioonitööriistu, samal ajal keskendudes oma isiklikele eraldatud eesmĂ€rkidele. Kuid teenuste tulekuga on kĂ”ik muutunud. Teenused on aidanud meil vaadata ĂŒle horisondi ja nĂ€ha maailma omavahel seotud programme, mis töötavad koos. Kuid eduka toimimise jaoks on vajalik teadvustada ja projekteerida kaks pĂ”himĂ”tteliselt erinevat maailma: vĂ€line maailm, kus me elame teiste teenuste ekosĂŒsteemis, ja meie isiklik, sisemine maailm, kus me valime ĂŒksi.

Selline jaotatud maailm erineb sellest, kus me ĂŒles oleme kasvanud ja millega oleme harjunud. Tava monoliitsete arhitektuuride ehitamise pĂ”himĂ”tted ei pea mingit kriitikat. SeetĂ”ttu on selliste sĂŒsteemide Ă”ige mĂ”istmine midagi enamat kui lihtsalt toreda skeemi loomine valgele markeritahvlile vĂ”i lahe tĂ”estus kontseptsioonist. Siin on juttu sellest, et selline sĂŒsteem töötaks edukalt pika aja jooksul. Ănneks on teenused juba ĂŒsna kaua olemas olnud, kuigi need nĂ€evad vĂ€lja erinevad. on endiselt asjakohane, isegi kui see on maitsestatud Dockeri, Kubernetesega ja veidi hipsterlike habemete poolt kulunud.
Seega vaatame tĂ€na, kuidas reeglid on muutunud, miks peame oma lĂ€henemist teenustele ja andmetele, mida nad ĂŒksteisele edastavad, uuesti ĂŒle vaatama ning miks me vajame selleks tĂ€iesti erinevat tööriistakomplekti.
Kapseldamine ei ole alati teie sÔber
Mikroteenused saavad ĂŒksteisest sĂ”ltumatult töötada. Just see omadus annab neile suurima vÀÀrtuse. See omadus vĂ”imaldab teenustel skaleeruda ja kasvada. Mitte ainult kvadriljonite kasutajate vĂ”i petabaitide andmete skaleerimise mĂ”ttes (kuigi ka siin vĂ”ivad nad aidata), vaid pigem inimestega seoses, kuna meeskonnad ja organisatsioonid kasvavad pidevalt.

Siiski, sĂ”ltumatus on kahe teraga mÔÔk. See tĂ€hendab, et teenus vĂ”ib iseenesest sujuvalt ja probleemideta töötada. Kuid kui teenuses kasutatakse funktsiooni, mis nĂ”uab teise teenuse kaasamist, peame lĂ”puks tegema muudatusi peaaegu samaaegselt mĂ”lemas teenuses. Monoliidis on see lihtne, lihtsalt teete muudatuse ja saadate selle vĂ€lja, aga iseseisvate teenuste sĂŒnkroonimise korral on probleeme rohkem. Meeskondade ja vĂ€ljalasketsĂŒklite koordineerimine hĂ€irib paindlikkust.

Standardse lĂ€henemise kohaselt pĂŒĂŒtakse ebameeldivaid ĂŒlekandeid lihtsalt vĂ€ltida, eraldades funktsionaalsuse selgelt teenuste vahel. Ăhe sissepÀÀsu teenus vĂ”ib olla siin hea nĂ€ide. Sellel on selgelt mÀÀratletud roll, mis eristab seda teistest teenustest. See selge jaotus tĂ€hendab, et kiiresti muutuva nĂ”udlusega teenuste maailmas on seesama ĂŒhesissepÀÀsu teenus tĂ”enĂ€oliselt harva muutuv. See eksisteerib ÀÀrmiselt piiratud kontekstis.

Probleem on selles, et reaalmaailmas ei saa Àriteenused pidevalt hoida sama selget rollide eristust. NÀiteks töötavad need Àriteenused suuremal mÀÀral andmetega, mis pÀrinevad teistelt sarnastelt teenustelt. Kui tegelete veebikaubandusega, siis tellimuste töötlemine, toodete kataloog vÔi kasutajainformatsioon muutuvad paljude teie teenuste nÔudmiseks. Iga teenus vajab nende andmete tööks juurdepÀÀsu.

Enamik Àriteenuseid kasutab sama andmevoogu, mistÔttu nende töö on pidevalt omavahel seotud.
Niinimetatud oleme jÔudnud olulise hetkeni, millest tasub rÀÀkida. Kuigi teenused toimivad hÀsti infrastruktuuri komponentide puhul, mis töötavad suuresti isoleeritult, on enamik Àriteenuseid omavahel palju tihedamalt 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 selles, et andmed ja teenused on lahutamatud. Ăhelt poolt kutsub kapseldamine meid andmeid varjama, et teenuseid saaks omavahel eristada ja nende kasvu ja edasisi muudatusi lihtsustada. Teiselt poolt peame saama vabalt jagada ja omada ĂŒhiseid andmeid nagu ka teisi. RÀÀgime vĂ”imalusest alustada tööd kohe, sama vabalt nagu igas muus infotehnoloogias.
Kuid infotehnoloogiatel on kapseldamisega vĂ€he ĂŒhist. Tegelikult on isegi vastupidi. Andmebaasid teevad kĂ”ik endast oleneva, et anda juurdepÀÀs neis hoitavatele andmetele. Need tulevad koos vĂ”imsa deklaratiivse liidese, mis vĂ”imaldab andmeid muuta nii, nagu soovite. See funktsionaalsus on oluline eeluurimisfaasis, kuid mitte pidevalt kasvava teenuse haldamiseks.

Siin tekib dilemma. VasturÀÀkivus. Dikotoomia. Sest infotehnoloogiad â see on andmete pakkumine, ja teenused â andmete varjamine.
Need two forces are fundamental. They underlie much of our work, constantly fighting for supremacy in the systems we create.
As service systems grow and evolve, we see different manifestations of the consequences of data dichotomy. Either the service interface will grow, providing an ever-wider range of functions and will start looking like a very strange homemade database, or we will be faced with disappointment and will implement some way to extract or move large sets of data from service to service.

In turn, creating anything that looks like a strange homemade database will lead to a whole series of problems. We won't go into the details of what is dangerous about shared database, let's just say it represents significant costly engineering and operational for a company trying to use it.
Worse still, data volumes multiply the problems with service boundaries. The more shared data lies within a service, the more complex the interface will become and the harder it will be to merge datasets coming from various services.
An alternative approach of extracting and moving whole datasets also has its problems. The common approach to this issue looks like simply extracting and storing a dataset entirely, and then storing it locally in each consumer service.

The issue is that different services interpret the data they consume differently. This data is always at hand. It changes and is processed locally. Quite quickly, it ceases to have anything in common with the source data.

The more mutable the copies are, the more the data will differ over time.
Whatâs worse, such data is difficult to correct retrospectively ( can indeed come to the rescue here). In fact, some of the intractable technological problems faced by businesses arise from heterogeneous data multiplying from application to application.
To find a solution to the problem of common data, one needs to think differently. They must become first-class objects in the architectures we build. nimetatakse neid andmeid "vĂ€listeks", ja see on vĂ€ga oluline omadus. Me vajame kapseldamist, et mitte paljastada teenuse sisemist ĂŒlesehitust, kuid peame hĂ”lbustama teenuste juurdepÀÀsu jagatud andmetele, et nad saaksid oma tööd Ă”igesti teha.

Probleem on selles, et ĂŒkski praegustest lĂ€henemisviisidest ei ole enam asjakohane, kuna ei teenuse liidesed, juhuslikud teated ega jagatud andmebaasid ei paku head lahendust vĂ€liste andmete töötlemiseks. Teenuse liidesed ei sobi andmete vahetamiseks mingis ulatuses. Juhuslikud teated edastavad andmeid, kuid ei salvesta nende ajalugu, mistĂ”ttu andmed aja jooksul riknevad. Jagatud andmebaasid on liiga keskendunud ĂŒhele punktile, mis pidurdab edusamme. Me jÀÀme paratamatult nĂ”rkade andmete tsĂŒklisse:

NĂ”rkade andmete tsĂŒkkel
Voogud: detsentraliseeritud lÀhenemine andmetele ja teenustele
Ideaalis peame muutma lĂ€henemist sellele, kuidas teenused töötavad jagatud andmetega. Praegu seisavad kĂ”ik lĂ€henemisviisid silmitsi ĂŒlaltoodud dikotoomiaga, kuna ei ole mingit maagilist pulbrit, millega saaksime selle lahendada. Siiski saame probleemi uuesti mĂ”testada ja leida kompromissi.
See kompromiss eeldab teatud mÀÀral tsentraliseerimist. Saame kasutada jaotatud logide mehhanismi, kuna see tagab usaldusvÀÀrsed ja skaleeritavad vood. NĂŒĂŒd peab teenused saama liituda ja töötada nende jagatud voogudega, kuid soovime vĂ€ltida keerulisi tsentraliseeritud Jumala teenuseid, mis teevad sellist töötlemist. SeetĂ”ttu on parim lahendus integreerida voogude töötlemine igasse teenusesse-kasutajasse. Nii saavad teenused kombineerida andmekogusid erinevatest allikatest ja töötada nendega nii, nagu nemad soovivad.
Ăks vĂ”imalus sellise lĂ€henemise saavutamiseks on voogude töötlemise platvormi kasutamine. Olemas on palju vĂ”imalusi, kuid tĂ€na vaatame just Kafka't, kuna selle Stateful Stream Processing kasutamine vĂ”imaldab tĂ”husalt lahendada esitatud probleemi.

Jaotatud logimise mehhanismi kasutamine vĂ”imaldab meil minna mööda rajatud rada ja kasutada juhuslikku teatevahetust, et töötada koos. . Sellise lĂ€henemise eelduseks on parem skaleerimine ja jaotamine kui âkĂŒsi-vastaâ mehhanism, kuna see annab vooluhalduse kontrolli saajale, mitte saatjale. Kuid kĂ”ike selles elus peab eest maksma, ja siin vajate brokerit. Suurte sĂŒsteemide puhul on see kompromiss seda vÀÀrt (mida ei saa öelda teie keskmiste veebirakenduste kohta).
Kui jaotatud logimine sĂ”ltub brokerist, mitte traditsioonilisest sĂ”numiteedest, siis saab kasutada tĂ€iendavaid funktsioone. Transporti saab lineaarselt skaleerida peaaegu sama hĂ€sti kui jaotatud failisĂŒsteemi. Andmeid vĂ”ib logides hoida piisavalt kaua, mistĂ”ttu saame mitte ainult sĂ”numite_exchange, vaid ka teabe sĂ€ilitamise. Skaleeritav salvestus ilma hirmuta, et saada muudetav ĂŒldine olek.
SeejĂ€rel on vĂ”imalik kasutada stateful stream processing (olekuga voogude töötlemine) mehhanismi andmebaasi deklaratiivsete tööriistade lisamiseks tarbiteenustele. See on vĂ€ga oluline mĂ”te. Niikaua kui andmed on jagatud voogudes, millele kĂ”ik teenused saavad juurde pÀÀseda, on teenuse poolne ĂŒhendamine ja töötlemine privaatne. Nad jÀÀvad rangelt piiratud konteksti sees eraldatuks.

Vabanege andmete diktoomast, jagades muutumatud olekute vood. SeejÀrel lisage see funktsioon iga teenuse jaoks, kasutades stateful stream processing.
Seega, kui teie teenus peab töötama tellimustega, toote kataloogiga, laoga, on tal tĂ€ielik juurdepÀÀs: ainult teie otsustate, millised andmed ĂŒhendada, kus neid töödelda ja kuidas need aja jooksul muutuvad. Kuigi andmed on jagatud, on nende töötlemine tĂ€ielikult detsentraliseeritud. Seda tehakse igas teenuses, maailmas, kus kĂ”ik kĂ€ib teie reeglite jĂ€rgi.

Jagage andmeid nii, et nende terviklikkus ei oleks rikutud. Kapselke funktsioon, mitte allikas, igas teenuses, kus seda vajatakse.
Tavaliselt juhtub, et andmeid tuleb massiliselt liigutada. MĂ”nikord vajab teenus valitud andmebaasi mootori kohaliku ajaloolise andmeseti. Oluline on, et vajadusel saab koopia taastada allikast, kasutades jaotatud logimise mehhanismi. Kafka ĂŒhendused teevad selle ĂŒlesande suurepĂ€raselt Ă€ra.
KÀesoleval lÀhenemisel on mitmeid eeliseid:
- Andmeid kasutatakse jagatud voogude kujul, mida saab pikka aega logides hoida, ning jagatud andmetega töötamine on iga konteksti sees, mis vÔimaldab teenustel töötada kiiresti ja tÔhusalt. Sedasi saab tasakaalustada andmete dikotoomiat.
- Erinevatest teenustest pĂ€rinevaid andmeid on lihtne ĂŒhendada kogudeks. Nii lihtsustub ĂŒhiste andmetega töötamine ja kaob vajadus sĂ€ilitada kohalikke andmesetteid andmebaasis.
- Stateful Stream Processing ainult vahemÀlestab andmeid, samas kui tÔe allikaks jÀÀvad jagatud logid, seega ei ole probleem andmete kahjustamisest ajas nii terav.
- Oma olemuselt juhivad teenuseid andmed, seega hoolimata andmemahtude pidevast kasvust saavad teenused siiski kiiresti reageerida Ă€riĂŒritustele.
- Skaalautuvuse probleemid lasuvad brokera peal, mitte teenustel. Nii vĂ€heneb teenuste kirjutamise keerukus, kuna ei ole vaja muretseda skaala ĂŒle.
- Uute teenuste lisamine ei nĂ”ua vanade muutmist, seetĂ”ttu muutub uute teenuste ĂŒhendamine lihtsamaks.
Nagu nÀete, on see rohkem kui lihtsalt REST. Oleme saanud tööriistade komplekti, mis vÔimaldab töötada jagatud andmetega detsentraliseeritult.
KĂ€esolevas artiklis ei kĂ€sitletud kaugeltki kĂ”iki aspekte. Peame endiselt vĂ€lja selgitama, kuidas tasakaalustada pĂ€ringu-vastuse paradigma ja sĂŒndmustest lĂ€htuva paradigma vahel. Kuid sellega tegeleme jĂ€rgmine kord. On teemasid, millega tuleb lĂ€hemalt tutvuda, nĂ€iteks, miks on Stateful Stream Processing nii hea. Sellest rÀÀgime kolmandas artiklis. Lisaks on olemas veel teisi vĂ”imsaid konstruktsioone, millest saame kasu, kui me neid Ă€ra kasutame, nĂ€iteks, Selle abil muutuvad mĂ€ngureeglid jagatud Ă€ri sĂŒsteemides, kuna see konstruktsioon tagab tehingu garantiid skaleeritavas vormis. Sellest rÀÀgitakse neljas artiklis. Ja lĂ”puks peame me kiirelt ĂŒle vaatama nende pĂ”himĂ”tete rakendamise/detailid.

Kuid praegu lihtsalt pidage meeles jĂ€rgmist: andmete dikotoomia on see jĂ”ud, millega me silmitsi seisame Ă€riteenuste loomisel. Ja me peame seda meeles pidama. Fookus on selles, et kĂ”ik pea peale keerata ja hakata nĂ€gema ĂŒhiseid andmeid esmaklassiliste objektidena. Stateful Stream Processing pakub selleks ainulaadset kompromissi. See vĂ€ldib tsentraliseeritud "jumala komponente", mis pidurdavad edusamme. Veelgi enam, see tagab andmevoogude torustike operatiivsuse, skaleeritavuse ja veakindluse ning lisab need igasse teenusesse. SeetĂ”ttu saame keskenduda ĂŒhiselle teadlikkusele, millega iga teenus saab liituda ja mille andmete kallal töötada. Nii muutuvad teenused skaleeritavamaks, vĂ”rdselt asendatavateks ja iseseisvateks. SeetĂ”ttu nĂ€evad nad head vĂ€lja mitte ainult mĂ€rgistusplaatidel ja hĂŒpoteeside testimisel, vaid töötavad ja arenevad ka aastakĂŒmneid.
Allikas: habr.com
