{"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>Iga eba\u00f5nnelik ettev\u00f5te on eba\u00f5nnelik omal moel.<\/p>\n<p>Dodo IS s\u00fcsteemi arendamine algas kohe, kui Dodo Pizza \u00e4ri \u2014 2011. aastal. Aluseks oli idee t\u00e4iesti ja absoluutselt digitaliseerida \u00e4riprotsessid, <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\u00fcdseks, 9 aastat hiljem, j\u00e4rgime seda teed \u2014 oma arendusega, mis algas monoliidist.<\/p>\n<p>See artikkel on \"vastus\" k\u00fcsimusele \"Miks kirjutada arhitektuur \u00fcmber ja teha nii suured ja pikaajalised muudatused?\" eelmisele artiklile <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/506136\/\"><u>\"Dodo IS arhitektuuri ajalugu: back-office'i tee\".<\/u><\/a><\/noindex>Alustan sellega, kuidas Dodo IS arendus algas, milline oli algne arhitektuur, kuidas ilmusid uued moodulid ja milliste probleemide t\u00f5ttu tuli teha ulatuslikke muudatusi.<\/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 seeria \u201eMis on Dodo IS?\u201d r\u00e4\u00e4gib:<\/strong><\/p>\n<\/blockquote>\n<ol>\n<li>\n<p>Varane monoliit Dodo IS-is (2011-2015). (Oled siin)<\/p>\n<\/li>\n<li>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/506136\/\">Tagavarahalduri tee: eraldi andmebaasid ja buss.<\/a><\/noindex>.<\/p>\n<\/li>\n<li>\n<p>Kliendiosakonna tee: fassaad andmebaasi kohal (2016-2017). (T\u00f6\u00f6s\u2026)<\/p>\n<\/li>\n<li>\n<p>T\u00f5eliste mikroteenuste ajalugu. (2018-2019). (T\u00f6\u00f6s\u2026)<\/p>\n<\/li>\n<li>\n<p>Monoliidi l\u00f5plik jagamine ja arhitektuuri stabiliseerimine. (T\u00f6\u00f6s\u2026)<\/p>\n<\/li>\n<\/ol>\n<h3>Algne arhitektuur<\/h3>\n<p>2011. aastal n\u00e4gi Dodo IS arhitektuur v\u00e4lja selline:<\/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 juht;<\/p>\n<\/li>\n<li>\n<p>v\u00f5tab telefoni teel tellimuse;<\/p>\n<\/li>\n<li>\n<p>samal ajal sisestatakse see tellimuste vastuv\u00f5tu liideses: arvesse v\u00f5etakse kliendi teavet, tellimuse \u00fcksikasju 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 Kojuvedu Pizza Restoran infotehnoloogia s\u00fcsteem<\/a><\/noindex><\/p>\n<p>Esimese tellimuste vastuv\u00f5tu mooduli arendamiseks olid ressursid piiratud. Pidi kiiresti palju tegema ja v\u00e4ikese meeskonnaga. V\u00e4ike meeskond \u2014 2 arendajat, kes asetasid kogu tulevase s\u00fcsteemi aluse.<\/p>\n<p>Nende esimene lahendus m\u00e4\u00e4ras tehnoloogia virna edasise saatuse:<\/p>\n<ul>\n<li>\n<p>Backend ASP.NET MVC-s, keel C#. Arendajad olid .NET-i spetsialistid, see virn oli neile tuttav ja meeldiv. <\/p>\n<\/li>\n<li>\n<p>Frontend Bootstrap'i ja JQuery peal: kasutajaliidesed omatehtud stiilide ja skriptidega.&nbsp;<\/p>\n<\/li>\n<li>\n<p>Andmebaas MySQL: ilma litsentsikuludeta, lihtne kasutada.<\/p>\n<\/li>\n<li>\n<p>Serverid Windows Serveril, kuna .NET-i sai tol ajal kasutada ainult Windowsi all (Mono arutelu j\u00e4tame v\u00e4lja).<\/p>\n<\/li>\n<\/ul>\n<p>F\u00fc\u00fcsiliselt v\u00e4ljendus see \"dedikeeritud serveris hostimisettev\u00f5ttes\".&nbsp;<\/p>\n<h4>Tellimuste vastuv\u00f5tu rakenduse arhitektuur<\/h4>\n<p>Siis r\u00e4\u00e4giti juba mikroteenustest, samas kui SOA-d on suurtel projektidel kasutatud umbes 5 aastat, n\u00e4iteks WCF tuli v\u00e4lja 2006. aastal. Kuid siis valiti usaldusv\u00e4\u00e4rne ja t\u00f5estatud 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 on Razor, mis genereerib serveri poolt v\u00e4rske HTML-lehe p\u00e4ringu alusel forma v\u00f5i kliendi poolelt. Kliendis kasutavad juba CSS ja JS-skriptid teabe kuvamiseks ning vajadusel teevad nad AJAX-p\u00e4ringuid l\u00e4bi JQuery.<\/p>\n<p>P\u00e4ringud j\u00f5uavad serveris klassidesse *Controller, kus meetodis toimub t\u00f6\u00f6tlemine ja l\u00f5pp-HTML-lehe genereerimine. Kontrollereid kasutatakse loogikatasemele, mida nimetatakse *Services. Iga teenus vastas m\u00f5nele \u00e4ri aspektile:<\/p>\n<ul>\n<li>\n<p>N\u00e4iteks DepartmentStructureService pakkus teavet pitsakodade ja osakondade kohta. Osakond on grupp pitsakodasid, mida juhib \u00fcks frantsiisiomanik.<\/p>\n<\/li>\n<li>\n<p>ReceivingOrdersService v\u00f5ttis vastu ja arvestas tellimuste sisu.<\/p>\n<\/li>\n<li>\n<p>SmsService saatis SMS-e, kutsudes sms-saatmise API-teenuseid.<\/p>\n<\/li>\n<\/ul>\n<p>Teenused t\u00f6\u00f6tlesid andmeid andmebaasist, hoidsid \u00e4riloogikat. Igas teenuses oli \u00fcks v\u00f5i mitu *Repository vastava nimega. Neis olid juba p\u00e4ringud salvestatud protseduuridele andmebaasis ja maappeeringu kiht. Salvestatud protseduurides oli \u00e4riloogika, eriti palju neist, mis v\u00e4ljastasid aruandeandmeid. ORM-i ei kasutatud, k\u00f5ik usaldasid k\u00e4sitsi kirjutatud SQL-i.&nbsp;<\/p>\n<p>Veel oli olemas domeenimudeli ja \u00fcldiste abiklasside kiht, n\u00e4iteks klass Order, mis hoidis tellimust. Samuti, selles kihis, oli abi teksti kuvamise muutmiseks valitud valuuta j\u00e4rgi.<\/p>\n<p>Kogu seda saab esitada sellise 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>Vaatame lihtsustatud algset teed sellise tellimuse loomiseks.<\/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, \u00fcleval oli telefoninumber ja \u00fcleskutse \u201eSoovid pitsat \u2014 helista numbrile ja telli\u201d. Tellimuse jaoks peame rakendama lihtsa voolu:&nbsp;<\/p>\n<ul>\n<li>\n<p>Klient siseneb staatilisele veebisaidile hindadega, valib tooted ja helistab numbrile, mis on saidil m\u00e4rgitud.<\/p>\n<\/li>\n<li>\n<p>Klient nimetab tooted, mida ta soovib tellimusele lisada.<\/p>\n<\/li>\n<li>\n<p>Nimetab 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. Sisselogitud operaator aktsepteerib samal ajal vaid \u00fchte tellimust. Seet\u00f5ttu v\u00f5ib eeln\u00f5ukorv olla tema sessioonis (kasutaja seanss salvestatakse m\u00e4llu). Seal on objekt Cart, mis sisaldab tooteid ja klientide teavet.<\/p>\n<p>Klient nimetab tootega, operaator kl\u00f5psab <code>+<\/code> toote k\u00f5rval, ja serverile saadetakse p\u00e4ring. Toote kohta t\u00f5mmatakse andmed andmebaasist ja lisatakse tooteinfo 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, siit ei ole tingimata vajalik toodet andmebaasist v\u00e4lja t\u00f5mmata, vaid seda v\u00f5ib edastada frontendist. Kuid selguse huvides n\u00e4itasin just andmebaasist saadud teed.&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 \u201eLoo tellimus\u201d vajutamisel:<\/p>\n<ul>\n<li>\n<p>Saadame p\u00e4ringu OrderController.SaveOrder().<\/p>\n<\/li>\n<li>\n<p>Saame Cart sessioonist, seal on tooted soovitud koguses.<\/p>\n<\/li>\n<li>\n<p>T\u00e4iendame Cart'i kliendiinfoga ja edastame ReceiveOrderService klassi AddOrder meetodisse, kus see salvestatakse andmebaasi.&nbsp;<\/p>\n<\/li>\n<li>\n<p>Andmebaasis on tabelid tellimuse, tellimuse koostisosade ja kliendi kohta ning need k\u00f5ik on omavahel seotud.<\/p>\n<\/li>\n<li>\n<p>Tellimuse kuvamise liides k\u00e4ib ja t\u00f5mbab viimased tellimused v\u00e4lja ning kuvab need.<\/p>\n<\/li>\n<\/ul>\n<h4>Uued moodulid<\/h4>\n<p>\u041f\u0440\u0438\u0435\u043c \u0437\u0430\u043a\u0430\u0437\u0430 \u0431\u044b\u043b \u0432\u0430\u0436\u0435\u043d \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c. \u041d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u043e \u043f\u0440\u043e\u0434\u0430\u0436\u0435 \u043f\u0438\u0446\u0446\u044b, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043f\u0440\u0438\u0435\u043c\u0430 \u0437\u0430\u043a\u0430\u0437\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u0436\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c \u2014&nbsp;\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441 2012 \u043f\u043e 2015 \u0433\u043e\u0434\u0430. \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c <strong>mooduliteks<\/strong>, vastandina teenuse v\u00f5i toote m\u00f5istele.&nbsp;<\/p>\n<p>Moodul on funktsioonide kogum, mis on \u00fchendatud mingi \u00fchise \u00e4rieesm\u00e4rgiga. Samal ajal asuvad nad f\u00fc\u00fcsiliselt \u00fches ja samas rakenduses.<\/p>\n<p>Mooduleid v\u00f5ib nimetada s\u00fcsteemi blokiks. N\u00e4iteks on olemas aruande moodul, haldust\u00e4idise liidese <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2011\/10\/20\/treking-zakazov\/\"><u>toiduainete j\u00e4lgija k\u00f6\u00f6gis<\/u><\/a><\/noindex>, autoriseerimine. Need k\u00f5ik on erinevad kasutajaliidesed, m\u00f5nedel on isegi erinevad visuaalsed stiilid. Samas on need k\u00f5ik \u00fche rakenduse ja \u00fche t\u00f6\u00f6protsessi raames.&nbsp;<\/p>\n<p>Tehniliselt kujundati moodulid kui Area (selline idee on isegi s\u00e4ilinud <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>). \u0422\u0430\u043c \u0431\u044b\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430, \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0432\u043e\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0438\u0437 \u0442\u0430\u043a\u043e\u0439&#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>\u2026selliseks:<\/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 ellu viidud eraldi saitidega (executable project), kuna need t\u00e4idavad v\u00e4ga erilisi funktsioone ja osaliselt seet\u00f5ttu, et nende arendamine oli paar korda eraldi, enamasti fookustatud. Need on:<\/p>\n<ul>\n<li>\n<p><strong>Veebileht.<\/strong> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2013\/08\/06\/new_site_dodopizza_ru\/\"><u>esimene versioon<\/u><\/a><\/noindex> dodobizza.ru saidist.<\/p>\n<\/li>\n<li>\n<p><strong>Export<\/strong>: raportite eksportimine Dodo IS-st 1C-le.&nbsp;<\/p>\n<\/li>\n<li>\n<p><strong>Isiklik<\/strong> \u2014 t\u00f6\u00f6taja isiklik konto. See on arendatud eraldi ning omab oma sisenemispunkti ja eraldi disaini.<\/p>\n<\/li>\n<li>\n<p><strong>fs<\/strong> \u2014 projekt staatika hostimiseks. Hiljem loobusime sellest, viies kogu staatika CDN Akamai-le.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>\u00dclej\u00e4\u00e4nud plokid olid rakenduses BackOffice.&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>Selgitus nimede kohta:<\/p>\n<ul>\n<li>\n<p>Cashier \u2014 restorani kassas\u00fcsteem.<\/p>\n<\/li>\n<li>\n<p>ShiftManager \u2014 liideseid rollile \"Vahtkonnamanager\": operatiivne statistika pitsarestorani m\u00fc\u00fckidest, v\u00f5imalus tooteid musta nimekirja lisada, tellimuse muutmine.<\/p>\n<\/li>\n<li>\n<p>OfficeManager \u2014 liideseid rollile \"Pitsarestorani juht\" ja \"Frantsiisi valdaja\". Siin on koondatud funktsioonid pitsarestorani seadistamiseks, selle lojaalsusprogrammide korraldamiseks, t\u00f6\u00f6tajate vastuv\u00f5tmiseks ja nendega t\u00f6\u00f6tamiseks, aruannete haldamiseks.<\/p>\n<\/li>\n<li>\n<p>PublicScreens \u2014 liideseid televiisoritele ja tahvelarvutitele, mis on paigaldatud pitsarestoranides. Televisioonidel kuvatakse men\u00fc\u00fc, reklaamteave ja tellimuse staatus v\u00e4ljastamisel.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Nad kasutasid \u00fchist teenuste kihti, \u00fchte domeenide klasside plokki Dodo.Core ning ka \u00fchist andmebaasi. M\u00f5nikord v\u00f5isid nad vahetada teavet \u00fcksteisega, sealhulgas kasutasid eraldi saidid, nagu dodopizza.ru v\u00f5i personal.dodopizza.ru, ka \u00fchiseid teenuseid.<\/p>\n<p>Uute moodulite ilmumise korral p\u00fc\u00fcdsime maksimaalselt taaskasutada juba loodud teenuste koodi, salvestatud protseduure ja andmebaasi tabeleid.&nbsp;<\/p>\n<p>Moodulite ulatuse paremaks m\u00f5istmiseks on siin 2012. aasta plaanide arenguskeem:<\/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>Tellimise vastuv\u00f5tt on kasvanud eraldi Kontaktikeskuse plokiks, kus tellimust v\u00f5tab vastu operaator.<\/p>\n<\/li>\n<li>\n<p>Ilmusid avalikud ekraanid men\u00fc\u00fc ja teabega, mis ripuvad pitsakohvikutes.<\/p>\n<\/li>\n<li>\n<p>K\u00f6\u00f6gis on moodul, mis automaatselt edastab h\u00e4\u00e4ls\u00f5numi 'Uus pitsa', kui uus tellimus saabub, ning printib saatjale saatekirja. See lihtsustab oluliselt k\u00f6\u00f6gi protsesse, v\u00f5imaldades t\u00f6\u00f6tajatel mitte h\u00e4irida end lihtsate toimingutega.<\/p>\n<\/li>\n<li>\n<p>Transportiblokk muutus eraldi transportkassaks, kus tellimus \u00fcle anti kullerile, kes eelnevalt vahetusse asus. Tema t\u00f6\u00f6aeg arvestati palga m\u00e4\u00e4ramiseks.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Ajavahemikul 2012\u20132015 tuli juurde \u00fcle 10 arendaja, avati 35 pitsakohvikut, s\u00fcsteem laiendati Rumeeniasse ja valmistati ette avamiseks USA-s. Arendajad ei tegelenud enam k\u00f5igi \u00fclesannetega, vaid jagunesid meeskondadesse, kus iga\u00fcks spetsialiseerus oma s\u00fcsteemi osale.&nbsp;<\/p>\n<h3>Probleemid<\/h3>\n<p>Sealhulgas arhitektuuri t\u00f5ttu (aga mitte ainult).<\/p>\n<h4>Kaos andmebaasis<\/h4>\n<p>\u00dcks andmebaas on mugav. Seal saab saavutada \u00fchtsust, kasutades relatsiooniliste andmebaaside sisse ehitatud vahendeid. T\u00f6\u00f6 sellega on tuttav ja mugav, eriti kui andmebaasis on v\u00e4he tabeleid ja andmeid.<\/p>\n<p>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\u00f6\u00f6tamisel erilisi eeliseid. Need ei salvestu andmebaasi vahem\u00e4llu ja loogika hoidmine neis keerustab arendust ja t\u00f5rkeotsingut. Koodi taaskasutamine on samuti keeruline.<\/p>\n<p><strong>Paljudes tabelites ei olnud sobivaid indekseid.<\/strong>, kus oli liiga palju indekseid, mis raskendas lisamist. Oli vaja modifitseerida umbes 20 tabelit \u2014 tellimuse loomise tehing v\u00f5is kesta umbes 3-5 sekundit.&nbsp;<\/p>\n<p><strong>Andmed tabelites ei olnud alati k\u00f5ige sobivamas vormis.<\/strong>. Kusagil oli vaja teha denormaliseerimist. Osa regulaarselt saadud andmeid oli veergudes XML-struktuurina, mis pikendas t\u00e4itmise aega, pidas pikemaid p\u00e4ringuid ja raskendas arendust.<\/p>\n<p>\u00dcksikutele tabelitele tehti v\u00e4ga <strong>ebahomoogeenseid 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 v\u00e4ljundiks, anal\u00fc\u00fctikaks. Veel p\u00f6\u00f6rdus nende poole veebisait (<noindex><a rel=\"nofollow\" href=\"https:\/\/dodopizza.ru\/\"><u>dodopizza.ru<\/u><\/a><\/noindex>), kuhu v\u00f5is igal ajal peale tulla ootamatult palju p\u00e4ringuid.&nbsp;<\/p>\n<p><strong>Andmed ei olnud aggregeeritud<\/strong> ja palju arvutusi toimus lennu peal andmebaasi vahenditega. See tekitas liigseid arvutusi ja lisakoormust.&nbsp;<\/p>\n<p>Kood k\u00e4is tihti andmebaasis siis, kui tal ei oleks olnud seda teha. Kusagil puudusid bulk-operatsioonid, kusagil tuli \u00fcks p\u00e4ring jagada mitmeks, et kiirus ja usaldusv\u00e4\u00e4rsus t\u00f5useksid.&nbsp;<\/p>\n<h4>Seotust ja segadust koodis<\/h4>\n<p><strong>Modulid, mis pidanuks vastutama oma \u00e4riosa eest, ei t\u00e4itnud oma \u00fclesandeid \u00f5igesti<\/strong>. M\u00f5ned neist dubleerivad funktsioone rollide osas. N\u00e4iteks kohalik turundaja, kes vastutab oma linna v\u00f5rgustiku turundustegevuse eest, pidi kasutama nii \"Admini\" liidest (kampaaniate seadistamiseks) kui ka \"Kontori Juhi\" liidest (kampaaniate m\u00f5ju j\u00e4lgimiseks \u00e4ri jaoks). Loomulikult kasutasid m\u00f5lemad moodulid seesama teenus, mis t\u00f6\u00f6tas boonuste kampaaniatega.<\/p>\n<p>Teenused (klassid \u00fche monoliitse suurprojekti raames) v\u00f5isid \u00fcksteist kutsuda, et rikastada oma andmeid.<\/p>\n<p>Klassidega mudelid, mis andmeid salvestavad, <strong>koodis t\u00f6\u00f6tamine k\u00e4is erinevalt<\/strong>. Kusagil olid konstruktorid, mille kaudu sai m\u00e4\u00e4rata n\u00f5utavad v\u00e4ljad. M\u00f5nes kohas 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 v\u00f5ivad tunduda ebaolulised probleemid, kuid need takistasid arendust oluliselt ja halvasid kvaliteeti, mis t\u00f5i kaasa ebastabiilsuse ja vead.&nbsp;<\/p>\n<h4>Suurte arenduste keerukus<\/h4>\n<p><strong>Raskused tekkisid ka arenduse enda juures<\/strong>. Oli vaja luua erinevaid s\u00fcsteemiblokke ja veel parelleelselt. Iga komponendi vajaduste mahutamine \u00fchte koodi muutus \u00fcha keerulisemaks. Ei olnud lihtsalt kokku leppida ja k\u00f5igile komponentidele \u00fcheaegselt meeldida. Sellele lisandusid tehnoloogilised piirangud, eriti andmebaasi ja frontendi osas. Oli vaja loobuda JQuery'st k\u00f5rgematasemelistest raamistikest, eriti kliendiserviidest (veebileht).<\/p>\n<p><strong>M\u00f5nes s\u00fcsteemi osas oleks pidanud kasutama andmebaase, mis sobivad sellele paremini<\/strong>. N\u00e4iteks hiljem oli meil pretsedent, kus \u00fcleminekul Rediselt CosmosDB'le tellimuse korvi hoidmiseks.&nbsp;<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u0432\u043e\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e \u044f\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043a\u0430\u043a \u0432 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0430\u043a \u0438 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0432\u044b\u043a\u0430\u0442\u043a\u0438. \u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u043f\u0440\u0438 \u043c\u0435\u0440\u0436\u0435, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u0438 \u0440\u0435\u043b\u0438\u0437\u0430\u0445. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f 5 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430, \u0442\u043e \u043f\u0440\u0438 10, \u0430 \u0443\u0436 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435&nbsp; \u043f\u0440\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0440\u043e\u0441\u0442\u0435, \u0432\u0441\u0435 \u0441\u0442\u0430\u043b\u043e \u0431\u044b \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0435\u0435. \u0410 \u0430 \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043e\u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0443\u043b\u0430 \u0432 2017, \u0430 \u0432 2018 \u0431\u044b\u043b\u043e <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/498280\/\">suur langus<\/a><\/noindex>).&nbsp;<\/p>\n<p><strong>S\u00fcsteemi erinevad osad n\u00f5udsid erinevaid stabiilsuse n\u00e4itajaid<\/strong>, kuid s\u00fcsteemi tugeva seotuse t\u00f5ttu ei suutnud me seda tagada. Uue funktsiooni arendamise viga administraatori paneelis v\u00f5is t\u00e4iesti halba m\u00f5ju avaldada veebisaidi tellimuste vastuv\u00f5tmisel, kuna kood on \u00fchine ja taaskasutatav, andmebaas ja andmed on samuti \u00fchtsed.<\/p>\n<p>T\u00f5en\u00e4oliselt oleks ka sellise monoliitne-moodulaarse arhitektuuri raames neid vigu ja probleeme v\u00e4ltida: vastutuse jagamine, nii koodi kui ka andmebaasi refaktooring, kihtide selge eraldamine, iga p\u00e4ev kvaliteedi j\u00e4lgimine. Kuid valitud arhitektuuriotsused ja keskendumine s\u00fcsteemi funktsionaalsuse kiirele laienemisele viisid stabiilsuse probleemideni.<\/p>\n<h4>Kuidas blogi Silla j\u00f5ud pani restoranidesse kassad<\/h4>\n<p>Kui pitsakett (ja koormus) oleks kasvanud sama tempoga, siis m\u00f5ne aja p\u00e4rast oleks kukkumised olnud sellised, et s\u00fcsteem ei t\u00f5usenud enam \u00fcles. Hea illustratsioon problematikast, millega me 2015. aastal alguse saime, on selline lugu.&nbsp;<\/p>\n<p>Blogis \u201e<noindex><a rel=\"nofollow\" href=\"http:\/\/sila-uma.ru\/\"><u>Silla j\u00f5ud<\/u><\/a><\/noindex>\u201c oli vidin, mis n\u00e4itas kogu v\u00f5rgu aastak\u00e4ibe andmeid. Vidin p\u00f6\u00f6rdus avaliku API poole, mille Dodo need andmed pakub. N\u00fc\u00fcd 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 taotlusi igal 20 sekundi j\u00e4rel. Taotlus l\u00e4ks aadressile api.dodopizza.ru ja k\u00fcsis:<\/p>\n<ul>\n<li>\n<p>pitsakettide arv v\u00f5rkus;<\/p>\n<\/li>\n<li>\n<p>kogu v\u00f5rgu k\u00e4ive alates aastast;<\/p>\n<\/li>\n<li>\n<p>k\u00e4ive t\u00e4na.<\/p>\n<\/li>\n<\/ul>\n<p>Tuludestatistikate p\u00e4ring l\u00e4ks otse andmebaasi, alustades tellimuste andmete kogumist reaalajas ja arvutades kokku.&nbsp;<\/p>\n<p>Sama tellimuste tabelisse said ka restoranide kassad, mis laadisid \u00fcles t\u00e4naseks p\u00e4evaks vastu v\u00f5etud tellimuste loendi ning sinna lisandusid uued tellimused. Kassad tegid p\u00e4ringuid iga 5 sekundi tagant v\u00f5i lehe v\u00e4rskendamisel.<\/p>\n<p>Schema 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, F\u00ebdor Ov\u010dinnikov kirjutas oma blogisse pika ja populaarse artikli. Blogisse tuli palju inimesi, kes hakkasid seda t\u00e4helepanelikult lugema. Kui iga k\u00fclaline artiklit luges, t\u00f6\u00f6tas tulude vidin korralikult ja k\u00fcsis API-d iga 20 sekundi tagant.<\/p>\n<p>API kutsus v\u00e4lja salvestatud protseduuri, et arvutada v\u00e4lja k\u00f5ikide tellimuste summa aasta algusest k\u00f5igis ketipitsakohvikutes. Agregatsioon toimus tellimuste tabelis, mis oli v\u00e4ga populaarne. Sellesse laadisid k\u00f5ik avatud restoranide kassad selle aja jooksul. Kassad lakkasid vastamast, tellimusi ei v\u00f5etud vastu. Samuti ei v\u00f5etud tellimusi vastu veebilehelt, need ei ilmunud j\u00e4lgijasse, vahetuse juhataja ei n\u00e4inud neid oma liideses.&nbsp;<\/p>\n<p>See ei ole ainus lugu. 2015. aasta s\u00fcgiseks oli iga reede s\u00fcsteemile kriitiline koormus. Mitmel korral pidime avaliku API v\u00e4lja l\u00fclitama, ja korra pidime isegi saidi v\u00e4lja l\u00fclitama, sest mitte miski ei aidanud. Oli isegi teenuste nimekiri, kus oli kirjas v\u00e4ljal\u00fclitamise kord t\u00f5siste koormuste korral.<\/p>\n<p>Sellest ajast alates algas meie v\u00f5itlus koormustega ja s\u00fcsteemi stabiliseerimise nimel (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 langus<\/u><\/a><\/noindex>\". Edasi liikudes toimusid m\u00f5nikord veel t\u00f5rked, m\u00f5ned olid \u00fcsna tunded, kuid \u00fcldiselt saab n\u00fc\u00fcd seda ebastabiilsuse perioodi pidada m\u00f6\u00f6dundiks.<\/p>\n<h4>\u00c4rimahtude tormiline 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 ning valmistuti avamiseks Ameerika \u00dchendriikides.<\/p>\n<p>V\u00f5rk kasvas v\u00e4ga kiiresti, avanesid uued riigid, ilmusid uued pitsarestoranide vormid, n\u00e4iteks avati pitsarestoran toidut\u00e4naval. K\u00f5ik see n\u00f5udis Dodo IS funktsionaalsuse laienemisele m\u00e4rkimisv\u00e4\u00e4rset t\u00e4helepanu. Ilma nende funktsioonideta, ilma k\u00f6\u00f6gis j\u00e4lgimiseta, toidu ja kahjude arvestamiseta s\u00fcsteemis, tellimuse esituse kuvamiseta toidut\u00e4naviga, ei arutaks me n\u00fc\u00fcd \"\u00f5ige\" arhitektuuri ja \"\u00f5ige\" l\u00e4henemise \u00fcle arendusele.<\/p>\n<p>Teiseks takistuseks arhitektuuri \u00f5igeaegsele \u00fclevaatamisele ja tehnilistele probleemidele oli 2014. aasta kriis. Sellised asjad m\u00f5jutavad valusalt tiimide kasvuv\u00f5imalusi, eriti noore \u00e4ri puhul, nagu Dodo Pizza.<\/p>\n<h3>Kiired lahendused, mis aitasid<\/h3>\n<p>Probleemid n\u00f5udsid lahendust. \u00dcldiselt v\u00f5ib lahendused jagada kaheks grupiks:<\/p>\n<ul>\n<li>\n<p>Kiired, mis kustutavad tule ja annavad meile v\u00e4ikese vastupidavuse ning v\u00f5idavad aega muudatuste tegemiseks.<\/p>\n<\/li>\n<li>\n<p>S\u00fcsteemsed ja seet\u00f5ttu pikaajalised. Mitmete moodulite \u00fcmberkujundamine, monoliitse arhitektuuri jagamine eraldi teenusteks (enamiku neist ei ole mikro, vaid pigem makroteenused ja selle kohta on <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XeNrWkRmVWw\"><u>Andrei Morevski ettekanne<\/u><\/a><\/noindex>).&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Kiirete muudatuste kuiv nimekiri on j\u00e4rgmine:<\/p>\n<h4>Mastaabi suurendamine meistribaasi jaoks<\/h4>\n<p>Muidugi, esimesena suurendatakse serveri v\u00f5imsust, et v\u00f5idelda koormustega. Seda tehti meistribaasi ja veebiserverite jaoks. Kahjuks on see v\u00f5imalik ainult teatud piirini, edasi muutub see liiga kulukaks.<\/p>\n<p>Alates 2014. aastast oleme l\u00e4inud Azure'i, sellest kirjutasime ka toona 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>\u201c. Aga p\u00e4rast serveri v\u00f5imsuse j\u00e4rkj\u00e4rgulist suurendamist l\u00f5ppesime kuludega.&nbsp;<\/p>\n<h4>Lugemiseks m\u00f5eldud andmebaasi koopiad<\/h4>\n<p>Andmebaasist tehti kaks koopiat:<\/p>\n<p><strong>ReadReplica<\/strong> <strong>andmebaasi p\u00e4ringute jaoks<\/strong>. Seda kasutatakse n\u00e4iteks linnade, t\u00e4navate, pitsade ja toidu (aeglaselt muudetud domeen) loetelude lugemiseks, ning seal, kus on lubatud v\u00e4ike viivitus. Neid koopiaid oli kaks ja tagasime nende k\u00e4ttesaadavuse sama h\u00e4sti kui meistribaasi.<\/p>\n<p><strong>ReadReplica aruannete p\u00e4ringute jaoks<\/strong>. Sellel andmebaasil oli madalam k\u00e4ttesaadavus, kuid sinna said k\u00f5ik aruanded. Olgu, et neil on rasked p\u00e4ringud suurte andmete \u00fcmberarvutamiseks, kuid need ei m\u00f5juta peamist andmebaasi ja operatiivliideseid.&nbsp;<\/p>\n<h4>Kohandatud vahem\u00e4lud koodis<\/h4>\n<p>Koodis ei olnud kuhugi vahem\u00e4lusid (\u00fcldse). See t\u00f5i kaasa t\u00e4iendavad, mitte alati vajalikud, p\u00e4ringud koormatud andmebaasi. Vahem\u00e4lud olid alguses nii m\u00e4lus kui ka v\u00e4lises vahem\u00e4les, milleks oli Redis. K\u00f5ik kehtivuse aegunud ajaga, seaded m\u00e4\u00e4rati koodis.<\/p>\n<h4>M\u00f5ned serverid tagaplaaniks<\/h4>\n<p>Ka rakenduse tagaplaan tuli suurendada, et taluda suurenenud koormust. \u00dche iis-serveri p\u00f5hjal tuli luua klaster. \u00dcmber kolisime <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/aspnet\/core\/fundamentals\/app-state?view=aspnetcore-3.1\"><u>rakenduste sessiooni<\/u><\/a><\/noindex> RedisCache'i, mis v\u00f5imaldas luua mitu serverit, mis seisavad lihtsa koormuse tasakaalustaja taga round robin s\u00fcsteemis. Alguses kasutati sama Redis'i, mis vahem\u00e4lude jaoks, hiljem jagati see mitme peale.&nbsp;<\/p>\n<p>L\u00f5pptulemusena arhitektuur komplikeerus...<\/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>\u2026aga osa pinget \u00f5nnestus leevendada.<\/p>\n<p>J\u00e4rgmine samm oli koormatud komponente \u00fcmber teha, millega me ka tegeleme. 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 4.9.10 - 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. \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 \u0442\u0430\u043a\u043e\u043c\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) 4.9.10\" \/>\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. \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 \u0442\u0430\u043a\u043e\u043c\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":"\ud83c\udfc6 Dodo IS arhitektuuri ajalugu: varajane monoliit | ProHoster","description":"Iga eba\u00f5nnestunud ettev\u00f5te on oma monoliidiga \u00f5nnetu omal moel. Dodo IS s\u00fcsteemi arendamine algas kohe koos Dodo Pitsa \u00e4riga \u2014 2011. aastal. Aluseks oli idee \u00e4riprotsesside t\u00e4ielik ja totaalne digitaliseerimine, mida tehti omal k\u00e4el, mis veel 2011. aastal tekitas palju k\u00fcsimusi ja skeptilisust. Kuid n\u00fc\u00fcd, \u00fcheksa aastat hiljem, oleme j\u00e4tkanud selle teed.","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. \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 \u0442\u0430\u043a\u043e\u043c\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"},"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}]}}