Eesti

Põhjalik juhend sündmuspõhise arhitektuuri sõnumimustrite kohta, uurides erinevaid lähenemisviise.

Sündmuspõhine arhitektuur: Sõnumimustrite valdamine skaleeritavate süsteemide jaoks

Sündmuspõhine arhitektuur (EDA) on tarkvara arhitektuuriparadigma, mis keskendub sündmuste tootmisele, tuvastamisele ja tarbimisele. Tihedalt seotud teenuste interaktsioonide asemel edendab EDA asünkroonkommunikatsiooni, mis viib skaleeritavate, vastupidavate ja lahtisidestatud süsteemideni. EDA põhikomponent on sõnumimustrite tõhus kasutamine. Käesolev juhend uurib erinevaid EDA-s levinud sõnumimustreid, pakkudes praktilisi näiteid ja parimaid tavasid globaalsetele arendusmeeskondadele.

Mis on sündmuspõhine arhitektuur?

Traditsioonilises päringu/vastuse arhitektuuris kutsuvad teenused üksteist otse. See tihe sidumine võib luua kitsaskohti ja muuta süsteemid hapraks. EDA seevastu lahendab teenused lahti, tutvustades sündmusbussi või sõnumivahendajat. Teenused suhtlevad, avaldades sündmusi bussile, ja teised teenused tellivad sündmusi, millest nad huvitatud on. See asünkroonne kommunikatsioon võimaldab teenustel töötada iseseisvalt, parandades skaleeritavust ja veataluvust.

EDA peamised eelised

Levinud sõnumimustrid sündmuspõhises arhitektuuris

EDA-s saab kasutada mitmeid sõnumimustreid, millest igal on oma tugevused ja nõrkused. Õige mustri valimine sõltub teie rakenduse spetsiifilistest nõuetest.

1. Publish-Subscribe (Pub-Sub)

Publish-subscribe muster on üks EDA aluslikumaid sõnumimustreid. Selles mustris toodavad kirjastajad sõnumeid teemasse või vahetusse, tellijad registreerivad oma huvi konkreetsete teemade vastu. Sõnumivahendaja suunab seejärel sõnumid kirjastajatelt kõigile huvitatud tellijatele.

Näide

Mõelge e-kaubanduse platvormile. Kui klient esitab tellimuse, avaldatakse teema „Orders“ kohta sündmus „OrderCreated“. Teenused, nagu laoseisude teenus, makseteenus ja saatmisteenus, tellivad teema „Orders“ ja töötlevad sündmust vastavalt.

Rakendamine

Pub-Subi saab rakendada, kasutades sõnumivahendajaid nagu Apache Kafka, RabbitMQ või pilvepõhiseid sõnumsideteenuseid nagu AWS SNS/SQS või Azure Service Bus. Konkreetsed rakendamise üksikasjad erinevad sõltuvalt valitud tehnoloogiast.

Eelised

Puudused

2. Sündmusallik (Event Sourcing)

Sündmusallikas on muster, kus kõik rakenduse oleku muutused salvestatakse sündmuste järjestusena. Rakenduse oleku salvestamise asemel salvestab rakendus ajaloo sündmustest, mis viisid selle oleku saavutamiseni. Praegust olekut saab taastada sündmuste taasesitamise teel.

Näide

Mõelge pangandusrakendusele. Konto praeguse saldo salvestamise asemel salvestab rakendus sündmusi nagu „Deposit“, „Withdrawal“ ja „Transfer“. Praeguse saldo saab arvutada, taasesitades need sündmused järjestikku.

Rakendamine

Sündmusallikas hõlmab tavaliselt sündmuste salvestamist sündmuste poodi, mis on spetsialiseerunud andmebaas, mis on optimeeritud sündmuste salvestamiseks ja otsimiseks. Apache Kafka kasutatakse sageli sündmuste poena, kuna see suudab töödelda suurt hulka sündmusi ja pakub tugevaid järjestusgarantiid.

Eelised

Puudused

3. Command Query Responsibility Segregation (CQRS)

CQRS on muster, mis eraldab andmesalvestuse lugemis- ja kirjutamistoimingud. See määratleb kaks erinevat mudelit: käskude mudeli kirjutamistoimingute käsitlemiseks ja päringumudeli lugemistoimingute käsitlemiseks. See eraldamine võimaldab iga mudeli optimeerida selle spetsiifilise otstarbe jaoks.

Näide

E-kaubanduse rakenduses võib käskude mudel käsitleda selliseid toiminguid nagu tellimuste loomine, tooteinfo värskendamine ja maksete töötlemine. Päringumudel võib käsitleda selliseid toiminguid nagu tootenimekirjade kuvamine, tellimuste ajaloo vaatamine ja aruannete koostamine.

Rakendamine

CQRS-i kasutatakse sageli koos sündmusallikaga. Käske kasutatakse sündmuste käivitamiseks, mida seejärel kasutatakse lugemislike mudelite värskendamiseks. Lugemislike mudelite optimeerimine spetsiifiliste päringumustrite jaoks võib tagada kiirema ja tõhusama lugemisjõudluse.

Eelised

Puudused

4. Päring-Vastus (Request-Reply)

Kuigi EDA edendab asünkroonkommunikatsiooni, esineb olukordi, kus päring-vastuse muster on siiski vajalik. Selles mustris saadab üks teenus teisele teenusele päringusõnumi ja ootab vastussõnumit.

Näide

Kasutajaliides võib saata taotluse taustateenusele, et hankida kasutajaprofiili teave. Taustateenus töötleb taotlust ja saadab vastuse, mis sisaldab kasutajaprofiili andmeid.

Rakendamine

Päring-vastuse mustrit saab rakendada, kasutades sõnumivahendajaid, mis toetavad päring-vastuse semantikat, nagu näiteks RabbitMQ. Päringusõnum sisaldab tavaliselt korrelatsioonikoodi, mida kasutatakse vastussõnumi sidumiseks algse päringuga.

Eelised

Puudused

5. Saga

Saga on muster mitme teenuse pikaajaliste tehingute haldamiseks. Hajussüsteemis võib üks tehing hõlmata mitme andmebaasi või teenuse värskendusi. Saga tagab nende värskenduste järjepideva sooritamise, isegi tõrgete korral.

Näide

Mõelge e-kaubanduse tellimuste töötlemise stsenaariumile. Saga võib hõlmata järgmisi samme: 1. Loo tellimus tellimusteenuses. 2. Broneeri laoseis laoteenuses. 3. Töötle makse makseteenuses. 4. Saada tellimus saatmisteenuses.

Kui mõni neist sammudest ebaõnnestub, peab saga kompenseerima eelnevad sammud, et tagada süsteemi järjepidevuse säilimine. Näiteks, kui makse ebaõnnestub, peab saga tellimuse tühistama ja broneeritud laoseisu vabastama.

Rakendamine

Sagasid saab rakendada kahel peamisel viisil: 1. Koreograafiapõhine saga: Iga sagas osalev teenus vastutab sündmuste avaldamise eest, mis käivitavad saga järgmise sammu. Tsentraalset orkestrijuhti pole. 2. Orkestreerimispõhine saga: Tsentraalne orkestreerimisteenus haldab sagat ja koordineerib kaasatud samme. Orkestrijuht saadab käske osalevatele teenustele ja kuulab iga sammu edukust või ebaõnnestumist näitavaid sündmusi.

Eelised

Puudused

Õige sõnumimustri valimine

Sõnumimustri valik sõltub teie rakenduse spetsiifilistest nõuetest. Otsuse tegemisel kaaluge järgmisi tegureid:

Siin on tabel, mis võtab kokku iga sõnumimustri peamised omadused:

Muster Kirjeldus Järjepidevus Keerukus Kasutusalad
Pub-Sub Kirjastajad saadavad sõnumeid teemadesse, tellijad saavad sõnumeid teemadest. Lõplik Mõõdukas Teavitused, sündmuste levitamine, teenuste lahtisidestamine.
Sündmusallikas Salvestage kõik rakenduse oleku muutused sündmuste järjestusena. Tugev Kõrge Auditeerimine, silumine, ajatillimised, oleku taastamine.
CQRS Eraldage lugemis- ja kirjutamistoimingud erinevateks mudeliteks. Lõplik (lugemislike mudelite jaoks) Kõrge Lugemis- ja kirjutamisjõudluse optimeerimine, lugemis- ja kirjutamistoimingute iseseisev skaleerimine.
Päring-Vastus Teenus saadab päringu ja ootab vastust. Vahetu Lihtne Sünkroonilise sarnased interaktsioonid asünkroonse sõnumside kaudu.
Saga Hallake mitme teenuse pikaajalisi tehinguid. Lõplik Kõrge Hajutatud tehingud, tagades andmete järjepidevuse mitme teenuse vahel.

Parimad tavad EDA sõnumimustrite rakendamiseks

Siin on mõned parimad tavad, mida EDA sõnumimustrite rakendamisel arvestada:

Pärismaailma näited

EDA ja sellega seotud sõnumimustrid on kasutusel laias valikus tööstusharudes ja rakendustes. Siin on mõned näited:

Näiteks võib globaalne toidu kohaletoimetamise teenus kasutada tellimuste haldamiseks EDA-d. Kui klient esitab tellimuse, avaldatakse sündmus `OrderCreated`. Restorani teenus tellib selle sündmuse toidu valmistamiseks. Tarne teenus tellib selle sündmuse juhi määramiseks. Makseteenus tellib selle sündmuse makse töötlemiseks. Iga teenus töötab iseseisvalt ja asünkroonselt, võimaldades süsteemil hallata suurt hulka tellimusi tõhusalt.

Järeldus

Sündmuspõhine arhitektuur on võimas paradigm skaleeritavate, vastupidavate ja lahtisidestatud süsteemide ehitamiseks. Mõistes ja tõhusalt kasutades sõnumimustreid, saavad arendajad luua tugevaid ja paindlikke rakendusi, mis suudavad kohaneda muutuvate ärinõuetega. Käesolev juhend pakkus ülevaate EDA-s kasutatavatest levinud sõnumimustritest, koos praktiliste näidete ja parimate tavadega. Õige mustri valimine teie spetsiifiliste vajaduste jaoks on eduka sündmuspõhise süsteemi ehitamisel ülioluline. Pidage meeles, et valiku tegemisel kaaluge järjepidevust, latentsust, keerukust, skaleeritavust ja veataluvust. Omakske asünkroonse kommunikatsiooni jõudu ja vabastage oma rakenduste täielik potentsiaal.

Sündmuspõhine arhitektuur: Sõnumimustrite valdamine skaleeritavate süsteemide jaoks | MLOG