Dodo IS arhitektuuri ajalugu: varajane monoliit

Iga ebaÔnnelik ettevÔte on ebaÔnnelik omal moel.

Dodo IS sĂŒsteemi arendamine algas kohe, kui Dodo Pizza Ă€ri — 2011. aastal. Aluseks oli idee tĂ€iesti ja absoluutselt digitaliseerida Ă€riprotsessid, oma jĂ”ududega, mis tekitas juba 2011. aastal palju kĂŒsimusi ja skeptitsismi. Kuid nĂŒĂŒdseks, 9 aastat hiljem, jĂ€rgime seda teed — oma arendusega, mis algas monoliidist.

See artikkel on "vastus" kĂŒsimusele "Miks kirjutada arhitektuur ĂŒmber ja teha nii suured ja pikaajalised muudatused?" eelmisele artiklile "Dodo IS arhitektuuri ajalugu: back-office'i tee".Alustan sellega, kuidas Dodo IS arendus algas, milline oli algne arhitektuur, kuidas ilmusid uued moodulid ja milliste probleemide tĂ”ttu tuli teha ulatuslikke muudatusi.

Dodo IS arhitektuuri ajalugu: varajane monoliit

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

  1. Varane monoliit Dodo IS-is (2011-2015). (Oled siin)

  2. Tagavarahalduri tee: eraldi andmebaasid ja buss..

  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
)

Algne arhitektuur

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

Dodo IS arhitektuuri ajalugu: varajane monoliit

Esimene moodul arhitektuuris — tellimuse vastuvĂ”tt. Äri protsess oli jĂ€rgmine:

  • klient helistab pitsarestorani;

  • toru vĂ”tab vastu juht;

  • vĂ”tab telefoni teel tellimuse;

  • samal ajal sisestatakse see tellimuste vastuvĂ”tu liideses: arvesse vĂ”etakse kliendi teavet, tellimuse ĂŒksikasju ja kohaletoimetamise aadressi. 

Infotehnoloogia sĂŒsteem nĂ€gi vĂ€lja umbes nii


Esimene versioon oktoobrist 2011:

Veidi parendatud jaanuaris 2012

Dodo Pizza Kojuvedu Pizza Restoran infotehnoloogia sĂŒsteem

Esimese tellimuste vastuvĂ”tu mooduli arendamiseks olid ressursid piiratud. Pidi kiiresti palju tegema ja vĂ€ikese meeskonnaga. VĂ€ike meeskond — 2 arendajat, kes asetasid kogu tulevase sĂŒsteemi aluse.

Nende esimene lahendus mÀÀras tehnoloogia virna edasise saatuse:

  • Backend ASP.NET MVC-s, keel C#. Arendajad olid .NET-i spetsialistid, see virn oli neile tuttav ja meeldiv.

  • Frontend Bootstrap'i ja JQuery peal: kasutajaliidesed omatehtud stiilide ja skriptidega. 

  • Andmebaas MySQL: ilma litsentsikuludeta, lihtne kasutada.

  • Serverid Windows Serveril, kuna .NET-i sai tol ajal kasutada ainult Windowsi all (Mono arutelu jĂ€tame vĂ€lja).

FĂŒĂŒsiliselt vĂ€ljendus see "dedikeeritud serveris hostimisettevĂ”ttes". 

Tellimuste vastuvÔtu rakenduse arhitektuur

Siis rÀÀgiti juba mikroteenustest, samas kui SOA-d on suurtel projektidel kasutatud umbes 5 aastat, nÀiteks WCF tuli vÀlja 2006. aastal. Kuid siis valiti usaldusvÀÀrne ja tÔestatud lahendus.

Siin see on.

Dodo IS arhitektuuri ajalugu: varajane monoliit

Asp.Net MVC on Razor, mis genereerib serveri poolt vÀrske HTML-lehe pÀringu alusel forma vÔi kliendi poolelt. Kliendis kasutavad juba CSS ja JS-skriptid teabe kuvamiseks ning vajadusel teevad nad AJAX-pÀringuid lÀbi JQuery.

PÀringud jÔuavad serveris klassidesse *Controller, kus meetodis toimub töötlemine ja lÔpp-HTML-lehe genereerimine. Kontrollereid kasutatakse loogikatasemele, mida nimetatakse *Services. Iga teenus vastas mÔnele Àri aspektile:

  • NĂ€iteks DepartmentStructureService pakkus teavet pitsakodade ja osakondade kohta. Osakond on grupp pitsakodasid, mida juhib ĂŒks frantsiisiomanik.

  • ReceivingOrdersService vĂ”ttis vastu ja arvestas tellimuste sisu.

  • SmsService saatis SMS-e, kutsudes sms-saatmise API-teenuseid.

Teenused töötlesid andmeid andmebaasist, hoidsid Ă€riloogikat. Igas teenuses oli ĂŒks vĂ”i mitu *Repository vastava nimega. Neis olid juba pĂ€ringud salvestatud protseduuridele andmebaasis ja maappeeringu kiht. Salvestatud protseduurides oli Ă€riloogika, eriti palju neist, mis vĂ€ljastasid aruandeandmeid. ORM-i ei kasutatud, kĂ”ik usaldasid kĂ€sitsi kirjutatud SQL-i. 

Veel oli olemas domeenimudeli ja ĂŒldiste abiklasside kiht, nĂ€iteks klass Order, mis hoidis tellimust. Samuti, selles kihis, oli abi teksti kuvamise muutmiseks valitud valuuta jĂ€rgi.

Kogu seda saab esitada sellise mudelina:

Dodo IS arhitektuuri ajalugu: varajane monoliit

Tellimuse tee

Vaatame lihtsustatud algset teed sellise tellimuse loomiseks.

Dodo IS arhitektuuri ajalugu: varajane monoliit

Alguses oli sait staatiline. Seal olid hinnad, ĂŒleval oli telefoninumber ja ĂŒleskutse „Soovid pitsat — helista numbrile ja telli”. Tellimuse jaoks peame rakendama lihtsa voolu: 

  • Klient siseneb staatilisele veebisaidile hindadega, valib tooted ja helistab numbrile, mis on saidil mĂ€rgitud.

  • Klient nimetab tooted, mida ta soovib tellimusele lisada.

  • Nimetab oma aadressi ja nime.

  • Operaator vĂ”tab tellimuse vastu.

  • Tellimus kuvatakse vastuvĂ”etud tellimuste liideses.

KĂ”ik algab menĂŒĂŒ kuvamisest. Sisselogitud operaator aktsepteerib samal ajal vaid ĂŒhte tellimust. SeetĂ”ttu vĂ”ib eelnĂ”ukorv olla tema sessioonis (kasutaja seanss salvestatakse mĂ€llu). Seal on objekt Cart, mis sisaldab tooteid ja klientide teavet.

Klient nimetab tootega, operaator klÔpsab + toote kÔrval, ja serverile saadetakse pÀring. Toote kohta tÔmmatakse andmed andmebaasist ja lisatakse tooteinfo korvi.

Dodo IS arhitektuuri ajalugu: varajane monoliit

MÀrkus. Jah, siit ei ole tingimata vajalik toodet andmebaasist vÀlja tÔmmata, vaid seda vÔib edastada frontendist. Kuid selguse huvides nÀitasin just andmebaasist saadud teed. 

SeejÀrel sisestame kliendi aadressi ja nime. 

Dodo IS arhitektuuri ajalugu: varajane monoliit

Nupu „Loo tellimus” vajutamisel:

  • Saadame pĂ€ringu OrderController.SaveOrder().

  • Saame Cart sessioonist, seal on tooted soovitud koguses.

  • TĂ€iendame Cart'i kliendiinfoga ja edastame ReceiveOrderService klassi AddOrder meetodisse, kus see salvestatakse andmebaasi. 

  • Andmebaasis on tabelid tellimuse, tellimuse koostisosade ja kliendi kohta ning need kĂ”ik on omavahel seotud.

  • Tellimuse kuvamise liides kĂ€ib ja tĂ”mbab viimased tellimused vĂ€lja ning kuvab need.

Uued moodulid

Tellimuste vastuvĂ”tt oli oluline ja vajalik. Pizza mĂŒĂŒgiĂ€ri ei saa toimida, kui tellimuste vastuvĂ”ttu pole. SeetĂ”ttu hakkas sĂŒsteem funktsioone koguma — umbes aastatel 2012 kuni 2015. Selles ajavahemikus tekkis palju erinevaid sĂŒsteemi blokke, mida ma hakkan nimetama mooduliteks, vastandina teenuse vĂ”i toote mĂ”istele. 

Moodul on funktsioonide kogum, mis on ĂŒhendatud mingi ĂŒhise Ă€rieesmĂ€rgiga. Samal ajal asuvad nad fĂŒĂŒsiliselt ĂŒhes ja samas rakenduses.

Mooduleid vĂ”ib nimetada sĂŒsteemi blokiks. NĂ€iteks on olemas aruande moodul, haldustĂ€idise liidese toiduainete jĂ€lgija köögis, autoriseerimine. Need kĂ”ik on erinevad kasutajaliidesed, mĂ”nedel on isegi erinevad visuaalsed stiilid. Samas on need kĂ”ik ĂŒhe rakenduse ja ĂŒhe tööprotsessi raames. 

Tehniliselt kujundati moodulid kui Area (selline idee on isegi sĂ€ilinud asp.net core). Seal olid eraldi failid frontend'i, mudelite ja ka oma kontrollklassi jaoks. Tulemuseks oli sĂŒsteemi muutumine sellisest


Dodo IS arhitektuuri ajalugu: varajane monoliit


selliseks:

Dodo IS arhitektuuri ajalugu: varajane monoliit

MÔned moodulid on ellu viidud eraldi saitidega (executable project), kuna need tÀidavad vÀga erilisi funktsioone ja osaliselt seetÔttu, et nende arendamine oli paar korda eraldi, enamasti fookustatud. Need on:

  • Veebileht. — esimene versioon dodobizza.ru saidist.

  • Export: raportite eksportimine Dodo IS-st 1C-le. 

  • Isiklik — töötaja isiklik konto. See on arendatud eraldi ning omab oma sisenemispunkti ja eraldi disaini.

  • fs — projekt staatika hostimiseks. Hiljem loobusime sellest, viies kogu staatika CDN Akamai-le. 

ÜlejÀÀnud plokid olid rakenduses BackOffice. 

Dodo IS arhitektuuri ajalugu: varajane monoliit

Selgitus nimede kohta:

  • Cashier — restorani kassasĂŒsteem.

  • ShiftManager — liideseid rollile "Vahtkonnamanager": operatiivne statistika pitsarestorani mĂŒĂŒkidest, vĂ”imalus tooteid musta nimekirja lisada, tellimuse muutmine.

  • OfficeManager — liideseid rollile "Pitsarestorani juht" ja "Frantsiisi valdaja". Siin on koondatud funktsioonid pitsarestorani seadistamiseks, selle lojaalsusprogrammide korraldamiseks, töötajate vastuvĂ”tmiseks ja nendega töötamiseks, aruannete haldamiseks.

  • PublicScreens — liideseid televiisoritele ja tahvelarvutitele, mis on paigaldatud pitsarestoranides. Televisioonidel kuvatakse menĂŒĂŒ, reklaamteave ja tellimuse staatus vĂ€ljastamisel. 

Nad kasutasid ĂŒhist teenuste kihti, ĂŒhte domeenide klasside plokki Dodo.Core ning ka ĂŒhist andmebaasi. MĂ”nikord vĂ”isid nad vahetada teavet ĂŒksteisega, sealhulgas kasutasid eraldi saidid, nagu dodopizza.ru vĂ”i personal.dodopizza.ru, ka ĂŒhiseid teenuseid.

Uute moodulite ilmumise korral pĂŒĂŒdsime maksimaalselt taaskasutada juba loodud teenuste koodi, salvestatud protseduure ja andmebaasi tabeleid. 

Moodulite ulatuse paremaks mÔistmiseks on siin 2012. aasta plaanide arenguskeem:

Dodo IS arhitektuuri ajalugu: varajane monoliit

Aastaks 2015 oli kÔik skeemil ja isegi rohkem tootmises.

  • Tellimise vastuvĂ”tt on kasvanud eraldi Kontaktikeskuse plokiks, kus tellimust vĂ”tab vastu operaator.

  • Ilmusid avalikud ekraanid menĂŒĂŒ ja teabega, mis ripuvad pitsakohvikutes.

  • Köögis on moodul, mis automaatselt edastab hÀÀlsĂ”numi 'Uus pitsa', kui uus tellimus saabub, ning printib saatjale saatekirja. See lihtsustab oluliselt köögi protsesse, vĂ”imaldades töötajatel mitte hĂ€irida end lihtsate toimingutega.

  • Transportiblokk muutus eraldi transportkassaks, kus tellimus ĂŒle anti kullerile, kes eelnevalt vahetusse asus. Tema tööaeg arvestati palga mÀÀramiseks. 

Ajavahemikul 2012–2015 tuli juurde ĂŒle 10 arendaja, avati 35 pitsakohvikut, sĂŒsteem laiendati Rumeeniasse ja valmistati ette avamiseks USA-s. Arendajad ei tegelenud enam kĂ”igi ĂŒlesannetega, vaid jagunesid meeskondadesse, kus igaĂŒks spetsialiseerus oma sĂŒsteemi osale. 

Probleemid

Sealhulgas arhitektuuri tÔttu (aga mitte ainult).

Kaos andmebaasis

Üks andmebaas on mugav. Seal saab saavutada ĂŒhtsust, kasutades relatsiooniliste andmebaaside sisse ehitatud vahendeid. Töö sellega on tuttav ja mugav, eriti kui andmebaasis on vĂ€he tabeleid ja andmeid.

Kuid 4 aastaga arendamisel oli andmebaasis umbes 600 tabelit, 1500 salvestatud protseduuri, milles paljudel oli ka loogika. Kahjuks ei paku salvestatud protseduurid MySQL-iga töötamisel erilisi eeliseid. Need ei salvestu andmebaasi vahemÀllu ja loogika hoidmine neis keerustab arendust ja tÔrkeotsingut. Koodi taaskasutamine on samuti keeruline.

Paljudes tabelites ei olnud sobivaid indekseid., kus oli liiga palju indekseid, mis raskendas lisamist. Oli vaja modifitseerida umbes 20 tabelit — tellimuse loomise tehing vĂ”is kesta umbes 3-5 sekundit. 

Andmed tabelites ei olnud alati kÔige sobivamas vormis.. Kusagil oli vaja teha denormaliseerimist. Osa regulaarselt saadud andmeid oli veergudes XML-struktuurina, mis pikendas tÀitmise aega, pidas pikemaid pÀringuid ja raskendas arendust.

Üksikutele tabelitele tehti vĂ€ga ebahomoogeenseid pĂ€ringuid.. Eriti kannatasid populaarsed tabelid, nagu eelmainitud tabel orders vĂ”i tabel pizzeria. Neid kasutati köögis operatiivsete liideste vĂ€ljundiks, analĂŒĂŒtikaks. Veel pöördus nende poole veebisait (dodopizza.ru), kuhu vĂ”is igal ajal peale tulla ootamatult palju pĂ€ringuid. 

Andmed ei olnud aggregeeritud ja palju arvutusi toimus lennu peal andmebaasi vahenditega. See tekitas liigseid arvutusi ja lisakoormust. 

Kood kĂ€is tihti andmebaasis siis, kui tal ei oleks olnud seda teha. Kusagil puudusid bulk-operatsioonid, kusagil tuli ĂŒks pĂ€ring jagada mitmeks, et kiirus ja usaldusvÀÀrsus tĂ”useksid. 

Seotust ja segadust koodis

Modulid, mis pidanuks vastutama oma Ă€riosa eest, ei tĂ€itnud oma ĂŒlesandeid Ă”igesti. MĂ”ned neist dubleerivad funktsioone rollide osas. NĂ€iteks kohalik turundaja, kes vastutab oma linna vĂ”rgustiku turundustegevuse eest, pidi kasutama nii "Admini" liidest (kampaaniate seadistamiseks) kui ka "Kontori Juhi" liidest (kampaaniate mĂ”ju jĂ€lgimiseks Ă€ri jaoks). Loomulikult kasutasid mĂ”lemad moodulid seesama teenus, mis töötas boonuste kampaaniatega.

Teenused (klassid ĂŒhe monoliitse suurprojekti raames) vĂ”isid ĂŒksteist kutsuda, et rikastada oma andmeid.

Klassidega mudelid, mis andmeid salvestavad, koodis töötamine kÀis erinevalt. Kusagil olid konstruktorid, mille kaudu sai mÀÀrata nÔutavad vÀljad. MÔnes kohas tehti seda avalike omaduste kaudu. Loomulikult oli andmete saamine ja töötlemine andmebaasist mitmekesine. 

Loogika oli kas kontrollerites vÔi teenuseklassides. 

Need vÔivad tunduda ebaolulised probleemid, kuid need takistasid arendust oluliselt ja halvasid kvaliteeti, mis tÔi kaasa ebastabiilsuse ja vead. 

Suurte arenduste keerukus

Raskused tekkisid ka arenduse enda juures. Oli vaja luua erinevaid sĂŒsteemiblokke ja veel parelleelselt. Iga komponendi vajaduste mahutamine ĂŒhte koodi muutus ĂŒha keerulisemaks. Ei olnud lihtsalt kokku leppida ja kĂ”igile komponentidele ĂŒheaegselt meeldida. Sellele lisandusid tehnoloogilised piirangud, eriti andmebaasi ja frontendi osas. Oli vaja loobuda JQuery'st kĂ”rgematasemelistest raamistikest, eriti kliendiserviidest (veebileht).

MĂ”nes sĂŒsteemi osas oleks pidanud kasutama andmebaase, mis sobivad sellele paremini. NĂ€iteks hiljem oli meil pretsedent, kus ĂŒleminekul Rediselt CosmosDB'le tellimuse korvi hoidmiseks. 

Arendajad ja arendajad, kes töötavad oma valdkonnas, soovisid selgelt suuremat iseseisvust oma teenuste osas, nii arendamise kui ka vĂ€ljalaskmise osas. Ühendamise konfliktid, probleemid vĂ€ljalaskmise ajal. Kui 5 arendaja jaoks ei ole see probleem oluline, siis 10 puhul, rÀÀkimata plaanitud kasvust, muutub kĂ”ik tĂ”sisemaks. Ja ees ootas mobiilirakenduse arendamine (see algas 2017. aastal ja 2018. aastal oli suur langus). 

SĂŒsteemi erinevad osad nĂ”udsid erinevaid stabiilsuse nĂ€itajaid, kuid sĂŒsteemi tugeva seotuse tĂ”ttu ei suutnud me seda tagada. Uue funktsiooni arendamise viga administraatori paneelis vĂ”is tĂ€iesti halba mĂ”ju avaldada veebisaidi tellimuste vastuvĂ”tmisel, kuna kood on ĂŒhine ja taaskasutatav, andmebaas ja andmed on samuti ĂŒhtsed.

TĂ”enĂ€oliselt oleks ka sellise monoliitne-moodulaarse arhitektuuri raames neid vigu ja probleeme vĂ€ltida: vastutuse jagamine, nii koodi kui ka andmebaasi refaktooring, kihtide selge eraldamine, iga pĂ€ev kvaliteedi jĂ€lgimine. Kuid valitud arhitektuuriotsused ja keskendumine sĂŒsteemi funktsionaalsuse kiirele laienemisele viisid stabiilsuse probleemideni.

Kuidas blogi Silla jÔud pani restoranidesse kassad

Kui pitsakett (ja koormus) oleks kasvanud sama tempoga, siis mĂ”ne aja pĂ€rast oleks kukkumised olnud sellised, et sĂŒsteem ei tĂ”usenud enam ĂŒles. Hea illustratsioon problematikast, millega me 2015. aastal alguse saime, on selline lugu. 

Blogis „Silla jĂ”ud“ oli vidin, mis nĂ€itas kogu vĂ”rgu aastakĂ€ibe andmeid. Vidin pöördus avaliku API poole, mille Dodo need andmed pakub. NĂŒĂŒd on see statistika saadaval http://dodopizzastory.com/. Vidin kuvati igal lehel ja tegi taotlusi igal 20 sekundi jĂ€rel. Taotlus lĂ€ks aadressile api.dodopizza.ru ja kĂŒsis:

  • pitsakettide arv vĂ”rkus;

  • kogu vĂ”rgu kĂ€ive alates aastast;

  • kĂ€ive tĂ€na.

Tuludestatistikate pÀring lÀks otse andmebaasi, alustades tellimuste andmete kogumist reaalajas ja arvutades kokku. 

Sama tellimuste tabelisse said ka restoranide kassad, mis laadisid ĂŒles tĂ€naseks pĂ€evaks vastu vĂ”etud tellimuste loendi ning sinna lisandusid uued tellimused. Kassad tegid pĂ€ringuid iga 5 sekundi tagant vĂ”i lehe vĂ€rskendamisel.

Schema nÀgi vÀlja selline:

Dodo IS arhitektuuri ajalugu: varajane monoliit

Üks sĂŒgis, FĂ«dor Ovčinnikov kirjutas oma blogisse pika ja populaarse artikli. Blogisse tuli palju inimesi, kes hakkasid seda tĂ€helepanelikult lugema. Kui iga kĂŒlaline artiklit luges, töötas tulude vidin korralikult ja kĂŒsis API-d iga 20 sekundi tagant.

API kutsus vÀlja salvestatud protseduuri, et arvutada vÀlja kÔikide tellimuste summa aasta algusest kÔigis ketipitsakohvikutes. Agregatsioon toimus tellimuste tabelis, mis oli vÀga populaarne. Sellesse laadisid kÔik avatud restoranide kassad selle aja jooksul. Kassad lakkasid vastamast, tellimusi ei vÔetud vastu. Samuti ei vÔetud tellimusi vastu veebilehelt, need ei ilmunud jÀlgijasse, vahetuse juhataja ei nÀinud neid oma liideses. 

See ei ole ainus lugu. 2015. aasta sĂŒgiseks oli iga reede sĂŒsteemile kriitiline koormus. Mitmel korral pidime avaliku API vĂ€lja lĂŒlitama, ja korra pidime isegi saidi vĂ€lja lĂŒlitama, sest mitte miski ei aidanud. Oli isegi teenuste nimekiri, kus oli kirjas vĂ€ljalĂŒlitamise kord tĂ”siste koormuste korral.

Sellest ajast alates algas meie vĂ”itlus koormustega ja sĂŒsteemi stabiliseerimise nimel (2015. aasta sĂŒgisest kuni 2018. aasta sĂŒgiseni). Just siis juhtus "Suure langus". Edasi liikudes toimusid mĂ”nikord veel tĂ”rked, mĂ”ned olid ĂŒsna tunded, kuid ĂŒldiselt saab nĂŒĂŒd seda ebastabiilsuse perioodi pidada möödundiks.

Ärimahtude tormiline kasv

Miks ei saanud "kÔike kohe hÀsti teha"? Piisab, kui vaadata jÀrgmisi graafikuid.

Dodo IS arhitektuuri ajalugu: varajane monoliit

Samuti avati 2014-2015 Rumeenias ning valmistuti avamiseks Ameerika Ühendriikides.

VĂ”rk kasvas vĂ€ga kiiresti, avanesid uued riigid, ilmusid uued pitsarestoranide vormid, nĂ€iteks avati pitsarestoran toidutĂ€naval. KĂ”ik see nĂ”udis Dodo IS funktsionaalsuse laienemisele mĂ€rkimisvÀÀrset tĂ€helepanu. Ilma nende funktsioonideta, ilma köögis jĂ€lgimiseta, toidu ja kahjude arvestamiseta sĂŒsteemis, tellimuse esituse kuvamiseta toidutĂ€naviga, ei arutaks me nĂŒĂŒd "Ă”ige" arhitektuuri ja "Ă”ige" lĂ€henemise ĂŒle arendusele.

Teiseks takistuseks arhitektuuri Ă”igeaegsele ĂŒlevaatamisele ja tehnilistele probleemidele oli 2014. aasta kriis. Sellised asjad mĂ”jutavad valusalt tiimide kasvuvĂ”imalusi, eriti noore Ă€ri puhul, nagu Dodo Pizza.

Kiired lahendused, mis aitasid

Probleemid nĂ”udsid lahendust. Üldiselt vĂ”ib lahendused jagada kaheks grupiks:

  • Kiired, mis kustutavad tule ja annavad meile vĂ€ikese vastupidavuse ning vĂ”idavad aega muudatuste tegemiseks.

  • SĂŒsteemsed ja seetĂ”ttu pikaajalised. Mitmete moodulite ĂŒmberkujundamine, monoliitse arhitektuuri jagamine eraldi teenusteks (enamiku neist ei ole mikro, vaid pigem makroteenused ja selle kohta on Andrei Morevski ettekanne). 

Kiirete muudatuste kuiv nimekiri on jÀrgmine:

Mastaabi suurendamine meistribaasi jaoks

Muidugi, esimesena suurendatakse serveri vÔimsust, et vÔidelda koormustega. Seda tehti meistribaasi ja veebiserverite jaoks. Kahjuks on see vÔimalik ainult teatud piirini, edasi muutub see liiga kulukaks.

Alates 2014. aastast oleme lĂ€inud Azure'i, sellest kirjutasime ka toona artiklis „Kuidas Dodo Pizza toimetab pitsat Microsoft Azure'i pilve abil“. Aga pĂ€rast serveri vĂ”imsuse jĂ€rkjĂ€rgulist suurendamist lĂ”ppesime kuludega. 

Lugemiseks mÔeldud andmebaasi koopiad

Andmebaasist tehti kaks koopiat:

ReadReplica andmebaasi pÀringute jaoks. Seda kasutatakse nÀiteks linnade, tÀnavate, pitsade ja toidu (aeglaselt muudetud domeen) loetelude lugemiseks, ning seal, kus on lubatud vÀike viivitus. Neid koopiaid oli kaks ja tagasime nende kÀttesaadavuse sama hÀsti kui meistribaasi.

ReadReplica aruannete pĂ€ringute jaoks. Sellel andmebaasil oli madalam kĂ€ttesaadavus, kuid sinna said kĂ”ik aruanded. Olgu, et neil on rasked pĂ€ringud suurte andmete ĂŒmberarvutamiseks, kuid need ei mĂ”juta peamist andmebaasi ja operatiivliideseid. 

Kohandatud vahemÀlud koodis

Koodis ei olnud kuhugi vahemĂ€lusid (ĂŒldse). See tĂ”i kaasa tĂ€iendavad, mitte alati vajalikud, pĂ€ringud koormatud andmebaasi. VahemĂ€lud olid alguses nii mĂ€lus kui ka vĂ€lises vahemĂ€les, milleks oli Redis. KĂ”ik kehtivuse aegunud ajaga, seaded mÀÀrati koodis.

MÔned serverid tagaplaaniks

Ka rakenduse tagaplaan tuli suurendada, et taluda suurenenud koormust. Ühe iis-serveri pĂ”hjal tuli luua klaster. Ümber kolisime rakenduste sessiooni RedisCache'i, mis vĂ”imaldas luua mitu serverit, mis seisavad lihtsa koormuse tasakaalustaja taga round robin sĂŒsteemis. Alguses kasutati sama Redis'i, mis vahemĂ€lude jaoks, hiljem jagati see mitme peale. 

LÔpptulemusena arhitektuur komplikeerus...

Dodo IS arhitektuuri ajalugu: varajane monoliit


aga osa pinget Ônnestus leevendada.

JĂ€rgmine samm oli koormatud komponente ĂŒmber teha, millega me ka tegeleme. Sellest rÀÀgime jĂ€rgmises osas.

Allikas: habr.com

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