{"id":95804,"date":"2020-10-03T13:42:27","date_gmt":"2020-10-03T11:42:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit"},"modified":"2020-10-03T13:42:27","modified_gmt":"2020-10-03T11:42:27","slug":"istoriya-arhitektury-dodo-is-rannij-monolit","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit","title":{"rendered":"Dodo IS arhitektuuri ajalugu: varajane monoliit","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>V\u00f5i on iga \u00f5nnetu ettev\u00f5te monoliidiga oma moodi \u00f5nnetu.<\/p>\n<p>Dodo IS s\u00fcsteemi arendamine algas samal ajal, kui Dodo Pizza \u00e4ri \u2014 2011. aastal. Aluseks oli idee \u00e4ri protsesside t\u00e4ielikust ja totaalsest digitaliseerimisest, ja <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2011\/08\/30\/sobstvennaya-sistema\/\"><u>oma j\u00f5ududega<\/u><\/a><\/noindex>, mis tekitas juba 2011. aastal palju k\u00fcsimusi ja skeptitsismi. Kuid n\u00fc\u00fcd, juba 9 aastat, oleme liikunud sellistel radadel \u2014 oma tarkvara arendamisega, mis algas monoliidiga.<\/p>\n<p>See artikkel on \"vastus\" k\u00fcsimustele \"Miks \u00fcmberehitada arhitektuuri ja teha selliseid ulatuslikke ja pikaajalisi muudatusi?\" eelnevale artiklile <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/506136\/\"><u>\"Dodo IS arhitektuuri ajalugu: back-office\u2019i tee\"<\/u><\/a><\/noindex>. Alustan sellest, kuidas Dodo IS-i arendamine algas, milline oli algne arhitektuur, kuidas uued moodulid ilmusid ja milliste probleemide t\u00f5ttu tuli l\u00e4bi viia ulatuslikud muudatused.<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/881fe068f46f934dc9730a5946996da3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<p><strong>Artiklite sari \"Mis on Dodo IS?\" r\u00e4\u00e4gib:<\/strong><\/p>\n<\/blockquote>\n<ol>\n<li>\n<p>Varajane monoliit Dodo IS-is (2011-2015). (Sa oled siin)<\/p>\n<\/li>\n<li>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/506136\/\">Back-office\u2019i tee: eraldi andmebaasid ja buss<\/a><\/noindex>.<\/p>\n<\/li>\n<li>\n<p>Kliendi osa tee: fassaad andmebaasi kohal (2016-2017). (T\u00f6\u00f6s...)<\/p>\n<\/li>\n<li>\n<p>T\u00f5eliste mikroteenuste ajalugu. (2018-2019). (T\u00f6\u00f6s...)<\/p>\n<\/li>\n<li>\n<p>Monoliidi l\u00f5plik jagunemine ja arhitektuuri stabiliseerimine. (T\u00f6\u00f6s...)<\/p>\n<\/li>\n<\/ol>\n<h3>Algne arhitektuur<\/h3>\n<p>2011. aastal n\u00e4gi Dodo IS arhitektuur v\u00e4lja nii:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/93814518ca50678933f2591749e3e489.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Esimene moodul arhitektuuris \u2014 tellimuse vastuv\u00f5tt. \u00c4ri protsess oli j\u00e4rgmine:<\/p>\n<ul>\n<li>\n<p>klient helistab pitsarestorani;<\/p>\n<\/li>\n<li>\n<p>toru v\u00f5tab vastu haldur;<\/p>\n<\/li>\n<li>\n<p>vastuv\u00f5tt tellimus telefonitsi;<\/p>\n<\/li>\n<li>\n<p>samal ajal sisestab selle tellimuse vastuv\u00f5tu liidesesse: arvesse v\u00f5etakse kliendi teavet, tellimuse detailide andmeid ja kohaletoimetamise aadressi.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Infotehnoloogia s\u00fcsteem n\u00e4gi v\u00e4lja umbes nii\u2026<\/p>\n<p>Esimene versioon oktoobrist 2011:<\/p>\n<p><center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/5f75cfa9779ba700bea78afc\" frameborder=\"0\" allowfullscreen><\/iframe><\/center>Veidi parendatud jaanuaris 2012<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/h2Cdht01gDA\">Dodo Pizza Informatsioonis\u00fcsteem Delivery Pizza Restaurant<\/a><\/noindex><\/p>\n<p>Esimese tellimuse vastuv\u00f5tu mooduli arendamise ressursid olid piiratud. Oli vaja teha palju, kiiresti ja v\u00e4ikeses koosseisus. V\u00e4ike koosseis \u2014 2 arendajat, kes panid aluse kogu edasisele s\u00fcsteemile.<\/p>\n<p>Nende esimene lahendus m\u00e4\u00e4ras tehnoloogia stack\u2019i edasise saatuse:<\/p>\n<ul>\n<li>\n<p>Backend ASP.NET MVC-l, keel C#. Arendajad olid .NET-i spetsialistid, see stack oli neile tuttav ja meeldiv. <\/p>\n<\/li>\n<li>\n<p>Frontend Bootstrapil ja JQuery-l: kasutajaliideste loomine isekirjutatud stiilide ja skriptidega.&nbsp;<\/p>\n<\/li>\n<li>\n<p>Andmebaas MySQL: ilma litsentsikuludeta, lihtne kasutada.<\/p>\n<\/li>\n<li>\n<p>Windows Serveri serverid, kuna .NET t\u00f6\u00f6tas ainult Windowsi all (Mono mehhanismist ei hakka r\u00e4\u00e4kima).<\/p>\n<\/li>\n<\/ul>\n<p>F\u00fc\u00fcsiliselt v\u00e4ljendus see k\u00f5ik hostimisettev\u00f5tte 'dedikes'.&nbsp;<\/p>\n<h4>Tellimuse vastuv\u00f5tmise rakenduse arhitektuur<\/h4>\n<p>Tollal r\u00e4\u00e4giti juba mikroteenustest, samas kui SOA-d on kasutatud suurtes projektides umbes 5 aastat, n\u00e4iteks WCF ilmus 2006. aastal. Kuid toona valiti usaldusv\u00e4\u00e4rne ja testitud lahendus.<\/p>\n<p>Siin see on.<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/688da7d4e02a6310bf7d2da1b767fe10.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Asp.Net MVC \u2014 see on Razor, mis vormi v\u00f5i kliendi p\u00e4ringu p\u00f5hjal genereerib serveris HTML-lehe renderdamisega. Kliendis kuvatakse seej\u00e4rel CSS ja JS skriptidest teave ning vajadusel tehakse AJAX-p\u00e4ringud l\u00e4bi JQuery.<\/p>\n<p>P\u00e4ringud serveris j\u00f5uavad *Controller klassidesse, kus meetodis toimub t\u00f6\u00f6tlemine ja l\u00f5pliku HTML-lehe genereerimine. Kontrollerid teevad p\u00e4ringud loogika kihile, mida nimetatakse *Services. Iga teenus vastas mingile \u00e4ri aspektile:<\/p>\n<ul>\n<li>\n<p>N\u00e4iteks pakkus DepartmentStructureService teavet pitsakodade ja osakondade kohta. Osakond on grupi pitsakodade haldamine \u00fche frantsiisiga.<\/p>\n<\/li>\n<li>\n<p>ReceivingOrdersService v\u00f5ttis vastu ja arvutas tellimuste koostise.<\/p>\n<\/li>\n<li>\n<p>SmsService saatis SMS-e, kutsudes esile SMS-ide saatmise API-teenuseid.<\/p>\n<\/li>\n<\/ul>\n<p>Teenused t\u00f6\u00f6tlesid andmeid andmebaasist ja hoidsid \u00e4ri loogikat. Igas teenuses oli \u00fcks v\u00f5i mitu *Repository vastava nimetusega. Nendes sisaldusid p\u00e4ringud andmebaasi salvestatud protseduuride ja kaardistamiskihtide kohta. Salvestatud protseduurides oli \u00e4riloogikat, eriti palju neist, mis andsid v\u00e4lja aruande andmed. ORM-i ei kasutatud, k\u00f5ik toetusid k\u00e4sitsi kirjutatud SQL-ile.&nbsp;<\/p>\n<p>Samuti oli olemas domeenimudel ja \u00fcldised abiklassid, n\u00e4iteks Order klass, mis hoidis tellimust. Seal oli samas ka abimees, mis muundas kuvamisteksti valitud valuuta alusel.<\/p>\n<p>K\u00f5ike seda on v\u00f5imalik kujutada j\u00e4rgmise mudelina: <\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/ff76833cfd19e778bc6ad33589fc328b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Tellimuse tee<\/h4>\n<p>K\u00e4sitleme lihtsustatud esialgset tellimuse loomise teed.<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/da7334d6e6258b800618287de6e1d393.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Alguses oli sait staatiline. Seal olid hinnad, ja \u00fcleval oli telefoninumber koos tekstiga 'Tahad pitsat \u2014 helista numbrile ja telli.' Tellimuse jaoks on meil vaja rakendada lihtne voog:&nbsp;<\/p>\n<ul>\n<li>\n<p>Klient siseneb staatilisele saidile hindadega, valib tooted ja helistab numbrile, mis on veebilehel v\u00e4lja toodud.<\/p>\n<\/li>\n<li>\n<p>Klient nimetab tooted, mida ta soovib tellimusele lisada.<\/p>\n<\/li>\n<li>\n<p>Mainib oma aadressi ja nime.<\/p>\n<\/li>\n<li>\n<p>Operaator v\u00f5tab tellimuse vastu.<\/p>\n<\/li>\n<li>\n<p>Tellimus kuvatakse vastuv\u00f5etud tellimuste liideses.<\/p>\n<\/li>\n<\/ul>\n<p>K\u00f5ik algab men\u00fc\u00fc kuvamisest. Sisse logitud operaator saab \u00fchel hetkel vastu v\u00f5tta ainult \u00fche tellimuse. Seet\u00f5ttu v\u00f5ib mustand-korv salvestuda tema sessioonis (kasutaja sessioon salvestatakse m\u00e4llu). Seal on objekt Cart, kuhu kuuluvad tooted ja kliendi teave.<\/p>\n<p>Klient nimetab toodet, operaator vajutab <code>+<\/code> toote k\u00f5rval ja saadab serverisse p\u00e4ringu. Toote kohta t\u00f5mmatakse andmed andmebaasist ja toote teave lisatakse korvi.<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/e481d7a5865efc1d37574225c6a0b89e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><strong>M\u00e4rkus<\/strong>. Jah, siin ei pea toodet andmebaasest tooma, vaid seda saab edastada front-endist. Kuid selguse huvides n\u00e4itasin ma just teed andmebaasi.&nbsp;<\/p>\n<p>Seej\u00e4rel sisestame kliendi aadressi ja nime.&nbsp;<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/c40e29108a308015522cf219b6d7a515.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nupu \u2018Loo tellimus\u2019 vajutamisel:<\/p>\n<ul>\n<li>\n<p>Saadame p\u00e4ringu OrderController.SaveOrder().<\/p>\n<\/li>\n<li>\n<p>Saame Cart'i sessioonist, seal on tooted vajalikes kogustes.<\/p>\n<\/li>\n<li>\n<p>T\u00e4iendame Cart'i kliendi teabega ja edastame selle ReceivingOrderService klassi AddOrder meetodisse, kus see salvestatakse andmebaasi.&nbsp;<\/p>\n<\/li>\n<li>\n<p>Andmebaasis on tellimuse, tellimuse sisu ja kliendi tabelid ning need k\u00f5ik on omavahel seotud.<\/p>\n<\/li>\n<li>\n<p>Tellimuse kuvamise liides k\u00e4ivitub ja t\u00f5mbab v\u00e4lja viimased tellimused ning kuvab need.<\/p>\n<\/li>\n<\/ul>\n<h4>Uued moodulid<\/h4>\n<p>Tellimuse vastuv\u00f5tt oli oluline ja vajalik. Pizza m\u00fc\u00fcmine ei ole v\u00f5imalik, kui ei ole tellimuste vastuv\u00f5ttu. Seet\u00f5ttu hakkas s\u00fcsteem funktsionaalsust koguma \u2014 umbes aastatel 2012 kuni 2015. Sel ajal ilmus palju erinevaid s\u00fcsteemi plokke, mida ma hakkan nimetama <strong>mooduliteks<\/strong>, vastandina teenuse v\u00f5i toote m\u00f5istetele.&nbsp;<\/p>\n<p>Moodul on funktsioonide kogum, mis on \u00fchendatud mingi \u00fchise \u00e4ri eesm\u00e4rgiga. Samuti asuvad nad f\u00fc\u00fcsiliselt \u00fches rakenduses.<\/p>\n<p>Mooduleid v\u00f5ib nimetada s\u00fcsteemi plokkideks. N\u00e4iteks v\u00f5ivad need olla aruande moodul, administreerimise liidese rakendus, <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2011\/10\/20\/treking-zakazov\/\"><u>toodete j\u00e4lgija k\u00f6\u00f6gis<\/u><\/a><\/noindex>, autoriseerimine. Need on k\u00f5ik erinevad liidesed kasutaja jaoks, m\u00f5nedel on isegi erinevad visuaalsed stiilid. K\u00f5ik see j\u00e4\u00e4b \u00fche rakenduse, \u00fche t\u00f6\u00f6tava protsessi raamidesse.&nbsp;<\/p>\n<p>Tehniliselt olid moodulid vormistatud kui Area (see idee on isegi j\u00e4\u00e4nud <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/aspnet\/core\/mvc\/controllers\/areas?view=aspnetcore-3.1\"><u>asp.net core<\/u><\/a><\/noindex>). Seal olid eraldi failid frontend'i, mudelite jaoks ning ka oma kontrollerite klassid. L\u00f5puks muutus s\u00fcsteem selliseks&#8230;<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/cac789e252e0df13718adbc694c31596.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>...niimoodi:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/6c75b61b33488edbb0427e87dee14189.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>M\u00f5ned moodulid on realiseeritud eraldi veebisaitidena (t\u00e4idetav projekt), t\u00e4ielikult erilise funktsionaalsuse t\u00f5ttu ja osaliselt osaliselt, kuna arendust\u00f6\u00f6 oli eraldatud ja rohkem keskendunud. Need on:<\/p>\n<ul>\n<li>\n<p><strong>Veebisait<\/strong> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2013\/08\/06\/new_site_dodopizza_ru\/\"><u>esimene versioon<\/u><\/a><\/noindex> veebisaidist dodopizza.ru.<\/p>\n<\/li>\n<li>\n<p><strong>Export<\/strong>: raportide eksportimine Dodo IS-ist 1C-le.&nbsp;<\/p>\n<\/li>\n<li>\n<p><strong>Isiklik<\/strong> \u2014 t\u00f6\u00f6taja isiklik kabinet. See on eraldi arendatud ning sellel on oma sisenemispunkt ja eraldi disain.<\/p>\n<\/li>\n<li>\n<p><strong>fs<\/strong> \u2014 projekt staatilise sisu majutamiseks. Hiljem sellega l\u00f5petati ja kogu staatika viidud Akamai CDN-ile.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>\u00dclej\u00e4\u00e4nud plokid asusid BackOffice rakenduses.&nbsp;<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/c48e67beca3937a2e6e2df78834fd05d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nimede selgitus:<\/p>\n<ul>\n<li>\n<p>Cashier \u2014 restorani kassas\u00fcsteem.<\/p>\n<\/li>\n<li>\n<p>ShiftManager \u2014 liideseid rollile 'Vahtkonna juht': operatiivne statistika pitsarestorani m\u00fc\u00fckidest, v\u00f5imalus lisada tooteid musta nimekirja, muuta tellimust.<\/p>\n<\/li>\n<li>\n<p>OfficeManager \u2014 liideseid rollidele 'Pitsarestorani juht' ja 'Frantsiisi andja'. Siin on koondatud funktsioonid pitsarestorani seadistamiseks, boonuskampaaniate haldamiseks, t\u00f6\u00f6tajate vastuv\u00f5tmiseks ja t\u00f6\u00f6tamiseks, aruandeks.<\/p>\n<\/li>\n<li>\n<p>PublicScreens \u2014 liideseid televisioonidele ja tahvelarvutitele, mis asuvad pitsarestoranides. Televisioonidel kuvatakse men\u00fc\u00fc, reklaamiteave, tellimuse staatus v\u00e4ljakuulutamise hetkel.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Nad kasutasid \u00fcldist teenuste kihti, \u00fcldist domeeniklasside plokki Dodo.Core, samuti \u00fchist andmebaasi. M\u00f5nikord viidi nad suunamiste kaudu \u00fcksteisega kokku. Sealhulgas p\u00e4\u00e4sesid \u00fchistele teenustele ka eraldi veebisaidid, nagu dodopizza.ru v\u00f5i personal.dodopizza.ru.<\/p>\n<p>Uute moodulite ilmnemisel p\u00fc\u00fcti maksimaalselt taaskasutada juba loodud teenuste, salvestatud protseduuride ja andmebaasi tabelite koodi.&nbsp;<\/p>\n<p>Et paremini m\u00f5ista s\u00fcsteemis loodud moodulite ulatust, on siin 2012. aasta arengukava skeem:<\/p>\n<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/57bf3e8be415ed9ae38abb976f7a5393.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Aastaks 2015 oli k\u00f5ik skeemil ja isegi rohkem tootmises.<\/p>\n<ul>\n<li>\n<p>Tellimuse vastuv\u00f5tt kasvas eraldi Kontaktikeskuseks, kus tellimust v\u00f5tab vastu operaator.<\/p>\n<\/li>\n<li>\n<p>Ilmusid avalikud ekraanid men\u00fc\u00fc ja teabe kuvamiseks, mis asusid pitsarestoranides.<\/p>\n<\/li>\n<li>\n<p>K\u00f6\u00f6gis on moodul, mis automaatselt esitab h\u00e4\u00e4ls\u00f5numi 'Uus pitsal' uue tellimuse saabumisel ja printib kauba saadetise kullerile. See lihtsustab k\u00f6\u00f6giprotsesse oluliselt, v\u00f5imaldades t\u00f6\u00f6tajatel mitte hajuda paljude lihtsate toimingute peale.<\/p>\n<\/li>\n<li>\n<p>Kohaletoimetamise plokk muutus eraldi Kohaletoimetamise Kassaks, kus tellimus anti kullerile, kes oli eelnevalt vahetusse l\u00e4inud. Tema t\u00f6\u00f6aeg arvestati palga m\u00e4\u00e4ramiseks.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Aastatel 2012 kuni 2015 tekkis rohkem kui 10 arendajat, avati 35 pitsarestorani, levis s\u00fcsteem Rumeenias ning valmistati ette kohtade avamine Ameerikas. Arendajad ei tegele enam k\u00f5igi \u00fclesannetega, vaid jagunevad meeskondadesse, millest iga\u00fcks spetsialiseerub oma s\u00fcsteemi osale.&nbsp;<\/p>\n<h3>Probleemid<\/h3>\n<p>Sealhulgas arhitektuuri t\u00f5ttu (kuid mitte ainult).<\/p>\n<h4>Kaos andmebaasis<\/h4>\n<p>\u00dcks andmebaas \u2013 see on mugav. Sellega saab saavutada \u00fchtsuse, kasutades relatsiooniliste andmebaasidega integreeritud t\u00f6\u00f6riistu. T\u00f6\u00f6 selle kallal on tuttav ja mugav, eriti kui seal on v\u00e4he tabeleid ja andmeid.<\/p>\n<p>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\u00e4lus hoitud ning loogika salvestamine keerustab arendust ja silumist. Koodi taaskasutamine on samuti keeruline.<\/p>\n<p><strong>Paljudel tabelitel puudusid sobivad indeksid<\/strong>, kuid m\u00f5nes oli vastupidi liiga palju indekseid, mis raskendas lisamist. \u00dcmber tuli teha umbes 20 tabelit \u2013 tellimuse loomise tehing v\u00f5is v\u00f5tta aega umbes 3-5 sekundit.&nbsp;<\/p>\n<p><strong>Andmed tabelites ei olnud alati k\u00f5ige sobivamas vormis<\/strong>. M\u00f5nes kohas tuli teha denormaliseerimist. \u00dcks osa regulaarselt saadud andmetest oli veerul XML-struktuuri kujul, see pikendas t\u00e4itmise aega, venitas p\u00e4ringuid ja keerustas arendust.<\/p>\n<p>\u00dcksikutele tabelitele tehti v\u00e4ga <strong>mitmekesiseid p\u00e4ringuid<\/strong>. Eriti kannatasid populaarsed tabelid, nagu eelmainitud tabel <em>orders<\/em> v\u00f5i tabel <em>pizzeria<\/em>. Neid kasutati k\u00f6\u00f6gis operatiivsete liideste ja anal\u00fc\u00fcsi esitamiseks. Sellest p\u00f6\u00f6rdus ka veebileht (<noindex><a rel=\"nofollow\" href=\"https:\/\/dodopizza.ru\/\"><u>dodopizza.ru<\/u><\/a><\/noindex>), kuhu v\u00f5is igal ajal ootamatult tulla palju p\u00e4ringuid.&nbsp;<\/p>\n<p><strong>Andmed ei olnud agaratiivsed<\/strong> ja palju arvutusi toimus jooksvalt andmebaasi vahendusel. See p\u00f5hjustas tarbetuid arvutusi ja lisakoormust.&nbsp;<\/p>\n<p>Tihti liikus kood andmebaasi siis, kui tal ei oleks seda teha tohtinud. Kusagil puudusid bulk-tegevused, kusagil oleks pidanud \u00fche p\u00e4ringu jagama mitmeks l\u00e4bi koodi, et kiirus ja usaldusv\u00e4\u00e4rsus t\u00f5usta.&nbsp;<\/p>\n<h4>Seotuse ja segaduse allikad koodis<\/h4>\n<p><strong>Moodulid, mis pidid vastutama oma \u00e4rivaldkonna eest, ei t\u00e4itnud seda \u00f5igesti.<\/strong>. M\u00f5nedel neist olid rollide funktsioonide dubleerimised. N\u00e4iteks kohalik turundaja, kes vastutas oma linna turundustegevuse eest, pidi kasutama nii \u201eAdmini\u201d liidest (aktsiate seadistamiseks) kui ka \u201eKontori Juhi\u201d liidest (aktsiate m\u00f5ju j\u00e4lgimiseks \u00e4ritegevusele). Loomulikult kasutasid m\u00f5lemad moodulid sama teenust, mis t\u00f6\u00f6tas boonuskampaaniatega.<\/p>\n<p>Teenuseid (klassi \u00fches suures monoliitses projektis) v\u00f5idi omavahel kutsuda, et oma andmeid rikastada.<\/p>\n<p>Mudelklassidega, mis andmeid salvestavad, <strong>t\u00f6\u00f6d tehti erineval viisil<\/strong>. Kusagil olid konstruktoreid, mille kaudu sai m\u00e4rkida kohustuslikud v\u00e4ljad. Kusagil tehti seda avalike omaduste kaudu. Loomulikult oli andmete saamine ja t\u00f6\u00f6tlemine andmebaasist mitmekesine.&nbsp;<\/p>\n<p><strong>Loogika oli kas kontrollerites v\u00f5i teenuseklassides.<\/strong>&nbsp;<\/p>\n<p>Need tunduvad v\u00e4ikesed probleemid, kuid need aeglustasid arendust ja v\u00e4hendasid kvaliteeti, mis viis ebastabiilsuse ja vigade tekkimiseni.&nbsp;<\/p>\n<h4>Suure arenduse keerukus<\/h4>\n<p><strong>T\u00f5sised raskused tekkisid ka arenduse endaga<\/strong>. Oli vaja teha erinevaid s\u00fcsteemi komponente, ning seda paralleelselt. Iga komponendi vajaduste mahutamine \u00fchte koodi muutus \u00fcha raskemaks. Ei olnud lihtne kokku leppida ja rahuldada k\u00f5iki komponente \u00fcheaegselt. Lisaks sellele tulid tehnoloogilistele piirangutele, eriti andmebaasi ja frontendi osas. Pidi loobuma JQueryst k\u00f5rgema taseme raamistikute poole, eriti klienditeenuste (veebisaidi) osas.<\/p>\n<p><strong>M\u00f5nes s\u00fcsteemi osas v\u00f5iksid olla kasutusel andmebaasid, mis sobivad selleks paremini<\/strong>. N\u00e4iteks hiljem oli meil pretsedent \u00fcleminek Rediselt CosmosDBle tellimiskorvi salvestamiseks.&nbsp;<\/p>\n<p>Meeskonnad ja arendajad, kes tegelesid oma valdkondadega, soovisid ilmset suuremat iseseisvust oma teenuste jaoks, nii arenduse kui ka v\u00e4ljalaskmise osas. \u00dchendusprobleemid, probleemid v\u00e4ljalaskmisel. Kui see probleem ei olnud 5 arendajatele oluline, siis 10 puhul, ja veelgi enam, plaanitud kasvu korral, muutuks k\u00f5ik t\u00f5sisemaks. Ja ees pidi olema mobiilirakenduse arendus (see algas 2017. aastal ja 2018. aastal oli) <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/498280\/\">suure languse<\/a><\/noindex>).&nbsp;<\/p>\n<p><strong>Erinevad s\u00fcsteemi osad vajavad erinevaid stabiilsuse n\u00e4itajaid.<\/strong>, kuid s\u00fcsteemi tugeva seotuse t\u00f5ttu ei suutnud me seda tagada. Uue funktsiooni v\u00e4ljat\u00f6\u00f6tamise viga adminpaneelis v\u00f5is t\u00f5epoolest m\u00f5jutada veebis tellimise protsessi, kuna kood on \u00fchine ja taaskasutatav, andmebaas ja andmed samuti \u00fchtsed.<\/p>\n<p>T\u00f5en\u00e4oliselt oleks sellise monoliitse-modulaarse arhitektuuri raames saanud v\u00e4ltida neid vigu ja probleeme: vastutuse jagamine, koodi ja andmebaasi refaktoreerimine, kihtide selge eristamine, kvaliteedi j\u00e4lgimine iga p\u00e4ev. Kuid valitud arhitektuurilised lahendused ja fookus s\u00fcsteemi funktsionaalsuse kiirel laiendamisel viisid probleemideni stabiilsuse osas.<\/p>\n<h4>Kuidas blogi Vaimu v\u00e4gi viis kassade t\u00f5usule restoranides<\/h4>\n<p>Kui pitsarestoranide (ja koormuse) kasv oleks j\u00e4tkunud samas tempos, oleks m\u00f5ne aja p\u00e4rast langused olnud nii suured, et s\u00fcsteem ei t\u00f5useks enam. H\u00e4sti illustreerib probleeme, millega hakkasime silmitsi seisma 2015. aastal, \u00fcks selline lugu.&nbsp;<\/p>\n<p>Blogis \u201c<noindex><a rel=\"nofollow\" href=\"http:\/\/sila-uma.ru\/\"><u>Vaimu v\u00e4gi<\/u><\/a><\/noindex>\u201d oli vidin, mis n\u00e4itas kogu ketti aastaseid tulude andmeid. Vidin p\u00f6\u00f6rdus avaliku API Dodo poole, mis pakub neid andmeid. Praegu on see statistika saadaval <noindex><a rel=\"nofollow\" href=\"http:\/\/dodopizzastory.com\/\"><u>http:\/\/dodopizzastory.com\/<\/u><\/a><\/noindex>. Vidin kuvati igal lehel ja tegi p\u00e4ringuid iga 20 sekundi tagant. P\u00e4ring suundus api.dodopizza.ru-le ja k\u00fcsis:<\/p>\n<ul>\n<li>\n<p>pitsarestoranide arvu kettis;<\/p>\n<\/li>\n<li>\n<p>kogu keti tulu aasta algusest;<\/p>\n<\/li>\n<li>\n<p>tulu t\u00e4na.<\/p>\n<\/li>\n<\/ul>\n<p>Tulu statistika p\u00e4ring suundus otse andmebaasi ja hakkas k\u00fcsima tellimuste andmeid, agregatsioon toimus reaalajas ja esitati summa.&nbsp;<\/p>\n<p>Sama tellimuste tabeli l\u00e4bisid ka restoranide kassad, laadides alla t\u00e4na v\u00f5etud tellimuste loendi ja lisades sellesse uusi tellimusi. Kassad tegid p\u00e4ringuid iga 5 sekundi tagant v\u00f5i siis, kui lehte uuendati.<\/p>\n<p>Skeem n\u00e4gi v\u00e4lja selline:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/9f39d8c412c64e6aa40a0d5170a8cc0e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00dcks s\u00fcgis, Fedor Ov\u010dinnikov kirjutas oma blogis pika ja populaarse artikli. Blogisse tuli v\u00e4ga palju inimesi ja nad hakkasid k\u00f5ike hoolikalt lugema. Seni, kuni iga k\u00fclastaja luges artiklit, t\u00f6\u00f6tas tulu vidin korralikult ja k\u00fcsis API-lt iga 20 sekundi j\u00e4rel.<\/p>\n<p>API kutsus salvestatud protseduuri, et arvutada k\u00f5igi selle aasta tellimuste kogusumma k\u00f5igis ketis olevates pitsakodades. Agregeerimine toimus orders tabelis, mis on v\u00e4ga populaarne. K\u00f5ik avatud restoranide kassad kasutasid seda. Kassad lakkasid t\u00f6\u00f6tamast, tellimusi ei v\u00f5etud vastu. Samuti ei v\u00f5etud tellimusi vastu veebisaidilt, need ei ilmunud j\u00e4lgimis\u00fcsteemis, vahetuse juht ei saanud neid oma liideses n\u00e4ha.&nbsp;<\/p>\n<p>See pole ainus lugu. 2015. aasta s\u00fcgisel oli igal reedel s\u00fcsteemile kriitiline koormus. Korduvalt sulgesime avaliku API, ja korra pidime isegi veebisaidi v\u00e4lja l\u00fclitama, kuna ei aidanud enam miski. Oli isegi teenuste nimekiri, millises j\u00e4rjekorras teenuseid korraliku koormuse korral v\u00e4lja l\u00fclitada.<\/p>\n<p>Sellest ajast algab meie v\u00f5itlus koormustega ja s\u00fcsteemi stabiliseerimine (2015. aasta s\u00fcgisest kuni 2018. aasta s\u00fcgiseni). Just siis juhtus \"<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/498280\/\"><u>Suure kummardus<\/u><\/a><\/noindex>\". Edasi juhtus m\u00f5nikord vaid eba\u00f5nnestumisi, m\u00f5ned olid piisavalt tundlikud, kuid \u00fcldiselt on praegu ebastabiilsuse perioodi v\u00f5imalik pidada m\u00f6\u00f6dunuks.<\/p>\n<h4>\u00c4ri kiire kasv<\/h4>\n<p>Miks ei saanud \"k\u00f5ike kohe h\u00e4sti teha\"? Piisab, kui vaadata j\u00e4rgmisi graafikuid.<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/a6dd39909ecc553b2ff4a8fc370d5846.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Samuti avati 2014-2015 Rumeenias ja valmistuti avama Ameerikas.<\/p>\n<p>Ketas kasvas v\u00e4ga kiiresti, uusi riike avati, uusi pitsakohta vorme ilmus, n\u00e4iteks avati pitsakoda toiduturgudel. K\u00f5ik see n\u00f5udis erilist t\u00e4helepanu Dodo IS funktsioonide laiendamisele. Ilma nende funktsioonideta, k\u00f6\u00f6gis j\u00e4lgimist, toiduainete ja kadude arvestuseta s\u00fcsteemis, tellimuste esitamine toiduturu saalis, ei arutaks me praegu \u201e\u00f5ige\u201c arhitektuuri ja \u201e\u00f5ige\u201c l\u00e4henemise \u00fcle arenduses.<\/p>\n<p>Samuti oli 2014. aasta kriis takistuseks arhitektuuri \u00f5igeaegsel l\u00e4bivaatamisel ja tehniliste probleemide t\u00e4helepanu juhtimisel. Sellised asjad \u00f5\u00f5nestavad meeskondade kasvuv\u00f5imet, eriti noore \u00e4ri, nagu Dodo Pizza.<\/p>\n<h3>Kiired lahendused, mis aitasid<\/h3>\n<p>Probleemid n\u00f5udsid lahendust. \u00dcldiselt v\u00f5ib lahendused jagada kahte r\u00fchma:<\/p>\n<ul>\n<li>\n<p>Kiired, mis kustutavad tule ja annavad natuke turvavarustust ning kasu meie ajale muudatuste tegemiseks.<\/p>\n<\/li>\n<li>\n<p>S\u00fcsteemsed ja seet\u00f5ttu pikad. Mitmete moodulite \u00fcmberkujundamine, monoliitsete arhitektuuride jagamine eraldi teenusteks (enamik neist on pigem makroteenused kui mikroteenused ja sellest on juba <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XeNrWkRmVWw\"><u>Andrei Morevsky raport<\/u><\/a><\/noindex>).&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Kiirete muudatuste kuiv loend on j\u00e4rgmine:<\/p>\n<h4>Mastaabi suurendamise meistribaas<\/h4>\n<p>Muidugi on esimene samm koormuste vastu v\u00f5itlemisel serveri v\u00f5imsuse suurendamine. Seda tehti meistribaasi ja veebiserverite jaoks. Kahjuks on see v\u00f5imalik ainult teatud piirini, p\u00e4rast mida muutub see liiga kulukaks.<\/p>\n<p>Alates 2014. aastast kolisime Azure'i, sellest r\u00e4\u00e4kisime ka siis artiklis \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/microsoft\/blog\/277821\/\">Kuidas Dodo Pizza toimetab pitsat Microsoft Azure'i pilve abil<\/a><\/noindex>\u201d. Kuid p\u00e4rast serverite suurendamise seeriat j\u00f5es\u00fcsteemi puhul j\u00f5udsime kuludesse.&nbsp;<\/p>\n<h4>Lugemise replikad<\/h4>\n<p>Replikad loodi kahte t\u00fc\u00fcpi:<\/p>\n<p><strong>ReadReplica<\/strong> <strong>p\u00e4ringute jaoks teabelehtedele<\/strong>. See on m\u00f5eldud lugemiseks, mis puudutab teabeallikaid, nagu linnad, t\u00e4navad, pitsakohad, tooted (aeglaselt muutuva domeeniga), ning nendes liidestes, kus on lubatud v\u00e4ike viivitus. Neid replikasid oli 2 ja me tagasime nende k\u00e4ttesaadavuse samamoodi nagu meistrit.<\/p>\n<p><strong>ReadReplica raportite p\u00e4ringute jaoks<\/strong>. Sellel andmebaasil oli madalam k\u00e4ttesaadavus, kuid see sisaldas k\u00f5iki aruandeid. Olgu, neil on rasked p\u00e4ringud tohutute andmete \u00fclekalkuluste jaoks, kuid need ei m\u00f5juta p\u00f5hivaramu ja operatiivseid liideseid.&nbsp;<\/p>\n<h4>Kaasid koodis<\/h4>\n<p>Koodis ei olnud kuhugi kaasu (\u00fcldse). See p\u00f5hjustas t\u00e4iendavaid, mitte alati vajalikke p\u00e4ringuid koormatud andmebaasi. K\u00e4esolevalt olid kaasu nii m\u00e4lus kui ka v\u00e4likausiteenuses, see oli Redis. K\u00f5ik aegunud seadmed olid ajaliselt, seaded m\u00e4\u00e4rati koodis.<\/p>\n<h4>Mitu serverit tahkete s\u00fcsteemide jaoks<\/h4>\n<p>Rakenduse tahke s\u00fcsteemi l\u00e4ks ka mastaapimiseks, et taluda suurenenud koormusi. \u00dcks IIS-server tuli muutuda klastriks. Me viisime <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/aspnet\/core\/fundamentals\/app-state?view=aspnetcore-3.1\"><u>rakenduste seansi<\/u><\/a><\/noindex> m\u00e4lust \u00fcle RedisCache'i, mis v\u00f5imaldas luua mitu serverit, mis seisavad tavalise koormuse tasakaalustaja taga, kasutades round robin'i. Alguses kasutati sama Redis, mis oli kaausideks, hiljem jagati see mitmeks.&nbsp;<\/p>\n<p>Kokkuv\u00f5ttes muutus arhitektuur keerulisemaks\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: varajane monoliit\" src=\"\/wp-content\/uploads\/2020\/10\/70a3e8d5578469239c08b4759ab32264.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u2026kuid osa pingest \u00f5nnestus leevendada.<\/p>\n<p>Ja siis tuli \u00fcle vaadata koormatud komponente, millega me ka tegelesime. Sellest r\u00e4\u00e4gime j\u00e4rgmises osas.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/521614\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u043b\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u043c \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Dodo IS \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b \u2014 \u0432 2011 \u0433\u043e\u0434\u0443. \u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0435\u0436\u0430\u043b\u0430 \u0438\u0434\u0435\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u0438 \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043f\u0440\u0438\u0447\u0435\u043c \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438, \u0447\u0442\u043e \u0435\u0449\u0435 \u0442\u043e\u0433\u0434\u0430 \u0432 2011 \u0433\u043e\u0434\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0441\u043a\u0435\u043f\u0442\u0438\u0446\u0438\u0437\u043c\u0430. \u041d\u043e \u0432\u043e\u0442 \u0443\u0436\u0435 9 \u043b\u0435\u0442 \u043c\u044b \u0438\u0434\u0435\u043c \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95805,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u043b\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u043c \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443.\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Dodo IS \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b \u2014 \u0432 2011 \u0433\u043e\u0434\u0443.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Dodo IS: \u0440\u0430\u043d\u043d\u0438\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u043b\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u043c \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443.\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Dodo IS \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b \u2014 \u0432 2011 \u0433\u043e\u0434\u0443.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-03T11:42:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-03T11:42:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Dodo IS arhitektuuri ajalugu: varajane monoliit | ProHoster","description":"V\u00f5i iga \u00f5nnetu ettev\u00f5te monoliidiga on \u00f5nnetu omamoodi. Dodo IS s\u00fcsteemi arendamine algas koos Dodo Pizza \u00e4ridega \u2014 2011. aastal.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Dodo IS: \u0440\u0430\u043d\u043d\u0438\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442 | ProHoster","og:description":"\u0418\u043b\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u043c \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443.\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Dodo IS \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b \u2014 \u0432 2011 \u0433\u043e\u0434\u0443.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-03T11:42:27+00:00","article:modified_time":"2020-10-03T11:42:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95804","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:57:47","updated":"2022-09-28 00:34:07","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=95804"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95804\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/95805"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=95804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=95804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=95804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}