Dodo IS arhitektuuri ajalugu: tagakontori tee

Habrahabr muudab maailma. Oleme pidanud oma blogi ĂŒle aasta. Kusagil pool aastat tagasi saime Habra kĂŒlastajate kĂ€est ĂŒsna loogilist tagasisidet: „Dodo, te rÀÀgite igal pool, et teil on oma sĂŒsteem. Mis see sĂŒsteem on? Ja milleks on see vajalik pizzakettidele?”

MĂ”tlesime natuke ja mĂ”istsime, et teil on Ă”igus. Proovime kĂ”ike selgitada lihtsal viisil, kuid see tuleb katkendlikult ja kustki ei leia tĂ€ielikku sĂŒsteemi kirjeldust. Nii algas pikk teekond teabe kogumise, autorite otsimise ja Dodo IS-i seeria artiklite kirjutamise suunas. Alustame!

AitĂ€h: tĂ€nu teile, et jagate meiega oma tagasisidet. TĂ€nu sellele oleme lĂ”puks sĂŒsteemi kirjeldanud, koostanud tehnoradarit ja peagi avaldame pĂ”hjaliku ĂŒlevaate meie protsessidest. Ilma teieta istuksime veel 5 aastat.

Dodo IS arhitektuuri ajalugu: tagakontori tee

Artiklite seeria „Mis on Dodo IS?” rÀÀgib:

  1. Varajane monoliit Dodo IS-is (2011-2015). (Töös
)
  2. Tagakontori tee: eraldi andmebaasid ja buss. (Olete siin)
  3. Kliendiosakonna tee: fassaad andmebaasi kohal (2016-2017). (Töös
)
  4. TĂ”eliste mikroteenuste ajalugu. (2018-2019). (Töös
)
  5. Monoliidi lĂ”plik jagamine ja arhitektuuri stabiliseerimine. (Töös
)

Kui soovite veel midagi teada, kirjutage kommentaaridesse.

Autorilt ajaloost pÔhinev arvamus
Korraldan regulaarselt uutest töötajatest koosolekuid teemal "SĂŒsteemi arhitektuur". Meie juures nimetatakse seda "Intro to Dodo IS Architecture" ning see on osa uute arendajate onboarding-protsessist. RÀÀkides meie arhitektuurist ja selle omadustest, tekkis mul ajalooline lĂ€henemine selle kirjeldamiseks.

Tavaliselt vaatame sĂŒsteemi kui komponentide (tehniliste vĂ”i kĂ”rgema taseme) kogumit, Ă€rimooduleid, mis omavahel sĂŒmbioosis töötavad mingi eesmĂ€rgi nimel. Ja kuigi selline lĂ€henemine on projekteerimise jaoks Ă”igustatud, ei sobi see kirjeldamiseks ja mĂ”istmiseks. Siin on mitu pĂ”hjust:

  • Reaalsus erineb sellest, mis on paberil. Mitte kĂ”ik, mida plaanitakse, ei teostu. Ja meid huvitab, kuidas asjad tegelikult vĂ€lja kukkusid ja töötavad.
  • Informatsiooni jĂ€rjestikune esitlemine. Üldiselt vĂ”iks liikuda kronoloogiliselt algusest praeguse seisundini.
  • Lihtsalt keeruliseks. See ei ole universaalne, kuid meie puhul on see just nii. Ahnemad lĂ€henemised arhitektuuris liikusid keerulisematele. Tihti saadi keerukamaid lahendusi rakendamise kiirus- ja stabiilsusprobleemide lahendamiseks, samuti tosin muud omadust, mis on loetletud mittefunktsionaalsetes nĂ”uetes (siit hĂ€sti rÀÀgitud keerukuse vastandamisest teistele nĂ”uetele).

2011. aastal nÀgi Dodo IS arhitektuur vÀlja selline:

Dodo IS arhitektuuri ajalugu: tagakontori tee

Kuni 2020. aastani oli see pisut keerulisem ja nÀgi vÀlja selline:

Dodo IS arhitektuuri ajalugu: tagakontori tee

Kuidas see evolutsioon toimus? Miks on sĂŒsteemi erinevad osad vajalikud? Milliseid arhitektuurilisi lahendusi ja miks oli valitud? Uurime seda artiklite seerias.

Esimesed probleemid 2016. aastast: miks peavad teenused loobuma monoliidist.

Esimesed artiklid tsĂŒklist kĂ€sitlevad teenuseid, mis esimesena monoliidist eraldusid. Et viia teid konteksti, rÀÀgin, millised probleemid olid meie sĂŒsteemis 2016. aasta alguseks ja millega pidime tegelema teenuste jagamisel.

Üks ĂŒhisandmebaas MySql, kuhu kirjutasid oma kirjed kĂ”ik rakendused, mis tol hetkel Dodo IS-is eksisteerisid. TagajĂ€rjed olid sellised:

  • Suurelt koormus (85% pĂ€ringutest langes lugemisele).
  • Andmebaas laienes. Selle tĂ”ttu muutusid selle hind ja tugi probleemiks.
  • Üksik rikke punkt. Kui ĂŒks rakendus, mis andmebaasi kirjutab, hakkas Ă€kki seda aktiivsemalt tegema, siis teised rakendused tundsid seda endas.
  • Ebaefektiivne andmete hoidmine ja pĂ€ringud. Tihti hoiti andmeid sellises struktuuris, mis oli mugav ĂŒhe stsenaariumi jaoks, kuid ei sobinud teiste jaoks. Indeksid kiirendasid ĂŒhtede toimingute tegemist, kuid vĂ”isid aeglustada teisi.
  • Osaliselt leevendasid probleeme kiired suhted ja read-repliigid andmebaasidele (sellest tuleb eraldi artikkel), kuid nad andsid vaid ajaliselt vĂ”itu ja probleemi pĂ”himĂ”tteliselt ei lahendanud.

Probleemiks oli monoliidi eksisteerimine. TagajÀrjed olid sellised:

  • Üksikud ja haruldased vĂ€ljaanded.
  • Paljude inimeste koostöö keerukus.
  • Uute tehnoloogiate, uute raamistike ja raamatukogude juurutamise vĂ”imatus.

Probleemid andmebaasi ja monoliidiga on korduvalt ilmnenud, nĂ€iteks 2018. aasta alguse languste kontekstis (Ole nagu Munk, vĂ”i paar sĂ”na tehnilise vĂ”la kohta, PĂ€ev, mil Dodo IS peatati. AsĂŒnkroonne stsenaarium ja Lugu Dodo linnust Fenixi liigist. Suur Dodo IS langus), nii et ei jÀÀ kauaks peatuma. Ütleksin vaid, et soovisime arenduses rohkem paindlikkust. EelkĂ”ige kehtib see kĂ”ige koormatumate ja juuri ulatuvate teenuste kohta — Auth ja Tracker.

Tagavarahalduri tee: eraldi andmebaasid ja buss.

Jaotise navigeerimine.

  1. 2016. aasta monoliidi skeem.
  2. Alustame monoliidi koormuse vÀhendamist: Authi ja Trackeri eraldamine.
  3. Mida teeb Auth?
  4. Kust koormus tuleb?
  5. VĂ€hendame Authi koormust.
  6. Mida teeb Tracker?
  7. Kust koormus tuleb?
  8. VĂ€hendame Trackeri koormust.

2016. aasta monoliidi skeem.

Teie ees on Dodo IS 2016. aasta monoliidi pÔhistruktuurid ja allpool nende pÔhifunktsioonide selgitus.
Dodo IS arhitektuuri ajalugu: tagakontori tee
Kohaletoimetamise kassa. Kullerite haldamine, tellimuste vÀljastamine kulleritele.
Kontaktikeskus.. Tellimuste vastuvÔtmine operaatori kaudu.
Veebileht.. Meie veebilehed (dodopizza.ru, dodopizza.co.uk, dodopizza.by jne).
Auth.. Autoriseerimise ja autentimise teenus tagavarahalduritele.
Tracker.. Tellimuste jÀlgimise teenus köögis. Valmistamise staatuste mÀrkimise teenus.
Restorani kassa.. Tellimuste vastuvÔtmine restoranis, kassapidaja liidesed.
Export. Aruannete eksportimine 1C-sse raamatupidamise tarbeks.
Teavitused ja saatedokumendid.. HÀÀlkĂ€sklused köögis (nĂ€iteks „Uus pitsatellimus“) + saatedokumentide printimine kulleritele.
Vahetuse juht. Vahetuse halduri tööliidesed: tellimuste nimekiri, tulemusgraafikud, töötajate vahetuse vÀljastamine.
Kontori juht. Frantsiisi ja juhataja tööliidesed: töötajate vastuvÔtmine, pitsarestorani töö raportid.
Restorani ekraan. MenĂŒĂŒ kuvamine pitsarestoranide televiisorites.
Admin-paneel. Seaded konkreetse pitsarestorani jaoks: menĂŒĂŒ, hinnad, arvestus, sooduskoodid, kampaaniad, veebibĂ€nnerid jne.
Töötaja isiklik kabinet. Töötajate töögraafikud, teave töötajate kohta.
Köögi motiveerimise ekraan. Eraldiseisev ekraan, mis rippub köögis ja nÀitab pitsameistrite töö kiirus.
Kommunikatsioon. SMS-i ja e-kirjade saatmine.
FileStorage. Omanikuteenuse jaoks staatiliste failide vastuvÔtu ja vÀljastamise teenus.

Esimesed katsed probleemide lahendamiseks aitasid meid, kuid olid vaid ajutised peatĂŒkid. Need ei saanud sĂŒsteemseteks lahendusteks, seega oli selge, et andmebaasidega on midagi ette vĂ”tta. NĂ€iteks jagada ĂŒldine andmebaas mitmeks spetsialiseeritumaks.

Alustame monoliidi koormuse vÀhendamist: Authi ja Trackeri eraldamine.

Peamised teenused, mis tol ajal rohkem registreerisid ja lugesid andmebaasist:

  1. Auth. Autentimise ja autentimise teenus tagakontoris.
  2. Tracker. Tellimuste jÀlgija köögis. Teenus, mis mÀrgib valmistamise staatuseid tellimuste valmisoleku kohta.

Mida teeb Auth?

Auth — see on teenus, mille kaudu kasutajad logivad sisse tagakontorisse (klientide osas on eraldi iseseisev sisenemine). Samuti pöördutakse selle poole, et veenduda, et sobivad Ă”igused on olemas ja et need Ă”igused ei ole viimase sisenemisega muutunud. Just selle kaudu siseneb seadmed pitsarestoranidesse.

NĂ€iteks tahame avada teleris, mis on saalis, ekraani valmis tellimuste staatustega. SeetĂ”ttu avame auth.dodopizza.ru, valime "Sisenemine seadmena", kuvatakse kood, mille saab sisestada vahetusjuhi arvuti spetsiaalsesse lehte, mĂ€rkides seadme tĂŒĂŒbi. Teler liigub automaatselt oma pitsarestorani vajaliku liidese juurde ja hakkab seal kuvama klientide nimesid, kelle tellimused on valminud.

Dodo IS arhitektuuri ajalugu: tagakontori tee

Kust koormus tuleb?

Iga sisse loginud kasutaja tagakontoris teeb iga pÀringu korral otsingu andmebaasi, kasutajate tabelisse, tÔmbab sealt sql-pÀringuga kasutaja ja kontrollib, kas tal on vajalikud Ôigused ja juurdepÀÀs sellele lehele.

Iga seade teeb sama, vaid seadmete tabeliga, kontrollides oma rolli ja Ă”igusi. Suur hulk pĂ€ringutest meesteribi andmebaasi toob kaasa selle suure koormuse ja ressursside raiskamise ĂŒldisele andmebaasile nende toimingute jaoks.

VĂ€hendame Authi koormust.

Authil on isoleeritud domeen, mis tÀhendab, et andmed kasutajate, sisselogimiste vÔi seadmete kohta tulevad teenusesse (hetkel tuleviku teenus) ja jÀÀvad sinna. Kui need kellelegi vajalikud on, lÀheb ta nende andmete saamiseks sellesse teenusesse.

OLI. Töö scheem kujunes algselt selliseks:

Dodo IS arhitektuuri ajalugu: tagakontori tee

Tahaksin veidi selgitada, kuidas see töötas:

  1. PĂ€ring vĂ€ljastpoolt jĂ”uab tagasi (seal on Asp.Net MVC), toomine endaga sessiooni kĂŒpsise, mida kasutatakse sessiooniandmete saamiseks Redisest (1). See sisaldab kas ligipÀÀsu teavet, siis juurdepÀÀs kontrollerisse on avatud (3,4), vĂ”i ei ole.
  2. Kui ligipÀÀsu ei ole, tuleb lĂ€bida autentimisprotseduur. Siin on see lihtsuse huvides nĂ€idatud kui osa teest samas atribuudis, kuigi see on ĂŒleminek sisselogimise lehele. Positiivse stsenaariumi korral saame Ă”igesti tĂ€idetud sessiooni ja liigume Backoffice Controllerisse.
  3. Kui andmed on olemas, tuleb need kontrollida kasutaja andmebaasis. Kas tema roll on muutunud, kas teda ei tohi nĂŒĂŒd lehele lubada. Sel juhul tuleb sessiooni saamisel (1) otse andmebaasi minna ja kontrollida kasutaja Ă”igusi autentimise loogika kihiga (2). Edasi kas logimislehele vĂ”i suunduda kontrollerisse. Selline lihtne sĂŒsteem, kuid mitte tĂ€iesti tavaline.
  4. Kui kÔik protseduurid on lÀbitud, siis jÀtkame edasi loogikas kontrollerites ja meetodites.

Kasutaja andmed on eraldatud kĂ”ikidest teistest andmetest, need hoitakse eraldi membership tabelis, AuthService loogika kihist pĂ€rinevaid funktsioone vĂ”ib tĂ€iesti kasutada API meetoditena. Domeeni piirid on ĂŒsna selgelt mÀÀratletud: kasutajad, nende rollid, ligipÀÀsuandmed, ligipÀÀsude vĂ€ljastamine ja tĂŒhistamine. KĂ”ik nĂ€eb vĂ€lja nii, et selle saab viia eraldi teenusesse.

ON TÖÖDAS. Nii ka tegime:

Dodo IS arhitektuuri ajalugu: tagakontori tee

Selle lĂ€henemisviisi puhul on mitmeid probleeme. NĂ€iteks meetodi kutsumine protsessi sees ei ole sama, mis vĂ€lise teenuse kutsumine http kaudu. Latentsus, usaldusvÀÀrsus, hooldatavus ja operatsiooni lĂ€bipaistvus on tĂ€ielikult erinevad. Rohkem nende probleemide kohta rÀÀkis Andrei Morevski oma ettekandes. „50 varjundit mikroteenuseid“.

Autentimis teenus ja seadmete teenus kasutatakse tagakontoris, st teenustes ja liidestes, mida kasutatakse tootmises. Klientide teenuste (nt veebisaidi vĂ”i mobiilirakenduse) autentimine toimub eraldi ilma Auth'i kasutamata. Eraldamine vĂ”ttis aega umbes aasta, ja nĂŒĂŒd tegeleme taas selle teemaga, viies sĂŒsteemi ĂŒle uutele autentimis teenustele (standardsete protokollide alusel).

Miks eraldamine kestis nii kaua?
Teel oli palju probleeme, mis aeglustasid:

  1. Soovisime viia kasutajate, seadmete ja autentimise andmed riigi andmebaasid ĂŒheks. Selleks tuli kĂ”ik tabelid ĂŒle viia ning ID int kasutada globaalse ID UUId (olenud hiljuti selle koodi ĂŒmber töötanud). Roman Bukin «Uuid — suur lugu vĂ€ikese struktuuri kohta» ja avatud lĂ€htekoodiga projekt Primitives). Kasutajate andmete salvestamine (kuna see on isiklik teave) on oma piirangutega ja mĂ”nes riigis tuleb neid eraldi hoida. Kuid globaalse kasutaja identifikaator peab olema.
  2. Paljusid andmebaasi tabeleid jÀlgib teavet selle kasutaja kohta, kes operatsiooni sooritas. See nÔudis tÀiendavat mehhanismi, et tagada jÀrjepidevus.
  3. PĂ€rast api-teenuste loomist oli pikk ja jĂ€rk-jĂ€rguline periood ĂŒleviimiseks teisele sĂŒsteemile. Üleminekud pidid toimuma sujuvalt kasutajatele ja nĂ”udsid kĂ€sitsi tööd.

Seadmise registreerimise skeem pitsarestoranis:

Dodo IS arhitektuuri ajalugu: tagakontori tee

Üldine arhitektuur pĂ€rast Auth ja Devices-teenuse eraldamist:

Dodo IS arhitektuuri ajalugu: tagakontori tee

MĂ€rkus. 2020. aastaks töötame uue Auth versiooni kallal, mis pĂ”hineb OAuth 2.0 autoriseerimise standardil. See standard on ĂŒsna keeruline, kuid on kasulik lĂ”puauditeerimise teenuse arendamisel. Artiklis «Autoriseerimise nĂŒansid: OAuth 2.0 tehnoloogia ĂŒlevaade» on Aleksei Cherniaev pĂŒĂŒdnud rÀÀkida standardist vĂ”imalikult lihtsalt ja selgelt, et te saaksite Ă”ppimisele aega sÀÀsta.

Mida teeb Tracker?

RÀÀgime nĂŒĂŒd teisest koormatĂ€iest teenusest. JĂ€lgija tĂ€idab kaht vastastikku seotud rolli:

  • Esiteks, selle ĂŒlesanne on nĂ€idata köögitöötajatele, millised tellimused on hetkel töös, milliseid tooteid tuleb praegu valmistada.
  • Teiseks — digitaliseerida kĂ”ik köögis toimuvad protsessid.

Dodo IS arhitektuuri ajalugu: tagakontori tee

Kui tellimusesse lisatakse uus toode (nĂ€iteks pitsat), jĂ”uab see jĂ€lgija jaama „Rullimine“. Sellel jaamal töötab pitsameister, kes vĂ”tab sobiva suurusega taina ja rullib selle lahti, seejĂ€rel mĂ€rgib ta jĂ€lgija tahvelarvutis, et on oma ĂŒlesande tĂ€itnud, ja edastab rullitud taigna aluse jĂ€rgmisse jaama — „TĂ€idise valmistamine“.

Siin jĂ€rgmine pitsameister tĂ€idab pitsat, seejĂ€rel mĂ€rgib tahvelarvutisse, et ta on oma ĂŒlesande tĂ€itnud ja paneb pitsa ahju (see on samuti eraldi jaama, mille tuleb tahvelarvutisse mĂ€rkida). Selline sĂŒsteem oli algusest peale Dodo ja Dodo IS olemas. See vĂ”imaldab tĂ€ielikult jĂ€lgida ja digiteerida kĂ”iki operatsioone. Lisaks annab jĂ€lgija juhiseid, kuidas valmistada seda vĂ”i seda toodet, viib iga toote lĂ€bi oma valmistamisskeemide, sĂ€ilitab toote optimaalse kĂŒpsetamisaja ja jĂ€lgib kĂ”iki toiminguid toote ĂŒle.

Dodo IS arhitektuuri ajalugu: tagakontori teeNii nÀeb vÀlja tahvelarvuti ekraan jÀlgija "Rullimine" jaamas

Kust koormus tuleb?

Igas pitsarestoranis on umbes viis tahvelarvutit jĂ€lgimisega. 2016. aastal oli meil ĂŒle 100 pitsarestorani (nĂŒĂŒdseks aga enam kui 600). Iga tahvelarvuti saadab iga 10 sekundi jĂ€rel pĂ€ringu tagaplaanile ja kogub andmeid tellimuste tabelist (seotud kliendi ja aadressiga), tellimuse koostisosadest (seotud tootega ja koguse mÀÀramine) ning motivatsiooni tabelist (kus jĂ€lgitakse vajutamise aega). Kui pitsamees vajutab jĂ€lgimisrakenduses tootele, uuendatakse kĂ”iki neid tabeleid. Tellimuste tabel on ĂŒhine, sinna tehakse samal ajal sissekandeid tellimuste vastuvĂ”tmisel, uuendusi sĂŒsteemi teistest osadest ja arvukalt lugemisi, nĂ€iteks televisioonis, mis ripub pitsarestoranis ja nĂ€itab kliente valmislidordersid.

Koormuste vastu vĂ”itlemise perioodil, mil kĂ”ik ja kĂ”ike vahemĂ€luti ja muudeti asĂŒnkroonseks andmebaasi kopeerimiseks, jĂ€tkasid need operatsioonid jĂ€lgijaga varem peaandmebaasi. Siin ei tohiks olla mingit viivitust, andmed peavad olema ajakohased, sĂŒnkroonsus on hĂ€davajalik.

Samuti ei vĂ”imaldanud oma tabelite ja indeksite puudumine kirjutada spetsiifilisemaid pĂ€ringuid, mis vastavad meie kasutusele. NĂ€iteks vĂ”iks jĂ€lgijale olla tĂ”hus omada indeksit pizzeriate kohta tellimuste tabelis. Me tĂ”mbame alati jĂ€lgijast vĂ€lja tellimused pizzeriate kohta. Samas pole tellimuse vastuvĂ”tmisel oluline, millisesse pizzeriisse see langeb, olulisem on, milline klient selle tellimuse tegi. Seega on seal vajalik indeks kliendi jĂ€rgi. JĂ€lgijale ei ole ka tellimuse tabelis vajalik hoida trĂŒkitud tĆĄeki ID-d vĂ”i tellimusega seotud boonuspakkumisi. See teave ei huvitata meie jĂ€lgimisteenust. Üldises monoliitses andmebaasis vĂ”isid tabelid olla vaid kĂ”ikide kasutajate vahelise kompromissi variandiks. See oli ĂŒks algseid probleeme.

OLI. Alguses oli arhitektuur selline:

Dodo IS arhitektuuri ajalugu: tagakontori tee

Isegi pĂ€rast eraldamist eraldi protsessides jĂ€i enamik koodibaasist erinevatele teenustele ĂŒhiseks. KĂ”ik, mis on allpool kontrolleritest, oli ĂŒhine ja elas ĂŒhes hoidlas. Kasutati ĂŒhiseid meetodeid teenustest, hoidlatest, ĂŒhine andmebaas, kus asusid ĂŒhised tabelid.

VĂ€hendame Trackeri koormust.

Peamine probleem jĂ€lgimise sĂŒsteemis on see, et andmed peavad sĂŒnkroniseerima erinevate andmebaaside vahel. See on ka selle peamine erinevus Auth-teenuse eraldamisest, kui tellimus ja selle staatus vĂ”ivad muutuda ning peavad olema erinevates teenustes nĂ€htavad.

Me vĂ”tame tellimuse vastu Restoranikassas (see on teenus), see salvestatakse andmebaasi seisundis „VĂ”etud”. PĂ€rast seda peab see sattuma jĂ€lgimise sĂŒsteemi, kus selle staatus muutub veel mitu korda: „Köök” kuni „Pakitud”. Sellega seoses vĂ”ivad tellimuse osas toimuda mĂ”ned vĂ€lised mĂ”jutused Kassast vĂ”i Vahetusjuhi interfatsioonist. Toome tabelis vĂ€lja tellimuse staatuste kirjeldused:

Dodo IS arhitektuuri ajalugu: tagakontori tee
Tellimuse staatuste muutmise skeem nÀeb vÀlja jÀrgmiselt:

Dodo IS arhitektuuri ajalugu: tagakontori tee

Staatused muutuvad erinevate sĂŒsteemide vahel. Ja siin pole jĂ€lgija lĂ”pp-sĂŒsteem, kus andmed kogunevad. Oleme nĂ€inud mitmeid vĂ”imalikke lĂ€henemisviise eraldamiseks sellistel juhtudel:

  1. Koonde kĂ”ik tellimuse toimingud ĂŒhte teenusesse. Meie juhul nĂ”uab see variant liiga suurt teenust tellimuse töötlemiseks. Kui me sellele jÀÀksime, siis saaksime teise monoliidi. Probleeme me ei lahendaks.
  2. Üks sĂŒsteem teeb kutsungi teisele. Teine variant on juba huvitavam. Ent selle puhul vĂ”ivad esineda korduvad kutsed (kaskaadvead), komponentide sidusus on suurem, hallata seda on keerulisem.
  3. Korrigeerime sĂŒndmusi, ja iga teenus vahetab nende kaudu teavet teiste teenustega. LĂ”puks valiti just kolmas variant, milles kĂ”ik teenused hakkavad omavahel sĂŒndmusi vahetama.

See, et me valisime kolmanda variandi, tĂ€hendas, et jĂ€lgijal on oma andmebaas ja iga tellimuse muudatuse korral saadab ta selle kohta sĂŒndmuse, millele registreerivad teised teenused, ja mis jĂ”uab ka pĂ”hivaramusse. Selleks vajasime mingit teenust, mis tagaks sĂ”numite edastamise teenuste vahel.

Sel ajal oli meil juba tehnoloogias RabbitMQ, sealt ka lÔplik otsus kasutada seda sÔnumite vahetamiseks. Skeemil on kujutatud tellimuse liikumist Restorani Kassast lÀbi JÀlgija, kus see muudab oma staatuseid ja kuvab seda Halduse tellimustes. SAI:

Dodo IS arhitektuuri ajalugu: tagakontori tee

Tellimuse teekond samm-sammult
Tellimuse teekond algab ĂŒhel tellimuste allika teenustest. Siin on see Restorani Kassas:

  1. Kassas on tellimus tĂ€ielikult valmis, ja on aeg see jĂ€lgimisele saata. Toimub sĂŒndmus, millele jĂ€lgija on registreeritud.
  2. JĂ€lgija, vastu vĂ”ttes tellimuse, salvestab selle oma andmebaasi, luues samal ajal sĂŒndmuse «TellimusVĂ”etudJĂ€lgija» ja saadab selle RMQ-sse.
  3. Tellimuse sĂŒndmusele on juba registreeritud mitmed töötlejad. Meie jaoks on oluline see, mis teeb sĂŒnkroniseerimise monoliitse andmebaasiga.
  4. Töötleja vĂ”tab sĂŒndmuse vastu, valib sellest enda jaoks olulised andmed: meie puhul tellimuse oleku «VĂ”etudJĂ€lgija» ja vĂ€rskendab oma tellimuse entiteeti pĂ”hijĂ€rjestuses.

Kui kellelegi on vajalik tellimus just monoliitsest orders tabelist, siis saab selle sealt lugeda. NĂ€iteks on seda vaja Tellimuste liidesele Vahetuse Halduse sĂŒsteemis:

Dodo IS arhitektuuri ajalugu: tagakontori tee

KĂ”ik teised teenused saavad samuti registreeruda tellimuse sĂŒndmustele jĂ€lgijas, et neid enda jaoks kasutada.

Kui tellimus vĂ”etakse pĂ€rast teatud aega tööle, muutub selle staatus esmalt oma andmebaasis (Tracker'i andmebaasis) ja seejĂ€rel genereeritakse kohe sĂŒndmus „TELLIMUS_TÖÖS”. See jĂ”uab ka RMQ-sse, kust sĂŒnkroniseeritakse monoliitses andmebaasis ja edastatakse teistele teenustele. Sellel teel vĂ”ivad esineda erinevad probleemid, mille kohta saab rohkem teada Ćœenja PeĆĄkovi ettekandes. detalite teostusest Eventual Consistency Tracker'is.

LÔplik arhitektuur pÀrast muudatusi Authis ja Trackeris

Dodo IS arhitektuuri ajalugu: tagakontori tee

KokkuvĂ”tteks: Alguses mĂ”tlesin, et pakin Dodo IS sĂŒsteemi ĂŒheksa aastat kokku ĂŒhte artiklisse. Soovisin kiirelt ja lihtsalt rÀÀkida arenguetappidest. Kuid kui ma materjali kallale asusin, mĂ”istsin, et kĂ”ik on palju keerulisem ja huvitavam, kui esmapilgul tundub.

MĂ”eldes selle materjali kasule (vĂ”i selle puudumisele), jĂ”udsin jĂ€reldusele, et pidev areng pole vĂ”imalik ilma tĂ€ielike sĂŒndmuste kroonikateta, laiaulatuslike retrospektiivide ja oma varasemate otsuste analĂŒĂŒsita.

Loodan, et teave meie teekonnast oli teile kasulik ja huvitav. NĂŒĂŒd seisan silmitsi valikuga, millist Dodo IS sĂŒsteemi osa jĂ€rgmises artiklis kirjeldada: kirjutage kommentaaridesse vĂ”i hÀÀletage.

Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. Logige sisse, palun.

Millise Dodo IS osa kohta sooviksite jÀrgmisest artiklist rohkem teada?

  • 24,1%Varajane monoliit Dodo IS-is (2011-2015)

  • 24,1%Esimesed probleemid ja nende lahendused (2015-2016)

  • 20,7%Kliendipool: fassaad andmebaasi ees (2016-2017)

  • 36,2%TĂ”eliste mikroteenuste ajalugu (2018-2019)

  • 44,8%Monoliidi lĂ”pp ja arhitektuuri stabiliseerimine

  • 29,3%Edasised arendamise plaanid sĂŒsteemi jaoks

  • 19,0%Ei soovi Dodo IS-ist midagi teada

HÀÀletas 58 kasutajat. Eemaldas end 6 kasutajat.

Allikas: habr.com

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