Dodo IS arhitektuuri ajalugu: varajane monoliit

VÔi on iga Ônnetu ettevÔte monoliidiga oma moodi Ônnetu.

Dodo IS sĂŒsteemi arendamine algas samal ajal, kui Dodo Pizza Ă€ri — 2011. aastal. Aluseks oli idee Ă€ri protsesside tĂ€ielikust ja totaalsest digitaliseerimisest, ja oma jĂ”ududega, mis tekitas juba 2011. aastal palju kĂŒsimusi ja skeptitsismi. Kuid nĂŒĂŒd, juba 9 aastat, oleme liikunud sellistel radadel — oma tarkvara arendamisega, mis algas monoliidiga.

See artikkel on "vastus" kĂŒsimustele "Miks ĂŒmberehitada arhitektuuri ja teha selliseid ulatuslikke ja pikaajalisi muudatusi?" eelnevale artiklile "Dodo IS arhitektuuri ajalugu: back-office’i tee". Alustan sellest, kuidas Dodo IS-i arendamine algas, milline oli algne arhitektuur, kuidas uued moodulid ilmusid ja milliste probleemide tĂ”ttu tuli lĂ€bi viia ulatuslikud muudatused.

Dodo IS arhitektuuri ajalugu: varajane monoliit

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

  1. Varajane monoliit Dodo IS-is (2011-2015). (Sa oled siin)

  2. Back-office’i tee: eraldi andmebaasid ja buss.

  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...)

Algne arhitektuur

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

Dodo IS arhitektuuri ajalugu: varajane monoliit

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

  • klient helistab pitsarestorani;

  • toru vĂ”tab vastu haldur;

  • vastuvĂ”tt tellimus telefonitsi;

  • samal ajal sisestab selle tellimuse vastuvĂ”tu liidesesse: arvesse vĂ”etakse kliendi teavet, tellimuse detailide andmeid ja kohaletoimetamise aadressi. 

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


Esimene versioon oktoobrist 2011:

Veidi parendatud jaanuaris 2012

Dodo Pizza InformatsioonisĂŒsteem Delivery Pizza Restaurant

Esimese tellimuse vastuvĂ”tu mooduli arendamise ressursid olid piiratud. Oli vaja teha palju, kiiresti ja vĂ€ikeses koosseisus. VĂ€ike koosseis — 2 arendajat, kes panid aluse kogu edasisele sĂŒsteemile.

Nende esimene lahendus mÀÀras tehnoloogia stack’i edasise saatuse:

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

  • Frontend Bootstrapil ja JQuery-l: kasutajaliideste loomine isekirjutatud stiilide ja skriptidega. 

  • Andmebaas MySQL: ilma litsentsikuludeta, lihtne kasutada.

  • Windows Serveri serverid, kuna .NET töötas ainult Windowsi all (Mono mehhanismist ei hakka rÀÀkima).

FĂŒĂŒsiliselt vĂ€ljendus see kĂ”ik hostimisettevĂ”tte 'dedikes'. 

Tellimuse vastuvÔtmise rakenduse arhitektuur

Tollal rÀÀgiti juba mikroteenustest, samas kui SOA-d on kasutatud suurtes projektides umbes 5 aastat, nÀiteks WCF ilmus 2006. aastal. Kuid toona valiti usaldusvÀÀrne ja testitud lahendus.

Siin see on.

Dodo IS arhitektuuri ajalugu: varajane monoliit

Asp.Net MVC — see on Razor, mis vormi vĂ”i kliendi pĂ€ringu pĂ”hjal genereerib serveris HTML-lehe renderdamisega. Kliendis kuvatakse seejĂ€rel CSS ja JS skriptidest teave ning vajadusel tehakse AJAX-pĂ€ringud lĂ€bi JQuery.

PÀringud serveris jÔuavad *Controller klassidesse, kus meetodis toimub töötlemine ja lÔpliku HTML-lehe genereerimine. Kontrollerid teevad pÀringud loogika kihile, mida nimetatakse *Services. Iga teenus vastas mingile Àri aspektile:

  • NĂ€iteks pakkus DepartmentStructureService teavet pitsakodade ja osakondade kohta. Osakond on grupi pitsakodade haldamine ĂŒhe frantsiisiga.

  • ReceivingOrdersService vĂ”ttis vastu ja arvutas tellimuste koostise.

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

Teenused töötlesid andmeid andmebaasist ja hoidsid Ă€ri loogikat. Igas teenuses oli ĂŒks vĂ”i mitu *Repository vastava nimetusega. Nendes sisaldusid pĂ€ringud andmebaasi salvestatud protseduuride ja kaardistamiskihtide kohta. Salvestatud protseduurides oli Ă€riloogikat, eriti palju neist, mis andsid vĂ€lja aruande andmed. ORM-i ei kasutatud, kĂ”ik toetusid kĂ€sitsi kirjutatud SQL-ile. 

Samuti oli olemas domeenimudel ja ĂŒldised abiklassid, nĂ€iteks Order klass, mis hoidis tellimust. Seal oli samas ka abimees, mis muundas kuvamisteksti valitud valuuta alusel.

KÔike seda on vÔimalik kujutada jÀrgmise mudelina:

Dodo IS arhitektuuri ajalugu: varajane monoliit

Tellimuse tee

KĂ€sitleme lihtsustatud esialgset tellimuse loomise teed.

Dodo IS arhitektuuri ajalugu: varajane monoliit

Alguses oli sait staatiline. Seal olid hinnad, ja ĂŒleval oli telefoninumber koos tekstiga 'Tahad pitsat — helista numbrile ja telli.' Tellimuse jaoks on meil vaja rakendada lihtne voog: 

  • Klient siseneb staatilisele saidile hindadega, valib tooted ja helistab numbrile, mis on veebilehel vĂ€lja toodud.

  • Klient nimetab tooted, mida ta soovib tellimusele lisada.

  • Mainib oma aadressi ja nime.

  • Operaator vĂ”tab tellimuse vastu.

  • Tellimus kuvatakse vastuvĂ”etud tellimuste liideses.

KĂ”ik algab menĂŒĂŒ kuvamisest. Sisse logitud operaator saab ĂŒhel hetkel vastu vĂ”tta ainult ĂŒhe tellimuse. SeetĂ”ttu vĂ”ib mustand-korv salvestuda tema sessioonis (kasutaja sessioon salvestatakse mĂ€llu). Seal on objekt Cart, kuhu kuuluvad tooted ja kliendi teave.

Klient nimetab toodet, operaator vajutab + toote kÔrval ja saadab serverisse pÀringu. Toote kohta tÔmmatakse andmed andmebaasist ja toote teave lisatakse korvi.

Dodo IS arhitektuuri ajalugu: varajane monoliit

MÀrkus. Jah, siin ei pea toodet andmebaasest tooma, vaid seda saab edastada front-endist. Kuid selguse huvides nÀitasin ma just teed andmebaasi. 

SeejÀrel sisestame kliendi aadressi ja nime. 

Dodo IS arhitektuuri ajalugu: varajane monoliit

Nupu ‘Loo tellimus’ vajutamisel:

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

  • Saame Cart'i sessioonist, seal on tooted vajalikes kogustes.

  • TĂ€iendame Cart'i kliendi teabega ja edastame selle ReceivingOrderService klassi AddOrder meetodisse, kus see salvestatakse andmebaasi. 

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

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

Uued moodulid

Tellimuse vastuvĂ”tt oli oluline ja vajalik. Pizza mĂŒĂŒmise Ă€ri ei saa toimida ilma tellimuste vastuvĂ”tmiseta. SeetĂ”ttu hakkas sĂŒsteem ajavahemikul 2012–2015 funktsionaalsust arendama. Sel ajal ilmus palju erinevaid sĂŒsteemi komponente, mida nimetame mooduliteks, vastandina teenuse vĂ”i toote mĂ”istetele. 

Moodul on funktsioonide kogum, mis on ĂŒhendatud mingi ĂŒhise Ă€ri eesmĂ€rgiga. Samuti asuvad nad fĂŒĂŒsiliselt ĂŒhes rakenduses.

Mooduleid vĂ”ib nimetada sĂŒsteemi plokkideks. NĂ€iteks vĂ”ivad need olla aruande moodul, administreerimise liidese rakendus, toodete jĂ€lgija köögis, autoriseerimine. Need on kĂ”ik erinevad liidesed kasutaja jaoks, mĂ”nedel on isegi erinevad visuaalsed stiilid. KĂ”ik see jÀÀb ĂŒhe rakenduse, ĂŒhe töötava protsessi raamidesse. 

Tehniliselt olid moodulid vormistatud kui Area (see idee on isegi jÀÀnud asp.net core). Seal olid eraldi failid front-endi, mudelite ja ka oma kontrollereid. LĂ”puks töötas sĂŒsteem vĂ€lja nii...

Dodo IS arhitektuuri ajalugu: varajane monoliit

...niimoodi:

Dodo IS arhitektuuri ajalugu: varajane monoliit

MÔned moodulid on realiseeritud eraldi veebisaitidena (tÀidetav projekt), tÀielikult erilise funktsionaalsuse tÔttu ja osaliselt osaliselt, kuna arendustöö oli eraldatud ja rohkem keskendunud. Need on:

  • Veebisait — esimene versioon veebisaidist dodopizza.ru.

  • Export: raportide eksportimine Dodo IS-ist 1C-le. 

  • Isiklik — töötaja isiklik kabinet. See on eraldi arendatud ning sellel on oma sisenemispunkt ja eraldi disain.

  • fs — projekt staatilise sisu majutamiseks. Hiljem sellega lĂ”petati ja kogu staatika viidud Akamai CDN-ile. 

ÜlejÀÀnud plokid asusid BackOffice rakenduses. 

Dodo IS arhitektuuri ajalugu: varajane monoliit

Nimede selgitus:

  • Cashier — restorani kassasĂŒsteem.

  • ShiftManager — liideseid rollile 'Vahtkonna juht': operatiivne statistika pitsarestorani mĂŒĂŒkidest, vĂ”imalus lisada tooteid musta nimekirja, muuta tellimust.

  • OfficeManager — liideseid rollidele 'Pitsarestorani juht' ja 'Frantsiisi andja'. Siin on koondatud funktsioonid pitsarestorani seadistamiseks, boonuskampaaniate haldamiseks, töötajate vastuvĂ”tmiseks ja töötamiseks, aruandeks.

  • PublicScreens — liideseid televisioonidele ja tahvelarvutitele, mis asuvad pitsarestoranides. Televisioonidel kuvatakse menĂŒĂŒ, reklaamiteave, tellimuse staatus vĂ€ljakuulutamise hetkel. 

Nad kasutasid ĂŒldist teenuste kihti, ĂŒldist domeeniklasside plokki Dodo.Core, samuti ĂŒhist andmebaasi. MĂ”nikord viidi nad suunamiste kaudu ĂŒksteisega kokku. Sealhulgas pÀÀsesid ĂŒhistele teenustele ka eraldi veebisaidid, nagu dodopizza.ru vĂ”i personal.dodopizza.ru.

Uute moodulite ilmnemisel pĂŒĂŒti maksimaalselt taaskasutada juba loodud teenuste, salvestatud protseduuride ja andmebaasi tabelite koodi. 

Et paremini mĂ”ista sĂŒsteemis loodud moodulite ulatust, on siin 2012. aasta arengukava skeem:

Dodo IS arhitektuuri ajalugu: varajane monoliit

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

  • Tellimuse vastuvĂ”tt kasvas eraldi Kontaktikeskuseks, kus tellimust vĂ”tab vastu operaator.

  • Ilmusid avalikud ekraanid menĂŒĂŒ ja teabe kuvamiseks, mis asusid pitsarestoranides.

  • Köögis on moodul, mis automaatselt esitab hÀÀlsĂ”numi 'Uus pitsal' uue tellimuse saabumisel ja printib kauba saadetise kullerile. See lihtsustab köögiprotsesse oluliselt, vĂ”imaldades töötajatel mitte hajuda paljude lihtsate toimingute peale.

  • Kohaletoimetamise plokk muutus eraldi Kohaletoimetamise Kassaks, kus tellimus anti kullerile, kes oli eelnevalt vahetusse lĂ€inud. Tema tööaeg arvestati palga mÀÀramiseks. 

Aastatel 2012 kuni 2015 tekkis rohkem kui 10 arendajat, avati 35 pitsarestorani, levis sĂŒsteem Rumeenias ning valmistati ette kohtade avamine Ameerikas. Arendajad ei tegele enam kĂ”igi ĂŒlesannetega, vaid jagunevad meeskondadesse, millest igaĂŒks spetsialiseerub oma sĂŒsteemi osale. 

Probleemid

Sealhulgas arhitektuuri tÔttu (kuid mitte ainult).

Kaos andmebaasis

Üks andmebaas – see on mugav. Sellega saab saavutada ĂŒhtsuse, kasutades relatsiooniliste andmebaasidega integreeritud tööriistu. Töö selle kallal on tuttav ja mugav, eriti kui seal on vĂ€he tabeleid ja andmeid.

Kuid nelja aasta jooksul arenduses oli andmebaasis umbes 600 tabelit, 1500 salvestatud protseduuri, milles paljus oli ka loogika. Kahjuks ei too salvestatud protseduurid MySQL-i kasutamisel eriliselt eeliseid. Need ei ole andmebaasi poolt vahemÀlus hoitud ning loogika salvestamine keerustab arendust ja silumist. Koodi taaskasutamine on samuti keeruline.

Paljudel tabelitel puudusid sobivad indeksid, kuid mĂ”nes oli vastupidi liiga palju indekseid, mis raskendas lisamist. Ümber tuli teha umbes 20 tabelit – tellimuse loomise tehing vĂ”is vĂ”tta aega umbes 3-5 sekundit. 

Andmed tabelites ei olnud alati kĂ”ige sobivamas vormis. MĂ”nes kohas tuli teha denormaliseerimist. Üks osa regulaarselt saadud andmetest oli veerul XML-struktuuri kujul, see pikendas tĂ€itmise aega, venitas pĂ€ringuid ja keerustas arendust.

Üksikutele tabelitele tehti vĂ€ga mitmekesiseid pĂ€ringuid. Eriti kannatasid populaarsed tabelid, nagu eelmainitud tabel orders vĂ”i tabel pizzeria. Neid kasutati köögis operatiivsete liideste ja analĂŒĂŒsi esitamiseks. Sellest pöördus ka veebileht (dodopizza.ru), kuhu vĂ”is igal ajal ootamatult tulla palju pĂ€ringuid. 

Andmed ei olnud agaratiivsed ja palju arvutusi toimus jooksvalt andmebaasi vahendusel. See pÔhjustas tarbetuid arvutusi ja lisakoormust. 

Tihti liikus kood andmebaasi siis, kui tal ei oleks seda teha tohtinud. Kusagil puudusid bulk-tegevused, kusagil oleks pidanud ĂŒhe pĂ€ringu jagama mitmeks lĂ€bi koodi, et kiirus ja usaldusvÀÀrsus tĂ”usta. 

Seotuse ja segaduse allikad koodis

Moodulid, mis pidid vastutama oma Ă€rivaldkonna eest, ei tĂ€itnud seda Ă”igesti.. MĂ”nedel neist olid rollide funktsioonide dubleerimised. NĂ€iteks kohalik turundaja, kes vastutas oma linna turundustegevuse eest, pidi kasutama nii „Admini” liidest (aktsiate seadistamiseks) kui ka „Kontori Juhi” liidest (aktsiate mĂ”ju jĂ€lgimiseks Ă€ritegevusele). Loomulikult kasutasid mĂ”lemad moodulid sama teenust, mis töötas boonuskampaaniatega.

Teenuseid (klassi ĂŒhes suures monoliitses projektis) vĂ”idi omavahel kutsuda, et oma andmeid rikastada.

Mudelklassidega, mis andmeid salvestavad, tööd tehti erineval viisil. Kusagil olid konstruktoreid, mille kaudu sai mÀrkida kohustuslikud vÀljad. Kusagil tehti seda avalike omaduste kaudu. Loomulikult oli andmete saamine ja töötlemine andmebaasist mitmekesine. 

Loogika oli kas kontrollerites vÔi teenuseklassides. 

Need tunduvad vÀikesed probleemid, kuid need aeglustasid arendust ja vÀhendasid kvaliteeti, mis viis ebastabiilsuse ja vigade tekkimiseni. 

Suure arenduse keerukus

TĂ”sised raskused tekkisid ka arenduse endaga. Oli vaja teha erinevaid sĂŒsteemi komponente, ning seda paralleelselt. Iga komponendi vajaduste mahutamine ĂŒhte koodi muutus ĂŒha raskemaks. Ei olnud lihtne kokku leppida ja rahuldada kĂ”iki komponente ĂŒheaegselt. Lisaks sellele tulid tehnoloogilistele piirangutele, eriti andmebaasi ja frontendi osas. Pidi loobuma JQueryst kĂ”rgema taseme raamistikute poole, eriti klienditeenuste (veebisaidi) osas.

MĂ”nes sĂŒsteemi osas vĂ”iksid olla kasutusel andmebaasid, mis sobivad selleks paremini. NĂ€iteks hiljem oli meil pretsedent ĂŒleminek Rediselt CosmosDBle tellimiskorvi salvestamiseks. 

Komandod ja arendajad, kes tegelesid oma valdkonnaga, soovisid selgelt suuremat iseseisvust oma teenustes, nii arenduse kui ka vĂ€lja laskmise osas. Ühendamisprobleemid, probleemid vĂ€ljaannetes. Kui 5 arendaja jaoks ei ole see probleem eriti oluline, siis 10 puhul, ja veelgi enam oodatava kasvu korral, oleks kĂ”ik tĂ”sisemaks muutunud. Ja ees oli oodata mobiilirakenduse arendust (see kĂ€ivitus 2017. aastal, ja 2018. aastal toimus suure languse). 

Erinevad sĂŒsteemi osad vajavad erinevaid stabiilsuse nĂ€itajaid., kuid sĂŒsteemi tugeva seotuse tĂ”ttu ei suutnud me seda tagada. Uue funktsiooni vĂ€ljatöötamise viga adminpaneelis vĂ”is tĂ”epoolest mĂ”jutada veebis tellimise protsessi, kuna kood on ĂŒhine ja taaskasutatav, andmebaas ja andmed samuti ĂŒhtsed.

TĂ”enĂ€oliselt oleks sellise monoliitse-modulaarse arhitektuuri raames saanud vĂ€ltida neid vigu ja probleeme: vastutuse jagamine, koodi ja andmebaasi refaktoreerimine, kihtide selge eristamine, kvaliteedi jĂ€lgimine iga pĂ€ev. Kuid valitud arhitektuurilised lahendused ja fookus sĂŒsteemi funktsionaalsuse kiirel laiendamisel viisid probleemideni stabiilsuse osas.

Kuidas blogi Vaimu vÀgi viis kassade tÔusule restoranides

Kui pitsarestoranide (ja koormuse) kasv oleks jĂ€tkunud samas tempos, oleks mĂ”ne aja pĂ€rast langused olnud nii suured, et sĂŒsteem ei tĂ”useks enam. HĂ€sti illustreerib probleeme, millega hakkasime silmitsi seisma 2015. aastal, ĂŒks selline lugu. 

Blogis “Vaimu vĂ€gi” oli vidin, mis nĂ€itas kogu ketti aastaseid tulude andmeid. Vidin pöördus avaliku API Dodo poole, mis pakub neid andmeid. Praegu on see statistika saadaval http://dodopizzastory.com/. Vidin kuvati igal lehel ja tegi pĂ€ringuid iga 20 sekundi tagant. PĂ€ring suundus api.dodopizza.ru-le ja kĂŒsis:

  • pitsarestoranide arvu kettis;

  • kogu keti tulu aasta algusest;

  • tulu tĂ€na.

Tulu statistika pĂ€ring suundus otse andmebaasi ja hakkas kĂŒsima tellimuste andmeid, agregatsioon toimus reaalajas ja esitati summa. 

Sama tellimuste tabeli lÀbisid ka restoranide kassad, laadides alla tÀna vÔetud tellimuste loendi ja lisades sellesse uusi tellimusi. Kassad tegid pÀringuid iga 5 sekundi tagant vÔi siis, kui lehte uuendati.

Skeem nÀgi vÀlja selline:

Dodo IS arhitektuuri ajalugu: varajane monoliit

Üks sĂŒgis, Fedor Ovčinnikov kirjutas oma blogis pika ja populaarse artikli. Blogisse tuli vĂ€ga palju inimesi ja nad hakkasid kĂ”ike hoolikalt lugema. Seni, kuni iga kĂŒlastaja luges artiklit, töötas tulu vidin korralikult ja kĂŒsis API-lt iga 20 sekundi jĂ€rel.

API kutsus salvestatud protseduuri, et arvutada kĂ”igi selle aasta tellimuste kogusumma kĂ”igis ketis olevates pitsakodades. Agregeerimine toimus orders tabelis, mis on vĂ€ga populaarne. KĂ”ik avatud restoranide kassad kasutasid seda. Kassad lakkasid töötamast, tellimusi ei vĂ”etud vastu. Samuti ei vĂ”etud tellimusi vastu veebisaidilt, need ei ilmunud jĂ€lgimisĂŒsteemis, vahetuse juht ei saanud neid oma liideses nĂ€ha. 

See pole ainus lugu. 2015. aasta sĂŒgisel oli igal reedel sĂŒsteemile kriitiline koormus. Korduvalt sulgesime avaliku API, ja korra pidime isegi veebisaidi vĂ€lja lĂŒlitama, kuna ei aidanud enam miski. Oli isegi teenuste nimekiri, millises jĂ€rjekorras teenuseid korraliku koormuse korral vĂ€lja lĂŒlitada.

Sellest ajast algab meie vĂ”itlus koormustega ja sĂŒsteemi stabiliseerimine (2015. aasta sĂŒgisest kuni 2018. aasta sĂŒgiseni). Just siis juhtus "Suure kummardus". Edasi juhtus mĂ”nikord vaid ebaĂ”nnestumisi, mĂ”ned olid piisavalt tundlikud, kuid ĂŒldiselt on praegu ebastabiilsuse perioodi vĂ”imalik pidada möödunuks.

Äri kiire 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 ja valmistuti avama Ameerikas.

Ketas kasvas vĂ€ga kiiresti, uusi riike avati, uusi pitsakohta vorme ilmus, nĂ€iteks avati pitsakoda toiduturgudel. KĂ”ik see nĂ”udis erilist tĂ€helepanu Dodo IS funktsioonide laiendamisele. Ilma nende funktsioonideta, köögis jĂ€lgimist, toiduainete ja kadude arvestuseta sĂŒsteemis, tellimuste esitamine toiduturu saalis, ei arutaks me praegu „Ôige“ arhitektuuri ja „Ôige“ lĂ€henemise ĂŒle arenduses.

Samuti oli 2014. aasta kriis takistuseks arhitektuuri Ôigeaegsel lÀbivaatamisel ja tehniliste probleemide tÀhelepanu juhtimisel. Sellised asjad ÔÔnestavad meeskondade kasvuvÔimet, eriti noore Àri, nagu Dodo Pizza.

Kiired lahendused, mis aitasid

Probleemid nĂ”udsid lahendust. Üldiselt vĂ”ib lahendused jagada kahte rĂŒhma:

  • Kiired, mis kustutavad tule ja annavad natuke turvavarustust ning kasu meie ajale muudatuste tegemiseks.

  • SĂŒsteemsed ja seetĂ”ttu pikad. Mitmete moodulite ĂŒmberkujundamine, monoliitsete arhitektuuride jagamine eraldi teenusteks (enamik neist on pigem makroteenused kui mikroteenused ja sellest on juba Andrei Morevsky raport). 

Kiirete muudatuste kuiv loend on jÀrgmine:

Mastaabi suurendamise meistribaas

Muidugi on esimene samm koormuste vastu vÔitlemisel serveri vÔimsuse suurendamine. Seda tehti meistribaasi ja veebiserverite jaoks. Kahjuks on see vÔimalik ainult teatud piirini, pÀrast mida muutub see liiga kulukaks.

Alates 2014. aastast kolisime Azure'i, sellest rÀÀkisime ka siis artiklis „Kuidas Dodo Pizza toimetab pitsat Microsoft Azure'i pilve abil”. Kuid pĂ€rast serverite suurendamise seeriat jĂ”esĂŒsteemi puhul jĂ”udsime kuludesse. 

Lugemise replikad

Replikad loodi kahte tĂŒĂŒpi:

ReadReplica pÀringute jaoks teabelehtedele. See on mÔeldud lugemiseks, mis puudutab teabeallikaid, nagu linnad, tÀnavad, pitsakohad, tooted (aeglaselt muutuva domeeniga), ning nendes liidestes, kus on lubatud vÀike viivitus. Neid replikasid oli 2 ja me tagasime nende kÀttesaadavuse samamoodi nagu meistrit.

ReadReplica raportite pĂ€ringute jaoks. Sellel andmebaasil oli madalam kĂ€ttesaadavus, kuid see sisaldas kĂ”iki aruandeid. Olgu, neil on rasked pĂ€ringud tohutute andmete ĂŒlekalkuluste jaoks, kuid need ei mĂ”juta pĂ”hivaramu ja operatiivseid liideseid. 

Kaasid koodis

Koodis ei olnud kuhugi kaasu (ĂŒldse). See pĂ”hjustas tĂ€iendavaid, mitte alati vajalikke pĂ€ringuid koormatud andmebaasi. KĂ€esolevalt olid kaasu nii mĂ€lus kui ka vĂ€likausiteenuses, see oli Redis. KĂ”ik aegunud seadmed olid ajaliselt, seaded mÀÀrati koodis.

Mitu serverit tahkete sĂŒsteemide jaoks

Rakenduse tahke sĂŒsteemi lĂ€ks ka mastaapimiseks, et taluda suurenenud koormusi. Üks IIS-server tuli muutuda klastriks. Me viisime rakenduste seansi mĂ€lust ĂŒle RedisCache'i, mis vĂ”imaldas luua mitu serverit, mis seisavad tavalise koormuse tasakaalustaja taga, kasutades round robin'i. Alguses kasutati sama Redis, mis oli kaausideks, hiljem jagati see mitmeks. 

KokkuvÔttes muutus arhitektuur keerulisemaks


Dodo IS arhitektuuri ajalugu: varajane monoliit


kuid osa pingest Ônnestus leevendada.

Ja siis tuli ĂŒle vaadata koormatud komponente, millega me ka tegelesime. Sellest rÀÀgime jĂ€rgmises osas.

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