{"id":95786,"date":"2020-10-03T13:42:12","date_gmt":"2020-10-03T11:42:12","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-put-bekofisa"},"modified":"2020-10-03T13:42:12","modified_gmt":"2020-10-03T11:42:12","slug":"istoriya-arhitektury-dodo-is-put-bekofisa","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-put-bekofisa","title":{"rendered":"Dodo IS arhitektuuri ajalugu: tagakontori tee","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Habrahabr muudab maailma. Oleme pidanud oma blogi \u00fcle aasta. Kusagil pool aastat tagasi saime Habra k\u00fclastajate k\u00e4est \u00fcsna loogilist tagasisidet: \u201eDodo, te r\u00e4\u00e4gite igal pool, et teil on oma s\u00fcsteem. Mis see s\u00fcsteem on? Ja milleks on see vajalik pizzakettidele?\u201d <\/p>\n<p>M\u00f5tlesime natuke ja m\u00f5istsime, et teil on \u00f5igus. Proovime k\u00f5ike selgitada lihtsal viisil, kuid see tuleb katkendlikult ja kustki ei leia t\u00e4ielikku s\u00fcsteemi kirjeldust. Nii algas pikk teekond teabe kogumise, autorite otsimise ja Dodo IS-i seeria artiklite kirjutamise suunas. Alustame!<\/p>\n<blockquote><p><i>Ait\u00e4h: t\u00e4nu teile, et jagate meiega oma tagasisidet. T\u00e4nu sellele oleme l\u00f5puks s\u00fcsteemi kirjeldanud, koostanud tehnoradarit ja peagi avaldame p\u00f5hjaliku \u00fclevaate meie protsessidest. Ilma teieta istuksime veel 5 aastat. <\/i><\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/dcfd06b2ec1544e1e19994d60e9594ac.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Artiklite seeria \u201eMis on Dodo IS?\u201d r\u00e4\u00e4gib:<\/b><\/p>\n<ol>\n<li>\u0420\u0430\u043d\u043d\u0438\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442 \u0432 Dodo IS (2011-2015 \u0433\u043e\u0434\u044b). (In progress&#8230;)<\/li>\n<li>Tagakontori tee: eraldi andmebaasid ja buss. (Olete siin)<\/li>\n<li>\u041f\u0443\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438: \u0444\u0430\u0441\u0430\u0434 \u043d\u0430\u0434 \u0431\u0430\u0437\u043e\u0439 (2016-2017 \u0433\u043e\u0434\u044b). (In progress&#8230;)<\/li>\n<li>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. (2018-2019 \u0433\u043e\u0434\u044b). (In progress&#8230;)<\/li>\n<li>\u0417\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0441\u043f\u0438\u043b \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. (In progress&#8230;)<\/li>\n<\/ol>\n<p>\n<b>Kui soovite veel midagi teada, kirjutage kommentaaridesse. <\/b><\/p><\/blockquote>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">Autorilt ajaloost p\u00f5hinev arvamus<\/b><br \/>\n                        Korraldan regulaarselt uutest t\u00f6\u00f6tajatest koosolekuid teemal \"S\u00fcsteemi arhitektuur\". Meie juures nimetatakse seda \"Intro to Dodo IS Architecture\" ning see on osa uute arendajate onboarding-protsessist. R\u00e4\u00e4kides meie arhitektuurist ja selle omadustest, tekkis mul ajalooline l\u00e4henemine selle kirjeldamiseks. <\/p>\n<p>Tavaliselt vaatame s\u00fcsteemi kui komponentide (tehniliste v\u00f5i k\u00f5rgema taseme) kogumit, \u00e4rimooduleid, mis omavahel s\u00fcmbioosis t\u00f6\u00f6tavad mingi eesm\u00e4rgi nimel. Ja kuigi selline l\u00e4henemine on projekteerimise jaoks \u00f5igustatud, ei sobi see kirjeldamiseks ja m\u00f5istmiseks. Siin on mitu p\u00f5hjust:<\/p>\n<ul>\n<li>Reaalsus erineb sellest, mis on paberil. Mitte k\u00f5ik, mida plaanitakse, ei teostu. Ja meid huvitab, kuidas asjad tegelikult v\u00e4lja kukkusid ja t\u00f6\u00f6tavad. <\/li>\n<li>Informatsiooni j\u00e4rjestikune esitlemine. \u00dcldiselt v\u00f5iks liikuda kronoloogiliselt algusest praeguse seisundini. <\/li>\n<li>Lihtsalt keeruliseks. See ei ole universaalne, kuid meie puhul on see just nii. Ahnemad l\u00e4henemised arhitektuuris liikusid keerulisematele. Tihti saadi keerukamaid lahendusi rakendamise kiirus- ja stabiilsusprobleemide lahendamiseks, samuti tosin muud omadust, mis on loetletud mittefunktsionaalsetes n\u00f5uetes (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=6m4XPje76WU\">siit<\/a><\/noindex> h\u00e4sti r\u00e4\u00e4gitud keerukuse vastandamisest teistele n\u00f5uetele).<\/li>\n<\/ul>\n<p>2011. aastal n\u00e4gi Dodo IS arhitektuur v\u00e4lja selline:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/3f447154d2d7e7323806f11aeec88e98.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Kuni 2020. aastani oli see pisut keerulisem ja n\u00e4gi v\u00e4lja selline:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/407b5fead36d6d6d39ab14ea5edcdd5b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKuidas see evolutsioon toimus? Miks on s\u00fcsteemi erinevad osad vajalikud? Milliseid arhitektuurilisi lahendusi ja miks oli valitud? Uurime seda artiklite seerias. <\/p>\n<h2>Esimesed probleemid 2016. aastast: miks peavad teenused loobuma monoliidist.<\/h2>\n<p>\nEsimesed artiklid ts\u00fcklist k\u00e4sitlevad teenuseid, mis esimesena monoliidist eraldusid. Et viia teid konteksti, r\u00e4\u00e4gin, millised probleemid olid meie s\u00fcsteemis 2016. aasta alguseks ja millega pidime tegelema teenuste jagamisel.<\/p>\n<p><b>\u00dcks \u00fchisandmebaas MySql, kuhu kirjutasid oma kirjed k\u00f5ik rakendused, mis tol hetkel Dodo IS-is eksisteerisid.<\/b> Tagaj\u00e4rjed olid sellised:<\/p>\n<ul>\n<li>Suurelt koormus (85% p\u00e4ringutest langes lugemisele). <\/li>\n<li>Andmebaas laienes. Selle t\u00f5ttu muutusid selle hind ja tugi probleemiks.<\/li>\n<li>\u00dcksik rikke punkt. Kui \u00fcks rakendus, mis andmebaasi kirjutab, hakkas \u00e4kki seda aktiivsemalt tegema, siis teised rakendused tundsid seda endas.<\/li>\n<li>Ebaefektiivne andmete hoidmine ja p\u00e4ringud. Tihti hoiti andmeid sellises struktuuris, mis oli mugav \u00fche stsenaariumi jaoks, kuid ei sobinud teiste jaoks. Indeksid kiirendasid \u00fchtede toimingute tegemist, kuid v\u00f5isid aeglustada teisi.<\/li>\n<li>Osaliselt leevendasid probleeme kiired suhted ja read-repliigid andmebaasidele (sellest tuleb eraldi artikkel), kuid nad andsid vaid ajaliselt v\u00f5itu ja probleemi p\u00f5him\u00f5tteliselt ei lahendanud.<\/li>\n<\/ul>\n<p>\n<b>Probleemiks oli monoliidi eksisteerimine<\/b>. Tagaj\u00e4rjed olid sellised:<\/p>\n<ul>\n<li>\u00dcksikud ja haruldased v\u00e4ljaanded.<\/li>\n<li>Paljude inimeste koost\u00f6\u00f6 keerukus.<\/li>\n<li>Uute tehnoloogiate, uute raamistike ja raamatukogude juurutamise v\u00f5imatus. <\/li>\n<\/ul>\n<p>\nProbleemid andmebaasi ja monoliidiga on korduvalt ilmnenud, n\u00e4iteks 2018. aasta alguse languste kontekstis (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/455264\/\">Ole nagu Munk, v\u00f5i paar s\u00f5na tehnilise v\u00f5la kohta<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/461081\/\">P\u00e4ev, mil Dodo IS peatati. As\u00fcnkroonne stsenaarium<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/498280\/\">Lugu Dodo linnust Fenixi liigist. Suur Dodo IS langus<\/a><\/noindex>), nii et ei j\u00e4\u00e4 kauaks peatuma. \u00dctleksin vaid, et soovisime arenduses rohkem paindlikkust. Eelk\u00f5ige kehtib see k\u00f5ige koormatumate ja juuri ulatuvate teenuste kohta \u2014 Auth ja Tracker.<\/p>\n<h2>Tagavarahalduri tee: eraldi andmebaasid ja buss.<\/h2>\n<p><\/p>\n<blockquote><p><b>Jaotise navigeerimine.<\/b><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"#Q0\">2016. aasta monoliidi skeem.<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#Q1\">Alustame monoliidi koormuse v\u00e4hendamist: Authi ja Trackeri eraldamine.<br \/>\n<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#Q2\">Mida teeb Auth?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#Q3\">Kust koormus tuleb?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#Q4\">V\u00e4hendame Authi koormust.<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#Q5\">Mida teeb Tracker?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#Q6\">Kust koormus tuleb?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#Q4\">V\u00e4hendame Trackeri koormust.<\/a><\/noindex><\/li>\n<\/ol>\n<\/blockquote>\n<p>\n<noindex><a rel=\"nofollow\" name=\"Q0\"><\/a><\/noindex><\/p>\n<h4>2016. aasta monoliidi skeem.<\/h4>\n<p>\nTeie ees on Dodo IS 2016. aasta monoliidi p\u00f5histruktuurid ja allpool nende p\u00f5hifunktsioonide selgitus. <br \/>\n<img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/25ae104d94957aebbbab6d54ebb62f5e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Kohaletoimetamise kassa.<\/b> Kullerite haldamine, tellimuste v\u00e4ljastamine kulleritele.<br \/>\n<b>Kontaktikeskus.<\/b>. Tellimuste vastuv\u00f5tmine operaatori kaudu. <br \/>\n<b>Veebileht.<\/b>. Meie veebilehed (dodopizza.ru, dodopizza.co.uk, dodopizza.by jne).<br \/>\n<b>Auth.<\/b>. Autoriseerimise ja autentimise teenus tagavarahalduritele.<br \/>\n<b>Tracker.<\/b>. Tellimuste j\u00e4lgimise teenus k\u00f6\u00f6gis. Valmistamise staatuste m\u00e4rkimise teenus. <br \/>\n<b>Restorani kassa.<\/b>. Tellimuste vastuv\u00f5tmine restoranis, kassapidaja liidesed.<br \/>\n<b>Export<\/b>. Aruannete eksportimine 1C-sse raamatupidamise tarbeks.<br \/>\n<b>Teavitused ja saatedokumendid.<\/b>. H\u00e4\u00e4lk\u00e4sklused k\u00f6\u00f6gis (n\u00e4iteks \u201eUus pitsatellimus\u201c) + saatedokumentide printimine kulleritele.<br \/>\n<b>Vahetuse juht<\/b>. Vahetuse halduri t\u00f6\u00f6liidesed: tellimuste nimekiri, tulemusgraafikud, t\u00f6\u00f6tajate vahetuse v\u00e4ljastamine. <br \/>\n<b>Kontori juht<\/b>. Frantsiisi ja juhataja t\u00f6\u00f6liidesed: t\u00f6\u00f6tajate vastuv\u00f5tmine, pitsarestorani t\u00f6\u00f6 raportid.<br \/>\n<b>Restorani ekraan<\/b>. Men\u00fc\u00fc kuvamine pitsarestoranide televiisorites.<br \/>\n<b>Admin-paneel<\/b>. Seaded konkreetse pitsarestorani jaoks: men\u00fc\u00fc, hinnad, arvestus, sooduskoodid, kampaaniad, veebib\u00e4nnerid jne.<br \/>\n<b>T\u00f6\u00f6taja isiklik kabinet<\/b>. T\u00f6\u00f6tajate t\u00f6\u00f6graafikud, teave t\u00f6\u00f6tajate kohta.<br \/>\n<b>K\u00f6\u00f6gi motiveerimise ekraan<\/b>. Eraldiseisev ekraan, mis rippub k\u00f6\u00f6gis ja n\u00e4itab pitsameistrite t\u00f6\u00f6 kiirus.<br \/>\n<b>Kommunikatsioon<\/b>. SMS-i ja e-kirjade saatmine.<br \/>\n<b>FileStorage<\/b>. Omanikuteenuse jaoks staatiliste failide vastuv\u00f5tu ja v\u00e4ljastamise teenus.<\/p>\n<p>Esimesed katsed probleemide lahendamiseks aitasid meid, kuid olid vaid ajutised peat\u00fckid. Need ei saanud s\u00fcsteemseteks lahendusteks, seega oli selge, et andmebaasidega on midagi ette v\u00f5tta. N\u00e4iteks jagada \u00fcldine andmebaas mitmeks spetsialiseeritumaks. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q1\"><\/a><\/noindex><\/p>\n<h4>Alustame monoliidi koormuse v\u00e4hendamist: Authi ja Trackeri eraldamine.<\/h4>\n<p>\nPeamised teenused, mis tol ajal rohkem registreerisid ja lugesid andmebaasist:<\/p>\n<ol>\n<li>Auth. Autentimise ja autentimise teenus tagakontoris.<\/li>\n<li>Tracker. Tellimuste j\u00e4lgija k\u00f6\u00f6gis. Teenus, mis m\u00e4rgib valmistamise staatuseid tellimuste valmisoleku kohta. <\/li>\n<\/ol>\n<p>\n<noindex><a rel=\"nofollow\" name=\"Q2\"><\/a><\/noindex><\/p>\n<h4>Mida teeb Auth?<\/h4>\n<p>\nAuth \u2014 see on teenus, mille kaudu kasutajad logivad sisse tagakontorisse (klientide osas on eraldi iseseisev sisenemine). Samuti p\u00f6\u00f6rdutakse selle poole, et veenduda, et sobivad \u00f5igused on olemas ja et need \u00f5igused ei ole viimase sisenemisega muutunud. Just selle kaudu siseneb seadmed pitsarestoranidesse. <\/p>\n<p>N\u00e4iteks tahame avada teleris, mis on saalis, ekraani valmis tellimuste staatustega. Seet\u00f5ttu avame auth.dodopizza.ru, valime \"Sisenemine seadmena\", kuvatakse kood, mille saab sisestada vahetusjuhi arvuti spetsiaalsesse lehte, m\u00e4rkides seadme t\u00fc\u00fcbi. Teler liigub automaatselt oma pitsarestorani vajaliku liidese juurde ja hakkab seal kuvama klientide nimesid, kelle tellimused on valminud. <\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/7a246bcbdbf0dcd6af3e21eb1645e9ac.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q3\"><\/a><\/noindex><\/p>\n<h4>Kust koormus tuleb? <\/h4>\n<p>\nIga sisse loginud kasutaja tagakontoris teeb iga p\u00e4ringu korral otsingu andmebaasi, kasutajate tabelisse, t\u00f5mbab sealt sql-p\u00e4ringuga kasutaja ja kontrollib, kas tal on vajalikud \u00f5igused ja juurdep\u00e4\u00e4s sellele lehele. <\/p>\n<p>Iga seade teeb sama, vaid seadmete tabeliga, kontrollides oma rolli ja \u00f5igusi. Suur hulk p\u00e4ringutest meesteribi andmebaasi toob kaasa selle suure koormuse ja ressursside raiskamise \u00fcldisele andmebaasile nende toimingute jaoks.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q4\"><\/a><\/noindex><\/p>\n<h4>V\u00e4hendame Authi koormust.<\/h4>\n<p>\nAuthil on isoleeritud domeen, mis t\u00e4hendab, et andmed kasutajate, sisselogimiste v\u00f5i seadmete kohta tulevad teenusesse (hetkel tuleviku teenus) ja j\u00e4\u00e4vad sinna. Kui need kellelegi vajalikud on, l\u00e4heb ta nende andmete saamiseks sellesse teenusesse.<\/p>\n<p><b>OLI.<\/b> T\u00f6\u00f6 scheem kujunes algselt selliseks:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/60ca37fb873cb4fff4a30691e9f1ea56.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTahaksin veidi selgitada, kuidas see t\u00f6\u00f6tas:<\/p>\n<ol>\n<li>P\u00e4ring v\u00e4ljastpoolt j\u00f5uab tagasi (seal on Asp.Net MVC), toomine endaga sessiooni k\u00fcpsise, mida kasutatakse sessiooniandmete saamiseks Redisest (1). See sisaldab kas ligip\u00e4\u00e4su teavet, siis juurdep\u00e4\u00e4s kontrollerisse on avatud (3,4), v\u00f5i ei ole. <\/li>\n<li>Kui ligip\u00e4\u00e4su ei ole, tuleb l\u00e4bida autentimisprotseduur. Siin on see lihtsuse huvides n\u00e4idatud kui osa teest samas atribuudis, kuigi see on \u00fcleminek sisselogimise lehele. Positiivse stsenaariumi korral saame \u00f5igesti t\u00e4idetud sessiooni ja liigume Backoffice Controllerisse. <\/li>\n<li>Kui andmed on olemas, tuleb need kontrollida kasutaja andmebaasis. Kas tema roll on muutunud, kas teda ei tohi n\u00fc\u00fcd lehele lubada. Sel juhul tuleb sessiooni saamisel (1) otse andmebaasi minna ja kontrollida kasutaja \u00f5igusi autentimise loogika kihiga (2). Edasi kas logimislehele v\u00f5i suunduda kontrollerisse. Selline lihtne s\u00fcsteem, kuid mitte t\u00e4iesti tavaline.<\/li>\n<li>Kui k\u00f5ik protseduurid on l\u00e4bitud, siis j\u00e4tkame edasi loogikas kontrollerites ja meetodites. <\/li>\n<\/ol>\n<p>\nKasutaja andmed on eraldatud k\u00f5ikidest teistest andmetest, need hoitakse eraldi membership tabelis, AuthService loogika kihist p\u00e4rinevaid funktsioone v\u00f5ib t\u00e4iesti kasutada API meetoditena. Domeeni piirid on \u00fcsna selgelt m\u00e4\u00e4ratletud: kasutajad, nende rollid, ligip\u00e4\u00e4suandmed, ligip\u00e4\u00e4sude v\u00e4ljastamine ja t\u00fchistamine. K\u00f5ik n\u00e4eb v\u00e4lja nii, et selle saab viia eraldi teenusesse.<\/p>\n<p><b>ON T\u00d6\u00d6DAS.<\/b> Nii ka tegime:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/3e8629b75ae68b95afa475286d4c5d2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSelle l\u00e4henemisviisi puhul on mitmeid probleeme. N\u00e4iteks meetodi kutsumine protsessi sees ei ole sama, mis v\u00e4lise teenuse kutsumine http kaudu. Latentsus, usaldusv\u00e4\u00e4rsus, hooldatavus ja operatsiooni l\u00e4bipaistvus on t\u00e4ielikult erinevad. Rohkem nende probleemide kohta r\u00e4\u00e4kis Andrei Morevski oma ettekandes. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XeNrWkRmVWw\">\u201e50 varjundit mikroteenuseid\u201c<\/a><\/noindex>.<\/p>\n<p>Autentimis teenus ja seadmete teenus kasutatakse tagakontoris, st teenustes ja liidestes, mida kasutatakse tootmises. Klientide teenuste (nt veebisaidi v\u00f5i mobiilirakenduse) autentimine toimub eraldi ilma Auth'i kasutamata. Eraldamine v\u00f5ttis aega umbes aasta, ja n\u00fc\u00fcd tegeleme taas selle teemaga, viies s\u00fcsteemi \u00fcle uutele autentimis teenustele (standardsete protokollide alusel). <\/p>\n<p>                        <b class=\"spoiler_title\">Miks eraldamine kestis nii kaua?<\/b><br \/>\n                        Teel oli palju probleeme, mis aeglustasid:<\/p>\n<ol>\n<li>Soovisime viia kasutajate, seadmete ja autentimise andmed riigi andmebaasid \u00fcheks. Selleks tuli k\u00f5ik tabelid \u00fcle viia ning ID int kasutada globaalse ID UUId (olenud hiljuti selle koodi \u00fcmber t\u00f6\u00f6tanud). <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=OGK4Lkd6p6s\">Roman Bukin \u00abUuid \u2014 suur lugu v\u00e4ikese struktuuri kohta\u00bb<\/a><\/noindex> ja avatud l\u00e4htekoodiga projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dodopizza\/primitives\">Primitives<\/a><\/noindex>). Kasutajate andmete salvestamine (kuna see on isiklik teave) on oma piirangutega ja m\u00f5nes riigis tuleb neid eraldi hoida. Kuid globaalse kasutaja identifikaator peab olema.<\/li>\n<li>Paljusid andmebaasi tabeleid j\u00e4lgib teavet selle kasutaja kohta, kes operatsiooni sooritas. See n\u00f5udis t\u00e4iendavat mehhanismi, et tagada j\u00e4rjepidevus.<\/li>\n<li>P\u00e4rast api-teenuste loomist oli pikk ja j\u00e4rk-j\u00e4rguline periood \u00fcleviimiseks teisele s\u00fcsteemile. \u00dcleminekud pidid toimuma sujuvalt kasutajatele ja n\u00f5udsid k\u00e4sitsi t\u00f6\u00f6d.<\/li>\n<\/ol>\n<p>Seadmise registreerimise skeem pitsarestoranis:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/1e054d01de40d63c2994a4d49e47b215.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00dcldine arhitektuur p\u00e4rast Auth ja Devices-teenuse eraldamist:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/069d176197674ef8414981ac98f30704.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><b>M\u00e4rkus<\/b>. 2020. aastaks t\u00f6\u00f6tame uue Auth versiooni kallal, mis p\u00f5hineb OAuth 2.0 autoriseerimise standardil. See standard on \u00fcsna keeruline, kuid on kasulik l\u00f5puauditeerimise teenuse arendamisel. Artiklis \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/520046\/\">Autoriseerimise n\u00fcansid: OAuth 2.0 tehnoloogia \u00fclevaade<\/a><\/noindex>\u00bb on Aleksei Cherniaev p\u00fc\u00fcdnud r\u00e4\u00e4kida standardist v\u00f5imalikult lihtsalt ja selgelt, et te saaksite \u00f5ppimisele aega s\u00e4\u00e4sta.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q5\"><\/a><\/noindex><\/p>\n<h4>Mida teeb Tracker? <\/h4>\n<p>\nR\u00e4\u00e4gime n\u00fc\u00fcd teisest koormat\u00e4iest teenusest. J\u00e4lgija t\u00e4idab kaht vastastikku seotud rolli:<\/p>\n<ul>\n<li>Esiteks, selle \u00fclesanne on n\u00e4idata k\u00f6\u00f6git\u00f6\u00f6tajatele, millised tellimused on hetkel t\u00f6\u00f6s, milliseid tooteid tuleb praegu valmistada. <\/li>\n<li>Teiseks \u2014 digitaliseerida k\u00f5ik k\u00f6\u00f6gis toimuvad protsessid. <\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/5d13756308ee0cdb6e4000489b6b402d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui tellimusesse lisatakse uus toode (n\u00e4iteks pitsat), j\u00f5uab see j\u00e4lgija jaama \u201eRullimine\u201c. Sellel jaamal t\u00f6\u00f6tab pitsameister, kes v\u00f5tab sobiva suurusega taina ja rullib selle lahti, seej\u00e4rel m\u00e4rgib ta j\u00e4lgija tahvelarvutis, et on oma \u00fclesande t\u00e4itnud, ja edastab rullitud taigna aluse j\u00e4rgmisse jaama \u2014 \u201eT\u00e4idise valmistamine\u201c. <\/p>\n<p>Siin j\u00e4rgmine pitsameister t\u00e4idab pitsat, seej\u00e4rel m\u00e4rgib tahvelarvutisse, et ta on oma \u00fclesande t\u00e4itnud ja paneb pitsa ahju (see on samuti eraldi jaama, mille tuleb tahvelarvutisse m\u00e4rkida). Selline s\u00fcsteem oli algusest peale Dodo ja Dodo IS olemas. See v\u00f5imaldab t\u00e4ielikult j\u00e4lgida ja digiteerida k\u00f5iki operatsioone. Lisaks annab j\u00e4lgija juhiseid, kuidas valmistada seda v\u00f5i seda toodet, viib iga toote l\u00e4bi oma valmistamisskeemide, s\u00e4ilitab toote optimaalse k\u00fcpsetamisaja ja j\u00e4lgib k\u00f5iki toiminguid toote \u00fcle. <\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/d745bf6f981c1a5b43e6091b090644ad.png\" style=\"display:block;margin: 0 auto;\" \/><i>Nii n\u00e4eb v\u00e4lja tahvelarvuti ekraan j\u00e4lgija \"Rullimine\" jaamas<\/i><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q6\"><\/a><\/noindex><\/p>\n<h4>Kust koormus tuleb? <\/h4>\n<p>\nIgas pitsarestoranis on umbes viis tahvelarvutit j\u00e4lgimisega. 2016. aastal oli meil \u00fcle 100 pitsarestorani (n\u00fc\u00fcdseks aga enam kui 600). Iga tahvelarvuti saadab iga 10 sekundi j\u00e4rel p\u00e4ringu tagaplaanile ja kogub andmeid tellimuste tabelist (seotud kliendi ja aadressiga), tellimuse koostisosadest (seotud tootega ja koguse m\u00e4\u00e4ramine) ning motivatsiooni tabelist (kus j\u00e4lgitakse vajutamise aega). Kui pitsamees vajutab j\u00e4lgimisrakenduses tootele, uuendatakse k\u00f5iki neid tabeleid. Tellimuste tabel on \u00fchine, sinna tehakse samal ajal sissekandeid tellimuste vastuv\u00f5tmisel, uuendusi s\u00fcsteemi teistest osadest ja arvukalt lugemisi, n\u00e4iteks televisioonis, mis ripub pitsarestoranis ja n\u00e4itab kliente valmislidordersid. <\/p>\n<p>Koormuste vastu v\u00f5itlemise perioodil, mil k\u00f5ik ja k\u00f5ike vahem\u00e4luti ja muudeti as\u00fcnkroonseks andmebaasi kopeerimiseks, j\u00e4tkasid need operatsioonid j\u00e4lgijaga varem peaandmebaasi. Siin ei tohiks olla mingit viivitust, andmed peavad olema ajakohased, s\u00fcnkroonsus on h\u00e4davajalik.<\/p>\n<p>Samuti ei v\u00f5imaldanud oma tabelite ja indeksite puudumine kirjutada spetsiifilisemaid p\u00e4ringuid, mis vastavad meie kasutusele. N\u00e4iteks v\u00f5iks j\u00e4lgijale olla t\u00f5hus omada indeksit pizzeriate kohta tellimuste tabelis. Me t\u00f5mbame alati j\u00e4lgijast v\u00e4lja tellimused pizzeriate kohta. Samas pole tellimuse vastuv\u00f5tmisel oluline, millisesse pizzeriisse see langeb, olulisem on, milline klient selle tellimuse tegi. Seega on seal vajalik indeks kliendi j\u00e4rgi. J\u00e4lgijale ei ole ka tellimuse tabelis vajalik hoida tr\u00fckitud t\u0161eki ID-d v\u00f5i tellimusega seotud boonuspakkumisi. See teave ei huvitata meie j\u00e4lgimisteenust. \u00dcldises monoliitses andmebaasis v\u00f5isid tabelid olla vaid k\u00f5ikide kasutajate vahelise kompromissi variandiks. See oli \u00fcks algseid probleeme.<\/p>\n<p><b>OLI. <\/b>Alguses oli arhitektuur selline:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/085ebab3131ae5edc772d1e6f8c6de76.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIsegi p\u00e4rast eraldamist eraldi protsessides j\u00e4i enamik koodibaasist erinevatele teenustele \u00fchiseks. K\u00f5ik, mis on allpool kontrolleritest, oli \u00fchine ja elas \u00fches hoidlas. Kasutati \u00fchiseid meetodeid teenustest, hoidlatest, \u00fchine andmebaas, kus asusid \u00fchised tabelid.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q7\"><\/a><\/noindex><\/p>\n<h4>V\u00e4hendame Trackeri koormust.<br \/>\n<\/h4>\n<p>\nPeamine probleem j\u00e4lgimise s\u00fcsteemis on see, et andmed peavad s\u00fcnkroniseerima erinevate andmebaaside vahel. See on ka selle peamine erinevus Auth-teenuse eraldamisest, kui tellimus ja selle staatus v\u00f5ivad muutuda ning peavad olema erinevates teenustes n\u00e4htavad. <\/p>\n<p>Me v\u00f5tame tellimuse vastu Restoranikassas (see on teenus), see salvestatakse andmebaasi seisundis \u201eV\u00f5etud\u201d. P\u00e4rast seda peab see sattuma j\u00e4lgimise s\u00fcsteemi, kus selle staatus muutub veel mitu korda: \u201eK\u00f6\u00f6k\u201d kuni \u201ePakitud\u201d. Sellega seoses v\u00f5ivad tellimuse osas toimuda m\u00f5ned v\u00e4lised m\u00f5jutused Kassast v\u00f5i Vahetusjuhi interfatsioonist. Toome tabelis v\u00e4lja tellimuse staatuste kirjeldused:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/b6a5a586a3f65715acccea2114725c8e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTellimuse staatuste muutmise skeem n\u00e4eb v\u00e4lja j\u00e4rgmiselt:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/92e58a2d60706b0e32aedbef7fa42f93.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStaatused muutuvad erinevate s\u00fcsteemide vahel. Ja siin pole j\u00e4lgija l\u00f5pp-s\u00fcsteem, kus andmed kogunevad. Oleme n\u00e4inud mitmeid v\u00f5imalikke l\u00e4henemisviise eraldamiseks sellistel juhtudel:<\/p>\n<ol>\n<li><b>Koonde k\u00f5ik tellimuse toimingud \u00fchte teenusesse.<\/b> Meie juhul n\u00f5uab see variant liiga suurt teenust tellimuse t\u00f6\u00f6tlemiseks. Kui me sellele j\u00e4\u00e4ksime, siis saaksime teise monoliidi. Probleeme me ei lahendaks.<\/li>\n<li><b>\u00dcks s\u00fcsteem teeb kutsungi teisele.<\/b> Teine variant on juba huvitavam. Ent selle puhul v\u00f5ivad esineda korduvad kutsed (<noindex><a rel=\"nofollow\" href=\"https:\/\/landing.google.com\/sre\/sre-book\/chapters\/addressing-cascading-failures\/\">kaskaadvead<\/a><\/noindex>), komponentide sidusus on suurem, hallata seda on keerulisem. <\/li>\n<li><b>Korrigeerime s\u00fcndmusi, ja iga teenus vahetab nende kaudu teavet teiste teenustega.<\/b> L\u00f5puks valiti just kolmas variant, milles k\u00f5ik teenused hakkavad omavahel s\u00fcndmusi vahetama. <\/li>\n<\/ol>\n<p>\nSee, et me valisime kolmanda variandi, t\u00e4hendas, et j\u00e4lgijal on oma andmebaas ja iga tellimuse muudatuse korral saadab ta selle kohta s\u00fcndmuse, millele registreerivad teised teenused, ja mis j\u00f5uab ka p\u00f5hivaramusse. Selleks vajasime mingit teenust, mis tagaks s\u00f5numite edastamise teenuste vahel. <\/p>\n<p>Sel ajal oli meil juba tehnoloogias RabbitMQ, sealt ka l\u00f5plik otsus kasutada seda s\u00f5numite vahetamiseks. Skeemil on kujutatud tellimuse liikumist Restorani Kassast l\u00e4bi J\u00e4lgija, kus see muudab oma staatuseid ja kuvab seda Halduse tellimustes. <b>SAI<\/b>: <\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/eed09f7b11202556d6641036aa8ffb1f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>                        <b class=\"spoiler_title\">Tellimuse teekond samm-sammult<\/b><br \/>\n                        Tellimuse teekond algab \u00fchel tellimuste allika teenustest. Siin on see Restorani Kassas: <\/p>\n<ol>\n<li>Kassas on tellimus t\u00e4ielikult valmis, ja on aeg see j\u00e4lgimisele saata. Toimub s\u00fcndmus, millele j\u00e4lgija on registreeritud. <\/li>\n<li>J\u00e4lgija, vastu v\u00f5ttes tellimuse, salvestab selle oma andmebaasi, luues samal ajal s\u00fcndmuse \u00abTellimusV\u00f5etudJ\u00e4lgija\u00bb ja saadab selle RMQ-sse. <\/li>\n<li>Tellimuse s\u00fcndmusele on juba registreeritud mitmed t\u00f6\u00f6tlejad. Meie jaoks on oluline see, mis teeb s\u00fcnkroniseerimise monoliitse andmebaasiga. <\/li>\n<li>T\u00f6\u00f6tleja v\u00f5tab s\u00fcndmuse vastu, valib sellest enda jaoks olulised andmed: meie puhul tellimuse oleku \u00abV\u00f5etudJ\u00e4lgija\u00bb ja v\u00e4rskendab oma tellimuse entiteeti p\u00f5hij\u00e4rjestuses. <\/li>\n<\/ol>\n<p>Kui kellelegi on vajalik tellimus just monoliitsest orders tabelist, siis saab selle sealt lugeda. N\u00e4iteks on seda vaja Tellimuste liidesele Vahetuse Halduse s\u00fcsteemis:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/97c16e7fecd6709aad7e10f9dff6c037.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00f5ik teised teenused saavad samuti registreeruda tellimuse s\u00fcndmustele j\u00e4lgijas, et neid enda jaoks kasutada.<\/p>\n<p>Kui tellimus v\u00f5etakse p\u00e4rast teatud aega t\u00f6\u00f6le, muutub selle staatus esmalt oma andmebaasis (Tracker'i andmebaasis) ja seej\u00e4rel genereeritakse kohe s\u00fcndmus \u201eTELLIMUS_T\u00d6\u00d6S\u201d. See j\u00f5uab ka RMQ-sse, kust s\u00fcnkroniseeritakse monoliitses andmebaasis ja edastatakse teistele teenustele. Sellel teel v\u00f5ivad esineda erinevad probleemid, mille kohta saab rohkem teada \u017denja Pe\u0161kovi ettekandes. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=DWfJWCWV_eQ\">detalite teostusest Eventual Consistency Tracker'is<\/a><\/noindex>. <\/p>\n<h4>L\u00f5plik arhitektuur p\u00e4rast muudatusi Authis ja Trackeris<\/h4>\n<p>\n<img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tagakontori tee\" src=\"\/wp-content\/uploads\/2020\/10\/7cc517f78c8a381bd570cd26be25ace0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><b>Kokkuv\u00f5tteks:<\/b> Alguses m\u00f5tlesin, et pakin Dodo IS s\u00fcsteemi \u00fcheksa aastat kokku \u00fchte artiklisse. Soovisin kiirelt ja lihtsalt r\u00e4\u00e4kida arenguetappidest. Kuid kui ma materjali kallale asusin, m\u00f5istsin, et k\u00f5ik on palju keerulisem ja huvitavam, kui esmapilgul tundub. <\/p>\n<p>M\u00f5eldes selle materjali kasule (v\u00f5i selle puudumisele), j\u00f5udsin j\u00e4reldusele, et pidev areng pole v\u00f5imalik ilma t\u00e4ielike s\u00fcndmuste kroonikateta, laiaulatuslike retrospektiivide ja oma varasemate otsuste anal\u00fc\u00fcsita.<\/p>\n<p>Loodan, et teave meie teekonnast oli teile kasulik ja huvitav. N\u00fc\u00fcd seisan silmitsi valikuga, millist Dodo IS s\u00fcsteemi osa j\u00e4rgmises artiklis kirjeldada: kirjutage kommentaaridesse v\u00f5i h\u00e4\u00e4letage.<\/p>\n<p class=\"for_users_only_msg\">Ainult registreeritud kasutajad saavad k\u00fcsitluses osaleda. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logige sisse<\/a><\/noindex>, palun.<\/p>\n<h2 class=\"default-block__polling-title\">Millise Dodo IS osa kohta sooviksite j\u00e4rgmisest artiklist rohkem teada?<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">24,1%<\/strong>Varajane monoliit Dodo IS-is (2011-2015)<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">24,1%<\/strong>Esimesed probleemid ja nende lahendused (2015-2016)<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,7%<\/strong>Kliendipool: fassaad andmebaasi ees (2016-2017)<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">36,2%<\/strong>T\u00f5eliste mikroteenuste ajalugu (2018-2019)<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">44,8%<\/strong>Monoliidi l\u00f5pp ja arhitektuuri stabiliseerimine<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">29,3%<\/strong>Edasised arendamise plaanid s\u00fcsteemi jaoks<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">19,0%<\/strong>Ei soovi Dodo IS-ist midagi teada<\/p>\n<\/li>\n<\/ul>\n<p>    H\u00e4\u00e4letas 58 kasutajat. Eemaldas end 6 kasutajat.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/506136\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0425\u0430\u0431\u0440 \u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0438\u0440. \u0411\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u043c\u044b \u0432\u0435\u0434\u0451\u043c \u0441\u0432\u043e\u0439 \u0431\u043b\u043e\u0433. \u0413\u0434\u0435-\u0442\u043e \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043d\u0430\u043c \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0444\u0438\u0434\u0431\u044d\u043a \u043e\u0442 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d: \u00ab\u0414\u043e\u0434\u043e, \u0432\u043e\u0442 \u0432\u044b \u0432\u0435\u0437\u0434\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0441\u0432\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0410 \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430? \u0418 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0441\u0435\u0442\u0438 \u043f\u0438\u0446\u0446\u0435\u0440\u0438\u0439?\u00bb. \u041c\u044b \u043f\u043e\u0441\u0438\u0434\u0435\u043b\u0438, \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u0438 \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0432\u044b \u043f\u0440\u0430\u0432\u044b. \u041c\u044b \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445, \u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95787,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95786","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=\"\u0425\u0430\u0431\u0440 \u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0438\u0440. \u0411\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u043c\u044b \u0432\u0435\u0434\u0451\u043c \u0441\u0432\u043e\u0439 \u0431\u043b\u043e\u0433. \u0413\u0434\u0435-\u0442\u043e \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043d\u0430\u043c \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0444\u0438\u0434\u0431\u044d\u043a \u043e\u0442 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d: \u00ab\u0414\u043e\u0434\u043e, \u0432\u043e\u0442 \u0432\u044b \u0432\u0435\u0437\u0434\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0441\u0432\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0410 \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430? \u0418 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0441\u0435\u0442\u0438 \u043f\u0438\u0446\u0446\u0435\u0440\u0438\u0439?\u00bb. \u041c\u044b \u043f\u043e\u0441\u0438\u0434\u0435\u043b\u0438, \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u0438 \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0432\u044b \u043f\u0440\u0430\u0432\u044b. \u041c\u044b \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445, \u043d\u043e\" \/>\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-put-bekofisa\" \/>\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: \u043f\u0443\u0442\u044c \u0431\u044d\u043a\u043e\u0444\u0438\u0441\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0425\u0430\u0431\u0440 \u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0438\u0440. \u0411\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u043c\u044b \u0432\u0435\u0434\u0451\u043c \u0441\u0432\u043e\u0439 \u0431\u043b\u043e\u0433. \u0413\u0434\u0435-\u0442\u043e \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043d\u0430\u043c \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0444\u0438\u0434\u0431\u044d\u043a \u043e\u0442 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d: \u00ab\u0414\u043e\u0434\u043e, \u0432\u043e\u0442 \u0432\u044b \u0432\u0435\u0437\u0434\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0441\u0432\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0410 \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430? \u0418 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0441\u0435\u0442\u0438 \u043f\u0438\u0446\u0446\u0435\u0440\u0438\u0439?\u00bb. \u041c\u044b \u043f\u043e\u0441\u0438\u0434\u0435\u043b\u0438, \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u0438 \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0432\u044b \u043f\u0440\u0430\u0432\u044b. \u041c\u044b \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445, \u043d\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-put-bekofisa\" \/>\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:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-03T11:42:12+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: back-office tee | ProHoster","description":"Habr muudab maailma. Oleme juba rohkem kui aasta pidanud oma blogi. Umbes poole aasta eest saime loogilise tagasiside Habr'i kasutajatelt: \u00abDodo, te r\u00e4\u00e4gite pidevalt oma s\u00fcsteemist. Mis see s\u00fcsteem on? Ja miks see on vajalik pitsarestoranide kettidele?\u00bb. M\u00f5tlesime ja m\u00f5istsime, et olite \u00f5iged. P\u00fc\u00fcame k\u00f5ik k\u00e4tega selgitada, aga","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-put-bekofisa","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: \u043f\u0443\u0442\u044c \u0431\u044d\u043a\u043e\u0444\u0438\u0441\u0430 | ProHoster","og:description":"\u0425\u0430\u0431\u0440 \u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0438\u0440. \u0411\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u043c\u044b \u0432\u0435\u0434\u0451\u043c \u0441\u0432\u043e\u0439 \u0431\u043b\u043e\u0433. \u0413\u0434\u0435-\u0442\u043e \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043d\u0430\u043c \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0444\u0438\u0434\u0431\u044d\u043a \u043e\u0442 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d: \u00ab\u0414\u043e\u0434\u043e, \u0432\u043e\u0442 \u0432\u044b \u0432\u0435\u0437\u0434\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0441\u0432\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0410 \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430? \u0418 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0441\u0435\u0442\u0438 \u043f\u0438\u0446\u0446\u0435\u0440\u0438\u0439?\u00bb. \u041c\u044b \u043f\u043e\u0441\u0438\u0434\u0435\u043b\u0438, \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u0438 \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0432\u044b \u043f\u0440\u0430\u0432\u044b. \u041c\u044b \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445, \u043d\u043e","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-put-bekofisa","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:12+00:00","article:modified_time":"2020-10-03T11:42:12+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95786","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:48","updated":"2022-09-27 15:42:36"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95786","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=95786"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95786\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/95787"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=95786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=95786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=95786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}