Dodo IS arhitektuuri ajalugu: tahke kontoriteed

Habr muuda maailma. Oleme juba ĂŒle aasta pidanud oma blogi. Kusagil pool aastat tagasi saime meilt tĂ€iesti loogilise tagasiside Habrilt: "Dodo, te rÀÀgite igal pool, et teil on oma sĂŒsteem. Mis sĂŒsteem see on? Ja miks see on vajalik pitsakettide jaoks?"

Me istusime, mĂ”tlesime ja mĂ”istsime, et teil on Ă”igus. Proovime seletada kĂ”ike lihtsasti, kuid tulemus tuleb katkine ja kusagil pole tĂ€ielikku sĂŒsteemi kirjeldust. Nii algas pikk teekond teabe kogumiseks, autorite leidmiseks ja seeria artiklite kirjutamiseks Dodo IS-ist. Hakkame pihta!

TĂ€nud: aitĂ€h, et jagate meiega oma tagasisidet. TĂ€nu sellele oleme lĂ”puks suutnud sĂŒsteemi kirjeldada, koostada tehnoraadi ja peagi avaldame meie protsesside pĂ”hjaliku kirjelduse. Ilma teieta istuksime veel 5 aastat.

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

Artiklite sari "Mis on Dodo IS?" rÀÀgib:

  1. Varajane monoliit Dodo IS-is (2011-2015). (Töös
)
  2. TagabĂŒroo tee: eraldi andmebaasid ja buss. (Te olete siin)
  3. Kliendi osa tee: fassaad andmebaasi kohal (2016-2017). (Töös...)
  4. TÔeliste mikroteenuste ajalugu. (2018-2019). (Töös...)
  5. Monoliidi lÔplik jagunemine ja arhitektuuri stabiliseerimine. (Töös...)

Kui soovite teada midagi veel, kirjutage kommentaarides.

Autori arvamus kronoloogilisest kirjeldusest
Koran teeme uute töötajate jaoks kohtumise teemal "SĂŒsteemi arhitektuur". Me nimetame seda "Intro to Dodo IS Architecture" ja see on osa uute arendajate onboardimisprotsessist. RÀÀkides meie arhitektuurist ja selle omadustest, tekkis mul teatud ajalooline lĂ€henemine kirjeldamiseks.

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

  • Tegelikkus erineb sellest, mis paberil. Mitte kĂ”ik, mis on mĂ”eldud, ei toimi. Ja meile on huvitav, kuidas kĂ”ik tegelikult vĂ€lja nĂ€eb ja töötab.
  • Teabe jĂ€rjestikune esitamine. Sisuliselt vĂ”ib jĂ€rgida kronoloogiliselt alates algusest kuni praeguse seisuni.
  • Lihtsast keeruliseni. See ei ole universaalne, kuid meie puhul just nii on. Lihtsatest lĂ€henemisviisidest liikus arhitektuur keerulisema poole. Sageli lahendati keerulisuse kaudu rakendamise ja stabiilsuse probleeme ning ka kĂŒmnete teiste omaduste loetelu mittefunktsionaalsetest nĂ”uetest (siin on hĂ€sti rÀÀgitud keerukuse vastandamisest teistele nĂ”uetele).

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

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

2020. aastaks oli see veidi keerulisem ja sai selliseks:

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

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

Esimesed probleemid 2016. aastal: miks peavad teenused monoliidist lahkuma

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 alguses ning millega me pidime tegelema teenuste jagamisel.

Üks ĂŒhine MySql andmebaas, kuhu kĂ”ik toona Dodo IS-is eksisteerinud rakendused andmeid kirjutasid. TagajĂ€rjed olid jĂ€rgmised:

  • Suurem koormus (85% pĂ€ringutest oli lugemiseks).
  • Andmebaas kasvas. Selle tĂ”ttu muutusid selle hooldamine ja hind probleemiks.
  • Üksik rikkepunkt. Kui mĂ”ni rakendus, mis andmebaasi andmeid kirjutas, hakkas Ă€kki seda aktiivsemalt tegema, tundsid teised rakendused seda ka.
  • Ebaefektiivne andmete sĂ€ilitamine ja pĂ€ringud. Sageli olid andmed salvestatud mingis struktuuris, mis sobis mĂ”nele stsenaariumile, kuid mitte teistele. Indekseerimine kiirendas ĂŒhte tegevust, kuid vĂ”is teised aeglustada.
  • MĂ”ned probleemid lahendasid kiirustades tehtud vahemĂ€lud ja read-replikaandmebaasid (sellest kirjutatakse eraldi artiklis), kuid need lahendasid vaid ajutiselt probleemi ega lahendanud seda pĂ”himĂ”tteliselt.

Probleemiks oli monoliidi olemasolu. TagajÀrjed olid jÀrgmised:

  • Üksikud ja harvad vĂ€ljalasked.
  • Paljude inimeste koostöö arendamise keerukus.
  • Uute tehnoloogiate, uute raamistikute ja teekide lisamise vĂ”imatust.

Andmebaasi ja monoliidi probleeme on korduvalt kĂ€sitletud, nĂ€iteks 2018. aasta alguses juhtunud kukkumiste kontekstis (Ole nagu Munk vĂ”i paar sĂ”na tehnilise vĂ”la kohta, PĂ€ev, mil Dodo IS peatus. AsĂŒnkroonne stsenaarium ja Lugu Dodo linnust, Feniksite sugukonnast. Dodo IS-i suur kukkumine), nii et ei jÀÀks pikalt peatuma. Ütlen vaid, et soovisime teenuste arendamisel suuremat paindlikkust. EelkĂ”ige kehtis see kĂ”ige koormatumate ja sĂŒsteemi pĂ”hielementide — Auth ja Tracker — kohta.

Back-office’i tee: eraldi andmebaasid ja buss

Navigatsioon peatĂŒkis

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

Monoliidi skeem 2016. aastal

Ees on Dodo IS 2016. aasta pÔhiblokid, ja natuke allpool on nende pÔhifunktsioonide seletus.
Dodo IS arhitektuuri ajalugu: tahke kontoriteed
Kohaletoimetamise kassa. Kullerite registreerimine, tellimuste ĂŒleandmine kulleritele.
Kontaktikeskus. Tellimuste vastuvÔtt operaatori kaudu.
Veebisait. Meie veebisaidid (dodopizza.ru, dodopizza.co.uk, dodopizza.by jne).
Auth. Autoriseerimise ja autentimise teenus back-office jaoks.
Tracker. Tellimuste jÀlgimine köögis. Teenus tellimuste valmiduse staatuste mÀrkimiseks ettevalmistamise ajal.
Restoranikassa. Tellimuste vastuvÔtt restoranis, kassapidaja liidesed.
Export. Aruannete eksport 1C raamatupidamise jaoks.
Teavitused ja saatedokumendid. HÀÀlekĂ€sklused köögis (nĂ€iteks „Uus pitsasaatmine“) + saatedokumentide printimine kulleritele.
Vahetuse juht. Liidesed vahetuse juhi tööks: tellimuste nimekiri, tootlikkuse graafikud, töötajate vÀljakutsumine vahetusse.
Kontori juht. Fransiiside ja juhendajate tööliidesed: töötajate vastuvÔtt, pitsarestorani töö aruanded.
Restorani ekraan. MenĂŒĂŒ kuvamine restoranide televiisorites.
Adminpaneel. Spetsiifilised seaded konkreetsele pitsarestoranile: menĂŒĂŒ, hinnad, arvestus, sooduskoodid, kampaaniad, veebisaidi reklaamid jne.
Töötaja kasutajaruum. Töötajate töö graafikud, töötajate teave.
Köögimotivatsiooni ekraan. Eraldi ekraan, mis ripub köögis ja kuvab pitsameistrite töötamise kiirus.
Suhtlemine. SMS ja emailide saatmine.
FileStorage. Omandatud teenus staatiliste failide vastuvÔtmiseks ja andmiseks.

Esimesed katsed probleemide lahendamiseks aitasid meid, kuid olid vaid ajutine hingetĂ”mme. Need ei kujunenud sĂŒsteemseteks lahendusteks, seetĂ”ttu oli selge, et andmebaasidega tuleb midagi ette vĂ”tta. NĂ€iteks jagada ĂŒldine andmebaas mitmeks spetsialiseeritud.

Alustame monoliidi koormuse vÀhendamist: Auth ja Tracker eraldamine

PÔhiteenused, mis siis enim andmebaasist andmeid lugesid ja kirjutasid:

  1. Auth. Autoriseerimise ja autentimise teenus back-office jaoks.
  2. Tracker. Tellimuste jÀlgimine köögis. Teenus tellimuste valmiduse staatuste mÀrkimiseks ettevalmistamise ajal.

Millega tegeleb Auth

Auth on teenus, mille kaudu kasutajad logivad back-office'i (klientide osas eraldi sÔltumatu sisselogimine). Samuti pöördutakse selle poole, et veenduda, et olemas on vajalikud juurdepÀÀsud ja et need Ôigused pole alates viimast sisselogimist muutunud. Just selle kaudu toimub seadmete sisenemine pitsarestoranides.

NĂ€iteks tahame avada elutoa seinal rippuval teleril valmis tellimuste staatuste tabelit. Siis avame auth.dodopizza.ru, valime "Logi sisse seadmena", ilmub kood, mille saab sisestada vahetuse juhataja arvuti spetsiaalsesse lehekĂŒlge, mĂ€rkides seadme tĂŒĂŒbi. Teler suundub ise oma pizzeriasse vajaliku liidese juurde ja hakkab seal kuvama klantide nimesid, kelle tellimused on valmis.

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

Kust koormus tuleb?

Iga sisse logitud kasutaja tagab iga pĂ€ringu puhul andmebaasi, kasutajate tabelisse, kasutades SQL-pĂ€ringut, ja tĂ”mbab sealt kasutaja, kontrollides, kas tal on vajalikud Ă”igused ja juurdepÀÀs sellele lehekĂŒljele.

Iga seade teeb samu toiminguid ainult seadmete tabeliga, kontrollides oma rolli ja Ă”igusi. Suur hulk pĂ€ringuid meistrandmebaasi pĂ”hjustab selle koormuse ja ressursside kulu ĂŒhises andmebaasis nende operatsioonide tĂ”ttu.

VĂ€hendame Authi koormust

Auth'il on isoleeritud domeen, st kasutajate, sisse logimiste vÔi seadmete andmed lÀhevad teenusesse (praegu veel tulevikus) ja jÀÀvad sinna. Kui kellelgi neid vajatakse, siis lÀheb ta selle teenuse poole andmete saamiseks.

OLI. Tööskeem algselt oli selline:

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

Tahaksin veidi selgitada, kuidas see töötas:

  1. PĂ€ring vĂ€ljast tuleb tagasi (seal on Asp.Net MVC), tuues endaga kaasa sessioonikĂŒpsise, mida kasutatakse sessiooniteabe saamiseks Redis'ist (1). Sel on kas Ă”iguste teave ja siis on juurdepÀÀs kontrollerisse avatud (3,4), vĂ”i mitte.
  2. Kui juurdepÀÀsu pole, tuleb lĂ€bida autentimise protseduur. Siin on lihtsustamiseks see nĂ€idatud sama atribuudina teel, kuigi see on ĂŒleminek sisselogimise lehele. Positiivse stsenaariumi korral saame Ă”igesti tĂ€idetud sessiooni ja liikumme Backoffice Controller'i.
  3. Kui andmed on olemas, tuleb kontrollida nende ajakohasust kasutajate andmebaasis. Kas tema roll on muutunud, kas teda tuleb nĂŒĂŒd sellele lehele lubamata jĂ€tta. Sel juhul peab sessiooni saamise jĂ€rel (1) minema otse andmebaasi ja kontrollima kasutaja Ă”igusi autentimise loogika kihi (2) abil. Edasi kas sisselogimise lehele vĂ”i liikuda kontrollerisse. Selline lihtne sĂŒsteem, kuid mitte pĂ€ris standardne.
  4. Kui kÔik protseduurid on lÀbitud, siis laseme edasi kontrollerite ja meetodite loogikas.

Kasutajate andmed on eraldatud kĂ”ikidest teistest andmetest, need hoitakse eraldi membership tabelis, AuthService loogikakihi funktsioonid vĂ”ivad tĂ€iesti vabalt muutuda API meetoditeks. Domeeni piirid on ĂŒsna selgelt mÀÀratletud: kasutajad, nende rollid, juurdepÀÀsuandmed, juurdepÀÀsu vĂ€ljastamine ja tagasivĂ”tmine. KĂ”ik nĂ€eb vĂ€lja nagu vĂ”iksime selle viia eraldi teenusesse.

OLEMAS. Nii ka tehti:

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

Sellel lĂ€henemisel on mitmeid probleeme. NĂ€iteks, meetodi kutsumine protsessi sees ei ole sama, mis vĂ€list teenust HTTP kaudu kutsuda. Latentsus, usaldusvÀÀrsus, hooldatavus, operatsiooni lĂ€bipaistvus on tĂ€iesti erinevad. Üksikasjalikult sellistest probleemidest rÀÀkis Andrei Morevski oma ettekandes „50 varjundit mikroteenustest“.

Autentimise teenust ja seonduvat seadmete teenust kasutatakse back-office'is, st teenuste ja liideste jaoks, mida kasutatakse tootmises. Klientide teenuste (nĂ€iteks veebilehe vĂ”i mobiilirakenduse) autentimine toimub eraldi, kasutamata Auth'i. Eraldamine kestis umbes aasta, ja nĂŒĂŒd tegeleme selle teemaga taas, viies sĂŒsteemi ĂŒle uutele autentimise teenustele (tavapĂ€raste protokollidega).

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

  1. Soovisime viia kasutajate, seadmete ja autentimise andmed riikide andmebaasidest ĂŒhte. Selleks tuli liikuda kĂ”igi tabelite ja int tuvastamise kasutamiselt globaalse ID UUId'ni (oleme hiljuti seda koodi ĂŒle töötanud) Roman Bukin „Uuid — suur lugu vĂ€ikesest struktuurist“ ja open-source projekt Primitives). Kasutajate andmete sĂ€ilitamisel (arvestades, et tegu on isikuandmetega) on oma piirangud ja teatud riikides tuleb neid hoida eraldi. Kuid kasutaja globaalne identifikaator peab olema.
  2. Paljud tabelid andmebaasis sisaldavad auditi teavet selle kasutaja kohta, kes tegi operatsiooni. See nÔudis tÀiendavat mehhanismi, et tagada jÀrjepidevus.
  3. PĂ€rast API teenuste loomist oli pikk ja jĂ€rkjĂ€rguline ĂŒleminekuperiood teisele sĂŒsteemile. Üleminekud pidid toimuma kasutajatele sujuvalt ja nĂ”udsid kĂ€sitööd.

Seadme registreerimise skeem pizzeria:

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

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

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

MĂ€rkus. Aastal 2020 töötame uue Auth versiooni kallal, mis pĂ”hineb OAuth 2.0 autoriseerimisstandardil. See standard on ĂŒsna keeruline, kuid on vajalik lĂ”ppautentimisteenuse arendamiseks. Artiklis „Autoriseerimise nĂŒansid: OAuth 2.0 tehnoloogia ĂŒlevaade“ on Aleksei TĆĄernjaev pĂŒĂŒdnud standardit esitada vĂ”imalikult lihtsalt ja arusaadavalt, et te saaksite aega selle Ă”ppimise pealt kokku hoida.

Millega tegeleb Tracker

NĂŒĂŒd rÀÀgime teisest ĂŒlekoormatud teenusest. JĂ€lgija tĂ€idab kaht erinevat rolli:

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

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

Kui tellimuses ilmub uus toode (nt pizza), satub see jĂ€lgija jaama „Rullimine“. Selles jaamas on pizzameister, kes vĂ”tab vajamineva suurusega tĂŒkikese ja rullib selle lahti, seejĂ€rel mĂ€rgib ta jĂ€lgija tahvlil, et on oma ĂŒlesande tĂ€itnud, ja edastab rullitud pĂ”hjuse jĂ€rgmisse jaama - „TĂ€iendamine“.

Seal tĂ€idab jĂ€rgmine pizzameister pitsa, seejĂ€rel mĂ€rgib ta jĂ€lgija tahvlil, et on oma ĂŒlesande tĂ€itnud ja paneb pitsa ahju (see on samuti eraldi jaam, mille tuleb tahvlil mĂ€rkida). Selline sĂŒsteem oli algusest peale Dodo's ja Dodo IS-i esialgsest olemisest peale. See vĂ”imaldab tĂ€ielikult jĂ€lgida ja digitaliseerida kĂ”iki operatsioone. Lisaks annab jĂ€lgija nĂ€punĂ€iteid, kuidas valmistada erinevaid tooteid, viib iga toote oma valmistamisprotseduuride jĂ€rgi, talletab toote optimaalse kĂŒpsetamise aja ja jĂ€lgib kĂ”iki operatsioone toote ĂŒle.

Dodo IS arhitektuuri ajalugu: tahke kontoriteedNii nĂ€eb jĂ€lgija „Rullimine“ jaamas tahvli ekraan vĂ€lja

Kust koormus tuleb?

Igas pizzakettis on umbes viis tahvelarvutit, mis on varustatud jĂ€lgijatega. 2016. aastal oli meil ĂŒle 100 pizzeria (ja nĂŒĂŒd ĂŒle 600). Iga tahvelarvuti teeb igal 10 sekundi jĂ€rel pĂ€ringu tagaplaanile ja tĂ”mbab andmeid tellimuste tabelist (seos kliendi ja aadressiga), tellimuse koostisest (seos toote ja koguse nĂ€iduga), motiveerimise arvestuse tabelist (kus jĂ€lgitakse vajutamise aega). Kui pizzameister aktiveerib toote jĂ€lgijal, vĂ€rskendatakse kirjeid kĂ”igis nendes tabelites. Tellimuste tabel on ĂŒhine ja sinna tehakse samal ajal sisestusi tellimuse vastuvĂ”tmisel, sĂŒsteemi teistest osadest uuendusi ja rohkelt lugemisi, nĂ€iteks telekas, mis on pizzarias ja nĂ€itab valmis tellimusi klientidele.

Koormustega vĂ”itlemise ajal, kui kĂ”ik mida ainult sai vahemĂ€lus hoida ja viia asynchronous replika andmebaasi, jĂ€tkasid need toimingud jĂ€lgijaga peandmebaasi suunamist. Siin ei peaks olema mingit viivitust, andmed peavad olema ajakohased, desĂŒnkroniseerimine on lubamatu.

Samuti ei vĂ”imaldanud omade tabelite ja indeksite puudumine kirjutada spetsiifilisemaid pĂ€ringuid, mis oleksid kohandatud meie kasutamiseks. NĂ€iteks peab jĂ€lgijatel olema efektiivne indeks pizzeria tellimuste tabelis. Me tĂ”mbame alati jĂ€lgijast tellimusi pizzeria kaupa. Tellimuse vastuvĂ”tmisel ei ole tĂ€htis, millisesse pizzarisse see langeb, oluline on, milline klient selle tellimuse tegi. Seega peab seal olema indeks kliendi jĂ€rgi. Samuti pole jĂ€lgijale tellimuste tabelis vajalik salvestada printimise tĆĄeki id-d vĂ”i seotud tellimuse boonuspakkumisi. See teave ei huvita meie jĂ€lgimisteenust. Ühises monoliitses andmebaasis vĂ”isid tabelid olla ainult kĂ”igi kasutajate vahel lepitavate kompromisside variant. See oli ĂŒks algseid probleeme.

OLI. Algne arhitektuur oli selline:

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

Isegi pĂ€rast eraldamist eraldi protsessidesse jĂ€i enamik koodibaasist erinevate teenuste jaoks ĂŒhine. KĂ”ik, mis oli kontrolleritest madalamal, oli ĂŒhtne ja elas ĂŒhes hoidlas. Kasutati ĂŒhiseid teenuse meetodeid, hoidlaid, ĂŒhist andmebaasi, kus olid ĂŒhised tabelid.

VĂ€hendame Trackeri koormust

Peamine probleem jĂ€lgijas seisneb selles, et andmed peavad olema sĂŒnkroniseeritud erinevate andmebaaside vahel. See on ka peamine erinevus autoriseerimisteenuse jagamisest, kus tellimus ja selle staatus vĂ”ivad muutuda ja peavad olema nĂ€htavad erinevates teenustes.

Me aktsepteerime tellimusi Restorani Kassas (see on teenus), see salvestatakse andmebaasi staatusega „Vastu vĂ”etud“. PĂ€rast seda peab see jĂ”udma jĂ€lgijasse, kus see muudab oma staatust veel mitu korda: alates „Köök“ kuni „Pakitud“. Sel ajal vĂ”ivad tellimusele avaldada mingit vĂ€lismĂ”ju Kassas vĂ”i vahetuse juhtimise liideses. Esitan tellimuse staatuste ja nende kirjelduste tabelis:

Dodo IS arhitektuuri ajalugu: tahke kontoriteed
Tellimuse staatuste muutmise skeem nÀeb vÀlja jÀrgmine:

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

Staatused muutuvad erinevate sĂŒsteemide vahel. Ja siin ei ole jĂ€lgija lĂ”pp-sĂŒsteem, kus andmed suletakse. Oleme nĂ€inud mitu vĂ”imalikku lĂ€henemist eraldamiseks sellisel juhul:

  1. Keskendame kĂ”ik tellimuse toimingud ĂŒhes teenuses. Meie puhul nĂ”uab see variant tellimuse haldamiseks liiga suurt teenust. Kui me oleksime sellega piirdunud, oleksime saanud teise monoliidi. Probleeme me ei lahendanud.
  2. Üks sĂŒsteem kutsub teist. Teine variant on juba huvitavam. Kuid selle puhul on vĂ”imalikud kutsumise ahelad (kaskaadsed tĂ”rked), komponentide seotuse tase on kĂ”rgem, seda on raskem hallata.
  3. Korraldame sĂŒndmused ja iga teenus vahetab nende sĂŒndmuste kaudu teavet ĂŒksteisega. LĂ”ppkokkuvĂ”ttes valiti tĂ”epoolest kolmas variant, mille kohaselt kĂ”ik teenused hakkavad omavahel sĂŒndmusi vahetama.

See, et valisime kolmanda variandi, tĂ€hendas, et jĂ€lgijal on oma andmebaas ja iga tellimuse muutuse korral saadab ta sellest sĂŒndmuse, millele teised teenused liituvad ja mis jĂ”uab ka pĂ”hivaramusse. Selleks oli meil vaja mingit teenust, mis tagaks sĂ”numite edastamise teenuste vahel.

Sel ajal oli meil stacks juba RabbitMQ, seega otsustasime kasutada seda sÔnumite vahendajana. Skeemil on nÀidatud tellimuse liikumine Restorani Kassast lÀbi JÀlgija, kus see muudab oma staatusi ja kuvatakse juhi Tellimustes. MUUTUS:

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

Tellimuse teekond samm-sammult
Tellimuse teekond algab ĂŒhes tellimuse allikasĂŒsteemis. Siin on see Restorani Kassas:

  1. Kassas on tellimus tĂ€ielikult valmis ja on aeg see jĂ€lgimisse saata. Üritus, millele jĂ€lgija on registreeritud, kĂ€ivitatakse.
  2. JĂ€lgija, vastu vĂ”ttes tellimust, salvestab selle oma andmebaasi, tehes sellega ĂŒrituse „TellimusVastuvĂ”etudJĂ€lgija“ ja saates selle RMQ-sse.
  3. Tellimuse ĂŒritusel on juba mitu töötlejat registreeritud. Meile on oluline see, mis teeb sĂŒnkroonimise monoliitsete andmetega.
  4. Töötleja vĂ”tab ĂŒrituse vastu, valib sellest endast olulised andmed: meie puhul tellimuse staatus „VastuvĂ”etudJĂ€lgija“ ja uuendab oma tellimuse entiteeti pĂ”hivaatlemise andmebaasis.

Kui kellelgi on vaja tellimust just monoliitsest orders tabelist, siis saab seda sealt lugeda. NĂ€iteks on see vajalik tellimuste liidese jaoks Vahetuse Halduris:

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

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

Kui tellimus vĂ”etakse mĂ”ne aja pĂ€rast tööle, siis muudab selle staatus esmalt oma andmebaasis (JĂ€lgija andmebaasis) ja siis genereeritakse kohe ĂŒritus „TellimusTöös“. See jĂ”uab samuti RMQ-sse, kust sĂŒnkroonitakse monoliitsesse andmebaasi ja edastatakse teistele teenustele. Sellel teel vĂ”ivad esineda erinevad probleemid, millega saab tutvuda Ćœenja PeĆĄkovi ettekandes. detailide rakendamise kohta Eventual Consistency JĂ€lgijas.

LÔplik arhitektuur pÀrast muudatusi Authis ja JÀlgijas

Dodo IS arhitektuuri ajalugu: tahke kontoriteed

KokkuvĂ”tlikult: alguses soovisin kokku panna ĂŒhe artikli Dodo IS sĂŒsteemi ĂŒheksa-aastasest ajaloost. Olin taheline kiiresti ja lihtsalt rÀÀkida evolutsiooni etappidest. Kuid materjali kirjutades mĂ”istsin, et kĂ”ik on palju keerulisem ja huvitavam, kui tundub.

MĂ”eldes selle materjali kasule (vĂ”i puudumisele), jĂ”udsin jĂ€reldusele, et pidev areng ei ole vĂ”imalik ilma pĂ”hjalike sĂŒndmuste kroonikuteta, ulatuslike retrospektiivide ja oma varasemate otsuste analĂŒĂŒsita.

Loodan, et teile oli kasulik ja huvitav tutvuda meie teekonnaga. Praegu olen silmitsi valikuga, millise osa Dodo IS-st jÀrgmises artiklis kirja panna: kirjutage kommentaarides vÔi hÀÀletage.

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

Millest Dodo IS-st sooviksite jÀrgmises artiklis rohkem teada saada?

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

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

  • 20,7%Kliendi osa tee: fassaad andmebaasi kohal (2016-2017)12

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

  • 44,8%Monoliidi lĂ”plik lĂ”hkumine ja arhitektuuri stabiliseerimine26

  • 29,3%Edasised plaanid sĂŒsteemi arendamiseks17

  • 19,0%Ma ei taha Dodo IS-ist midagi teada11

58 kasutajat hÀÀletasid. 6 kasutajat jÀid erapooletuks.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster