{"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: tahke kontoriteed","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Habr muuda maailma. Oleme juba \u00fcle aasta pidanud oma blogi. Kusagil pool aastat tagasi saime meilt t\u00e4iesti loogilise tagasiside Habrilt: \"Dodo, te r\u00e4\u00e4gite igal pool, et teil on oma s\u00fcsteem. Mis s\u00fcsteem see on? Ja miks see on vajalik pitsakettide jaoks?\" <\/p>\n<p>Me istusime, m\u00f5tlesime ja m\u00f5istsime, et teil on \u00f5igus. Proovime seletada k\u00f5ike lihtsasti, kuid tulemus tuleb katkine ja kusagil pole t\u00e4ielikku s\u00fcsteemi kirjeldust. Nii algas pikk teekond teabe kogumiseks, autorite leidmiseks ja seeria artiklite kirjutamiseks Dodo IS-ist. Hakkame pihta!<\/p>\n<blockquote><p><i>T\u00e4nud: ait\u00e4h, et jagate meiega oma tagasisidet. T\u00e4nu sellele oleme l\u00f5puks suutnud s\u00fcsteemi kirjeldada, koostada tehnoraadi ja peagi avaldame meie protsesside p\u00f5hjaliku kirjelduse. Ilma teieta istuksime veel 5 aastat. <\/i><\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" 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 sari \"Mis on Dodo IS?\" r\u00e4\u00e4gib:<\/b><\/p>\n<ol>\n<li>Aegne monoliit Dodo IS-is (2011-2015). (T\u00f6\u00f6s&#8230;)<\/li>\n<li>Tagab\u00fcroo tee: eraldi andmebaasid ja buss. (Te olete siin)<\/li>\n<li>Kliendipoolne tee: fassaad andmebaasi kohal (2016-2017). (T\u00f6\u00f6s&#8230;)<\/li>\n<li>Tegelikud mikroteenuste lood. (2018-2019). (T\u00f6\u00f6s&#8230;)<\/li>\n<li>Valminud monoliidi l\u00f5hkumine ja arhitektuuri stabiliseerimine. (T\u00f6\u00f6s&#8230;)<\/li>\n<\/ol>\n<p>\n<b>Kui soovite teada midagi veel, kirjutage kommentaarides. <\/b><\/p><\/blockquote>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">Autori arvamus kronoloogilisest kirjeldusest<\/b><br \/>\n                        Koran teeme uute t\u00f6\u00f6tajate jaoks kohtumise teemal \"S\u00fcsteemi arhitektuur\". Me nimetame seda \"Intro to Dodo IS Architecture\" ja see on osa uute arendajate onboardimisprotsessist. R\u00e4\u00e4kides meie arhitektuurist ja selle omadustest, tekkis mul teatud ajalooline l\u00e4henemine kirjeldamiseks. <\/p>\n<p>Tavaliselt vaatame s\u00fcsteemi kui komponentide (tehniliste v\u00f5i k\u00f5rgema taseme) kogumit, \u00e4rimooduleid, mis suhtlevad omavahel mingi eesm\u00e4rgi saavutamiseks. Ja kuigi selline v\u00e4henemine on projekteerimiseks \u00f5igustatud, ei sobi see kirjeldamiseks ja m\u00f5istmiseks. Siin on mitu p\u00f5hjust:<\/p>\n<ul>\n<li>Tegelikkus erineb sellest, mis paberil. Mitte k\u00f5ik, mis on m\u00f5eldud, ei toimi. Ja meile on huvitav, kuidas k\u00f5ik tegelikult v\u00e4lja n\u00e4eb ja t\u00f6\u00f6tab. <\/li>\n<li>Teabe j\u00e4rjestikune esitamine. Sisuliselt v\u00f5ib j\u00e4rgida kronoloogiliselt alates algusest kuni praeguse seisuni. <\/li>\n<li>Lihtsast keeruliseni. See ei ole universaalne, kuid meie puhul just nii on. Lihtsatest l\u00e4henemisviisidest liikus arhitektuur keerulisema poole. Sageli lahendati keerulisuse kaudu rakendamise ja stabiilsuse probleeme ning ka k\u00fcmnete teiste omaduste loetelu mittefunktsionaalsetest n\u00f5uetest (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=6m4XPje76WU\">siin<\/a><\/noindex> on h\u00e4sti r\u00e4\u00e4gitud keerukuse vastandamisest teistele n\u00f5uetele).<\/li>\n<\/ul>\n<p>2011. aastal n\u00e4gi Dodo IS arhitektuur v\u00e4lja nii:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/3f447154d2d7e7323806f11aeec88e98.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>2020. aastaks oli see veidi keerulisem ja sai selliseks:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" 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 on valitud? Uurime seda artiklite sarjas. <\/p>\n<h2>Esimesed probleemid 2016. aastal: miks peavad teenused monoliidist lahkuma<\/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 alguses ning millega me pidime tegelema teenuste jagamisel.<\/p>\n<p><b>\u00dcks \u00fchine MySql andmebaas, kuhu k\u00f5ik toona Dodo IS-is eksisteerinud rakendused andmeid kirjutasid.<\/b> Tagaj\u00e4rjed olid j\u00e4rgmised:<\/p>\n<ul>\n<li>Suurem koormus (85% p\u00e4ringutest oli lugemiseks). <\/li>\n<li>Andmebaas kasvas. Selle t\u00f5ttu muutusid selle hooldamine ja hind probleemiks.<\/li>\n<li>\u00dcksik rikkepunkt. Kui m\u00f5ni rakendus, mis andmebaasi andmeid kirjutas, hakkas \u00e4kki seda aktiivsemalt tegema, tundsid teised rakendused seda ka.<\/li>\n<li>Ebaefektiivne andmete s\u00e4ilitamine ja p\u00e4ringud. Sageli olid andmed salvestatud mingis struktuuris, mis sobis m\u00f5nele stsenaariumile, kuid mitte teistele. Indekseerimine kiirendas \u00fchte tegevust, kuid v\u00f5is teised aeglustada.<\/li>\n<li>M\u00f5ned probleemid lahendasid kiirustades tehtud vahem\u00e4lud ja read-replikaandmebaasid (sellest kirjutatakse eraldi artiklis), kuid need lahendasid vaid ajutiselt probleemi ega lahendanud seda p\u00f5him\u00f5tteliselt.<\/li>\n<\/ul>\n<p>\n<b>Probleemiks oli monoliidi olemasolu<\/b>. Tagaj\u00e4rjed olid j\u00e4rgmised:<\/p>\n<ul>\n<li>\u00dcksikud ja harvad v\u00e4ljalasked.<\/li>\n<li>Paljude inimeste koost\u00f6\u00f6 arendamise keerukus.<\/li>\n<li>Uute tehnoloogiate, uute raamistikute ja teekide lisamise v\u00f5imatust. <\/li>\n<\/ul>\n<p>\nAndmebaasi ja monoliidi probleeme on korduvalt k\u00e4sitletud, n\u00e4iteks 2018. aasta alguses juhtunud kukkumiste 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 peatus. As\u00fcnkroonne stsenaarium<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/498280\/\">Lugu Dodo linnust, Feniksite sugukonnast. Dodo IS-i suur kukkumine<\/a><\/noindex>), nii et ei j\u00e4\u00e4ks pikalt peatuma. \u00dctlen vaid, et soovisime teenuste arendamisel suuremat paindlikkust. Eelk\u00f5ige kehtis see k\u00f5ige koormatumate ja s\u00fcsteemi p\u00f5hielementide \u2014 Auth ja Tracker \u2014 kohta.<\/p>\n<h2>Back-office\u2019i tee: eraldi andmebaasid ja buss<\/h2>\n<p><\/p>\n<blockquote><p><b>Navigatsioon peat\u00fckis<\/b><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"#Q0\">Monoliidi skeem 2016. aastal<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#Q1\">Alustame monoliidi koormuse v\u00e4hendamist: Auth ja Tracker eraldamine<br \/>\n<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#Q2\">Millega tegeleb 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\">Millega tegeleb 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>Monoliidi skeem 2016. aastal<\/h4>\n<p>\nEes on Dodo IS 2016. aasta p\u00f5hiblokid, ja natuke allpool on nende p\u00f5hifunktsioonide seletus. <br \/>\n<img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/25ae104d94957aebbbab6d54ebb62f5e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Kohaletoimetamise kassa.<\/b> Kullerite registreerimine, tellimuste \u00fcleandmine kulleritele.<br \/>\n<b>Kontaktikeskus<\/b>. Tellimuste vastuv\u00f5tt operaatori kaudu. <br \/>\n<b>Veebisait<\/b>. Meie veebisaidid (dodopizza.ru, dodopizza.co.uk, dodopizza.by jne).<br \/>\n<b>Auth<\/b>. Autoriseerimise ja autentimise teenus back-office jaoks.<br \/>\n<b>Tracker<\/b>. Tellimuste j\u00e4lgimine k\u00f6\u00f6gis. Teenus tellimuste valmiduse staatuste m\u00e4rkimiseks ettevalmistamise ajal. <br \/>\n<b>Restoranikassa<\/b>. Tellimuste vastuv\u00f5tt restoranis, kassapidaja liidesed.<br \/>\n<b>Export<\/b>. Aruannete eksport 1C raamatupidamise jaoks.<br \/>\n<b>Teavitused ja saatedokumendid<\/b>. H\u00e4\u00e4lek\u00e4sklused k\u00f6\u00f6gis (n\u00e4iteks \u201eUus pitsasaatmine\u201c) + saatedokumentide printimine kulleritele.<br \/>\n<b>Vahetuse juht<\/b>. Liidesed vahetuse juhi t\u00f6\u00f6ks: tellimuste nimekiri, tootlikkuse graafikud, t\u00f6\u00f6tajate v\u00e4ljakutsumine vahetusse. <br \/>\n<b>Kontori juht<\/b>. Fransiiside ja juhendajate t\u00f6\u00f6liidesed: t\u00f6\u00f6tajate vastuv\u00f5tt, pitsarestorani t\u00f6\u00f6 aruanded.<br \/>\n<b>Restorani ekraan<\/b>. Men\u00fc\u00fc kuvamine restoranide televiisorites.<br \/>\n<b>Adminpaneel<\/b>. Spetsiifilised seaded konkreetsele pitsarestoranile: men\u00fc\u00fc, hinnad, arvestus, sooduskoodid, kampaaniad, veebisaidi reklaamid jne.<br \/>\n<b>T\u00f6\u00f6taja kasutajaruum<\/b>. T\u00f6\u00f6tajate t\u00f6\u00f6 graafikud, t\u00f6\u00f6tajate teave.<br \/>\n<b>K\u00f6\u00f6gimotivatsiooni ekraan<\/b>. Eraldi ekraan, mis ripub k\u00f6\u00f6gis ja kuvab pitsameistrite t\u00f6\u00f6tamise kiirus.<br \/>\n<b>Suhtlemine<\/b>. SMS ja emailide saatmine.<br \/>\n<b>FileStorage<\/b>. Omandatud teenus staatiliste failide vastuv\u00f5tmiseks ja andmiseks.<\/p>\n<p>Esimesed katsed probleemide lahendamiseks aitasid meid, kuid olid vaid ajutine hinget\u00f5mme. Need ei kujunenud s\u00fcsteemseteks lahendusteks, seet\u00f5ttu oli selge, et andmebaasidega tuleb midagi ette v\u00f5tta. N\u00e4iteks jagada \u00fcldine andmebaas mitmeks spetsialiseeritud. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q1\"><\/a><\/noindex><\/p>\n<h4>Alustame monoliidi koormuse v\u00e4hendamist: Auth ja Tracker eraldamine<\/h4>\n<p>\nP\u00f5hiteenused, mis siis enim andmebaasist andmeid lugesid ja kirjutasid:<\/p>\n<ol>\n<li>Auth. Autoriseerimise ja autentimise teenus back-office jaoks.<\/li>\n<li>Tracker. Tellimuste j\u00e4lgimine k\u00f6\u00f6gis. Teenus tellimuste valmiduse staatuste m\u00e4rkimiseks ettevalmistamise ajal. <\/li>\n<\/ol>\n<p>\n<noindex><a rel=\"nofollow\" name=\"Q2\"><\/a><\/noindex><\/p>\n<h4>Millega tegeleb Auth<\/h4>\n<p>\nAuth on teenus, mille kaudu kasutajad logivad back-office'i (klientide osas eraldi s\u00f5ltumatu sisselogimine). Samuti p\u00f6\u00f6rdutakse selle poole, et veenduda, et olemas on vajalikud juurdep\u00e4\u00e4sud ja et need \u00f5igused pole alates viimast sisselogimist muutunud. Just selle kaudu toimub seadmete sisenemine pitsarestoranides. <\/p>\n<p>N\u00e4iteks tahame avada elutoa seinal rippuval teleril valmis tellimuste staatuste tabelit. Siis avame auth.dodopizza.ru, valime \"Logi sisse seadmena\", ilmub kood, mille saab sisestada vahetuse juhataja arvuti spetsiaalsesse lehek\u00fclge, m\u00e4rkides seadme t\u00fc\u00fcbi. Teler suundub ise oma pizzeriasse vajaliku liidese juurde ja hakkab seal kuvama klantide nimesid, kelle tellimused on valmis. <\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" 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 logitud kasutaja tagab iga p\u00e4ringu puhul andmebaasi, kasutajate tabelisse, kasutades SQL-p\u00e4ringut, ja t\u00f5mbab sealt kasutaja, kontrollides, kas tal on vajalikud \u00f5igused ja juurdep\u00e4\u00e4s sellele lehek\u00fcljele. <\/p>\n<p>Iga seade teeb samu toiminguid ainult seadmete tabeliga, kontrollides oma rolli ja \u00f5igusi. Suur hulk p\u00e4ringuid meistrandmebaasi p\u00f5hjustab selle koormuse ja ressursside kulu \u00fchises andmebaasis nende operatsioonide t\u00f5ttu.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q4\"><\/a><\/noindex><\/p>\n<h4>V\u00e4hendame Authi koormust<\/h4>\n<p>\nAuth'il on isoleeritud domeen, st kasutajate, sisse logimiste v\u00f5i seadmete andmed l\u00e4hevad teenusesse (praegu veel tulevikus) ja j\u00e4\u00e4vad sinna. Kui kellelgi neid vajatakse, siis l\u00e4heb ta selle teenuse poole andmete saamiseks.<\/p>\n<p><b>OLI.<\/b> T\u00f6\u00f6skeem algselt oli selline:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" 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\u00e4ljast tuleb tagasi (seal on Asp.Net MVC), tuues endaga kaasa sessioonik\u00fcpsise, mida kasutatakse sessiooniteabe saamiseks Redis'ist (1). Sel on kas \u00f5iguste teave ja siis on juurdep\u00e4\u00e4s kontrollerisse avatud (3,4), v\u00f5i mitte. <\/li>\n<li>Kui juurdep\u00e4\u00e4su pole, tuleb l\u00e4bida autentimise protseduur. Siin on lihtsustamiseks see n\u00e4idatud sama atribuudina teel, kuigi see on \u00fcleminek sisselogimise lehele. Positiivse stsenaariumi korral saame \u00f5igesti t\u00e4idetud sessiooni ja liikumme Backoffice Controller'i. <\/li>\n<li>Kui andmed on olemas, tuleb kontrollida nende ajakohasust kasutajate andmebaasis. Kas tema roll on muutunud, kas teda tuleb n\u00fc\u00fcd sellele lehele lubamata j\u00e4tta. Sel juhul peab sessiooni saamise j\u00e4rel (1) minema otse andmebaasi ja kontrollima kasutaja \u00f5igusi autentimise loogika kihi (2) abil. Edasi kas sisselogimise lehele v\u00f5i liikuda kontrollerisse. Selline lihtne s\u00fcsteem, kuid mitte p\u00e4ris standardne.<\/li>\n<li>Kui k\u00f5ik protseduurid on l\u00e4bitud, siis laseme edasi kontrollerite ja meetodite loogikas. <\/li>\n<\/ol>\n<p>\nKasutajate andmed on eraldatud k\u00f5ikidest teistest andmetest, need hoitakse eraldi membership tabelis, AuthService loogikakihi funktsioonid v\u00f5ivad t\u00e4iesti vabalt muutuda API meetoditeks. Domeeni piirid on \u00fcsna selgelt m\u00e4\u00e4ratletud: kasutajad, nende rollid, juurdep\u00e4\u00e4suandmed, juurdep\u00e4\u00e4su v\u00e4ljastamine ja tagasiv\u00f5tmine. K\u00f5ik n\u00e4eb v\u00e4lja nagu v\u00f5iksime selle viia eraldi teenusesse.<\/p>\n<p><b>OLEMAS.<\/b> Nii ka tehti:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/3e8629b75ae68b95afa475286d4c5d2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSellel l\u00e4henemisel on mitmeid probleeme. N\u00e4iteks, meetodi kutsumine protsessi sees ei ole sama, mis v\u00e4list teenust HTTP kaudu kutsuda. Latentsus, usaldusv\u00e4\u00e4rsus, hooldatavus, operatsiooni l\u00e4bipaistvus on t\u00e4iesti erinevad. \u00dcksikasjalikult sellistest probleemidest r\u00e4\u00e4kis Andrei Morevski oma ettekandes <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XeNrWkRmVWw\">\u201e50 varjundit mikroteenustest\u201c<\/a><\/noindex>.<\/p>\n<p>Autentimise teenust ja seonduvat seadmete teenust kasutatakse back-office'is, st teenuste ja liideste jaoks, mida kasutatakse tootmises. Klientide teenuste (n\u00e4iteks veebilehe v\u00f5i mobiilirakenduse) autentimine toimub eraldi, kasutamata Auth'i. Eraldamine kestis umbes aasta, ja n\u00fc\u00fcd tegeleme selle teemaga taas, viies s\u00fcsteemi \u00fcle uutele autentimise teenustele (tavap\u00e4raste protokollidega). <\/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 riikide andmebaasidest \u00fchte. Selleks tuli liikuda k\u00f5igi tabelite ja int tuvastamise kasutamiselt globaalse ID UUId'ni (oleme hiljuti seda koodi \u00fcle t\u00f6\u00f6tanud) <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=OGK4Lkd6p6s\">Roman Bukin \u201eUuid \u2014 suur lugu v\u00e4ikesest struktuurist\u201c<\/a><\/noindex> ja open-source projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dodopizza\/primitives\">Primitives<\/a><\/noindex>). Kasutajate andmete s\u00e4ilitamisel (arvestades, et tegu on isikuandmetega) on oma piirangud ja teatud riikides tuleb neid hoida eraldi. Kuid kasutaja globaalne identifikaator peab olema.<\/li>\n<li>Paljud tabelid andmebaasis sisaldavad auditi teavet selle kasutaja kohta, kes tegi operatsiooni. See n\u00f5udis t\u00e4iendavat mehhanismi, et tagada j\u00e4rjepidevus.<\/li>\n<li>P\u00e4rast API teenuste loomist oli pikk ja j\u00e4rkj\u00e4rguline \u00fcleminekuperiood teisele s\u00fcsteemile. \u00dcleminekud pidid toimuma kasutajatele sujuvalt ja n\u00f5udsid k\u00e4sit\u00f6\u00f6d.<\/li>\n<\/ol>\n<p>Seadme registreerimise skeem pizzeria:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" 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 teenuste eraldamist:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/069d176197674ef8414981ac98f30704.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><b>M\u00e4rkus<\/b>. Aastal 2020 t\u00f6\u00f6tame uue Auth versiooni kallal, mis p\u00f5hineb OAuth 2.0 autoriseerimisstandardil. See standard on \u00fcsna keeruline, kuid on vajalik l\u00f5ppautentimisteenuse arendamiseks. Artiklis \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/520046\/\">Autoriseerimise n\u00fcansid: OAuth 2.0 tehnoloogia \u00fclevaade<\/a><\/noindex>\u201c on Aleksei T\u0161ernjaev p\u00fc\u00fcdnud standardit esitada v\u00f5imalikult lihtsalt ja arusaadavalt, et te saaksite aega selle \u00f5ppimise pealt kokku hoida.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q5\"><\/a><\/noindex><\/p>\n<h4>Millega tegeleb Tracker <\/h4>\n<p>\nN\u00fc\u00fcd r\u00e4\u00e4gime teisest \u00fclekoormatud teenusest. J\u00e4lgija t\u00e4idab kaht erinevat rolli:<\/p>\n<ul>\n<li>Esiteks, selle \u00fclesanne on n\u00e4idata k\u00f6\u00f6git\u00f6\u00f6tajatele, millised tellimused on praegu t\u00f6\u00f6s, milliseid tooteid tuleb praegu valmistada. <\/li>\n<li>Teiselt poolt - digitaliseerida k\u00f5ik k\u00f6\u00f6gis toimuvad protsessid. <\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/5d13756308ee0cdb6e4000489b6b402d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui tellimuses ilmub uus toode (nt pizza), satub see j\u00e4lgija jaama \u201eRullimine\u201c. Selles jaamas on pizzameister, kes v\u00f5tab vajamineva suurusega t\u00fckikese ja rullib selle lahti, seej\u00e4rel m\u00e4rgib ta j\u00e4lgija tahvlil, et on oma \u00fclesande t\u00e4itnud, ja edastab rullitud p\u00f5hjuse j\u00e4rgmisse jaama - \u201eT\u00e4iendamine\u201c. <\/p>\n<p>Seal t\u00e4idab j\u00e4rgmine pizzameister pitsa, seej\u00e4rel m\u00e4rgib ta j\u00e4lgija tahvlil, et on oma \u00fclesande t\u00e4itnud ja paneb pitsa ahju (see on samuti eraldi jaam, mille tuleb tahvlil m\u00e4rkida). Selline s\u00fcsteem oli algusest peale Dodo's ja Dodo IS-i esialgsest olemisest peale. See v\u00f5imaldab t\u00e4ielikult j\u00e4lgida ja digitaliseerida k\u00f5iki operatsioone. Lisaks annab j\u00e4lgija n\u00e4pun\u00e4iteid, kuidas valmistada erinevaid tooteid, viib iga toote oma valmistamisprotseduuride j\u00e4rgi, talletab toote optimaalse k\u00fcpsetamise aja ja j\u00e4lgib k\u00f5iki operatsioone toote \u00fcle. <\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/d745bf6f981c1a5b43e6091b090644ad.png\" style=\"display:block;margin: 0 auto;\" \/><i>Nii n\u00e4eb j\u00e4lgija \u201eRullimine\u201c jaamas tahvli ekraan v\u00e4lja<\/i><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"Q6\"><\/a><\/noindex><\/p>\n<h4>Kust koormus tuleb? <\/h4>\n<p>\nIgas pizzakettis on umbes viis tahvelarvutit, mis on varustatud j\u00e4lgijatega. 2016. aastal oli meil \u00fcle 100 pizzeria (ja n\u00fc\u00fcd \u00fcle 600). Iga tahvelarvuti teeb igal 10 sekundi j\u00e4rel p\u00e4ringu tagaplaanile ja t\u00f5mbab andmeid tellimuste tabelist (seos kliendi ja aadressiga), tellimuse koostisest (seos toote ja koguse n\u00e4iduga), motiveerimise arvestuse tabelist (kus j\u00e4lgitakse vajutamise aega). Kui pizzameister aktiveerib toote j\u00e4lgijal, v\u00e4rskendatakse kirjeid k\u00f5igis nendes tabelites. Tellimuste tabel on \u00fchine ja sinna tehakse samal ajal sisestusi tellimuse vastuv\u00f5tmisel, s\u00fcsteemi teistest osadest uuendusi ja rohkelt lugemisi, n\u00e4iteks telekas, mis on pizzarias ja n\u00e4itab valmis tellimusi klientidele. <\/p>\n<p>Koormustega v\u00f5itlemise ajal, kui k\u00f5ik mida ainult sai vahem\u00e4lus hoida ja viia asynchronous replika andmebaasi, j\u00e4tkasid need toimingud j\u00e4lgijaga peandmebaasi suunamist. Siin ei peaks olema mingit viivitust, andmed peavad olema ajakohased, des\u00fcnkroniseerimine on lubamatu.<\/p>\n<p>Samuti ei v\u00f5imaldanud omade tabelite ja indeksite puudumine kirjutada spetsiifilisemaid p\u00e4ringuid, mis oleksid kohandatud meie kasutamiseks. N\u00e4iteks peab j\u00e4lgijatel olema efektiivne indeks pizzeria tellimuste tabelis. Me t\u00f5mbame alati j\u00e4lgijast tellimusi pizzeria kaupa. Tellimuse vastuv\u00f5tmisel ei ole t\u00e4htis, millisesse pizzarisse see langeb, oluline on, milline klient selle tellimuse tegi. Seega peab seal olema indeks kliendi j\u00e4rgi. Samuti pole j\u00e4lgijale tellimuste tabelis vajalik salvestada printimise t\u0161eki id-d v\u00f5i seotud tellimuse boonuspakkumisi. See teave ei huvita meie j\u00e4lgimisteenust. \u00dchises monoliitses andmebaasis v\u00f5isid tabelid olla ainult k\u00f5igi kasutajate vahel lepitavate kompromisside variant. See oli \u00fcks algseid probleeme.<\/p>\n<p><b>OLI. <\/b>Algne arhitektuur oli selline:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/085ebab3131ae5edc772d1e6f8c6de76.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIsegi p\u00e4rast eraldamist eraldi protsessidesse j\u00e4i enamik koodibaasist erinevate teenuste jaoks \u00fchine. K\u00f5ik, mis oli kontrolleritest madalamal, oli \u00fchtne ja elas \u00fches hoidlas. Kasutati \u00fchiseid teenuse meetodeid, hoidlaid, \u00fchist andmebaasi, kus olid \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\u00e4lgijas seisneb selles, et andmed peavad olema s\u00fcnkroniseeritud erinevate andmebaaside vahel. See on ka peamine erinevus autoriseerimisteenuse jagamisest, kus tellimus ja selle staatus v\u00f5ivad muutuda ja peavad olema n\u00e4htavad erinevates teenustes. <\/p>\n<p>Me aktsepteerime tellimusi Restorani Kassas (see on teenus), see salvestatakse andmebaasi staatusega \u201eVastu v\u00f5etud\u201c. P\u00e4rast seda peab see j\u00f5udma j\u00e4lgijasse, kus see muudab oma staatust veel mitu korda: alates \u201eK\u00f6\u00f6k\u201c kuni \u201ePakitud\u201c. Sel ajal v\u00f5ivad tellimusele avaldada mingit v\u00e4lism\u00f5ju Kassas v\u00f5i vahetuse juhtimise liideses. Esitan tellimuse staatuste ja nende kirjelduste tabelis:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/b6a5a586a3f65715acccea2114725c8e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTellimuse staatuste muutmise skeem n\u00e4eb v\u00e4lja j\u00e4rgmine:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" 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 ei ole j\u00e4lgija l\u00f5pp-s\u00fcsteem, kus andmed suletakse. Oleme n\u00e4inud mitu v\u00f5imalikku l\u00e4henemist eraldamiseks sellisel juhul:<\/p>\n<ol>\n<li><b>Keskendame k\u00f5ik tellimuse toimingud \u00fches teenuses.<\/b> Meie puhul n\u00f5uab see variant tellimuse haldamiseks liiga suurt teenust. Kui me oleksime sellega piirdunud, oleksime saanud teise monoliidi. Probleeme me ei lahendanud.<\/li>\n<li><b>\u00dcks s\u00fcsteem kutsub teist.<\/b> Teine variant on juba huvitavam. Kuid selle puhul on v\u00f5imalikud kutsumise ahelad (<noindex><a rel=\"nofollow\" href=\"https:\/\/landing.google.com\/sre\/sre-book\/chapters\/addressing-cascading-failures\/\">kaskaadsed t\u00f5rked<\/a><\/noindex>), komponentide seotuse tase on k\u00f5rgem, seda on raskem hallata. <\/li>\n<li><b>Korraldame s\u00fcndmused ja iga teenus vahetab nende s\u00fcndmuste kaudu teavet \u00fcksteisega.<\/b> L\u00f5ppkokkuv\u00f5ttes valiti t\u00f5epoolest kolmas variant, mille kohaselt k\u00f5ik teenused hakkavad omavahel s\u00fcndmusi vahetama. <\/li>\n<\/ol>\n<p>\nSee, et valisime kolmanda variandi, t\u00e4hendas, et j\u00e4lgijal on oma andmebaas ja iga tellimuse muutuse korral saadab ta sellest s\u00fcndmuse, millele teised teenused liituvad ja mis j\u00f5uab ka p\u00f5hivaramusse. Selleks oli meil vaja mingit teenust, mis tagaks s\u00f5numite edastamise teenuste vahel. <\/p>\n<p>Sel ajal oli meil stacks juba RabbitMQ, seega otsustasime kasutada seda s\u00f5numite vahendajana. Skeemil on n\u00e4idatud tellimuse liikumine Restorani Kassast l\u00e4bi J\u00e4lgija, kus see muudab oma staatusi ja kuvatakse juhi Tellimustes. <b>MUUTUS<\/b>: <\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" 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 \u00fches tellimuse allikas\u00fcsteemis. Siin on see Restorani Kassas: <\/p>\n<ol>\n<li>Kassas on tellimus t\u00e4ielikult valmis ja on aeg see j\u00e4lgimisse saata. \u00dcritus, millele j\u00e4lgija on registreeritud, k\u00e4ivitatakse. <\/li>\n<li>J\u00e4lgija, vastu v\u00f5ttes tellimust, salvestab selle oma andmebaasi, tehes sellega \u00fcrituse \u201eTellimusVastuv\u00f5etudJ\u00e4lgija\u201c ja saates selle RMQ-sse. <\/li>\n<li>Tellimuse \u00fcritusel on juba mitu t\u00f6\u00f6tlejat registreeritud. Meile on oluline see, mis teeb s\u00fcnkroonimise monoliitsete andmetega. <\/li>\n<li>T\u00f6\u00f6tleja v\u00f5tab \u00fcrituse vastu, valib sellest endast olulised andmed: meie puhul tellimuse staatus \u201eVastuv\u00f5etudJ\u00e4lgija\u201c ja uuendab oma tellimuse entiteeti p\u00f5hivaatlemise andmebaasis. <\/li>\n<\/ol>\n<p>Kui kellelgi on vaja tellimust just monoliitsest orders tabelist, siis saab seda sealt lugeda. N\u00e4iteks on see vajalik tellimuste liidese jaoks Vahetuse Halduris:<\/p>\n<p><img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/97c16e7fecd6709aad7e10f9dff6c037.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00f5ik teised teenused saavad samuti tellimuse \u00fcritustele j\u00e4lgijast registreeruda, et neid enda jaoks kasutada.<\/p>\n<p>Kui tellimus v\u00f5etakse m\u00f5ne aja p\u00e4rast t\u00f6\u00f6le, siis muudab selle staatus esmalt oma andmebaasis (J\u00e4lgija andmebaasis) ja siis genereeritakse kohe \u00fcritus \u201eTellimusT\u00f6\u00f6s\u201c. See j\u00f5uab samuti RMQ-sse, kust s\u00fcnkroonitakse monoliitsesse andmebaasi ja edastatakse teistele teenustele. Sellel teel v\u00f5ivad esineda erinevad probleemid, millega saab tutvuda \u017denja Pe\u0161kovi ettekandes. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=DWfJWCWV_eQ\">detailide rakendamise kohta Eventual Consistency J\u00e4lgijas<\/a><\/noindex>. <\/p>\n<h4>L\u00f5plik arhitektuur p\u00e4rast muudatusi Authis ja J\u00e4lgijas<\/h4>\n<p>\n<img decoding=\"async\" alt=\"Dodo IS arhitektuuri ajalugu: tahke kontoriteed\" src=\"\/wp-content\/uploads\/2020\/10\/7cc517f78c8a381bd570cd26be25ace0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><b>Kokkuv\u00f5tlikult:<\/b> alguses soovisin kokku panna \u00fche artikli Dodo IS s\u00fcsteemi \u00fcheksa-aastasest ajaloost. Olin taheline kiiresti ja lihtsalt r\u00e4\u00e4kida evolutsiooni etappidest. Kuid materjali kirjutades m\u00f5istsin, et k\u00f5ik on palju keerulisem ja huvitavam, kui tundub. <\/p>\n<p>M\u00f5eldes selle materjali kasule (v\u00f5i puudumisele), j\u00f5udsin j\u00e4reldusele, et pidev areng ei ole v\u00f5imalik ilma p\u00f5hjalike s\u00fcndmuste kroonikuteta, ulatuslike retrospektiivide ja oma varasemate otsuste anal\u00fc\u00fcsita.<\/p>\n<p>Loodan, et teile oli kasulik ja huvitav tutvuda meie teekonnaga. Praegu olen silmitsi valikuga, millise osa Dodo IS-st j\u00e4rgmises artiklis kirja panna: kirjutage kommentaarides 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\">Millest Dodo IS-st sooviksite j\u00e4rgmises artiklis rohkem teada saada?<\/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-s (2011-2015)14<\/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)14<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,7%<\/strong>Kliendi osa tee: fassaad andmebaasi kohal (2016-2017)12<\/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)21<\/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\u00f5plik l\u00f5hkumine ja arhitektuuri stabiliseerimine26<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">29,3%<\/strong>Edasised plaanid s\u00fcsteemi arendamiseks17<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">19,0%<\/strong>Ma ei taha Dodo IS-ist midagi teada11<\/p>\n<\/li>\n<\/ul>\n<p>    58 kasutajat h\u00e4\u00e4letasid. 6 kasutajat j\u00e4id erapooletuks.<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 5.0.1.1 - 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.\" \/>\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) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Dodo IS: \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.\" \/>\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'i tee | ProHoster","description":"Habr muudab maailma. Oleme oma blogi pidanud rohkem kui aasta. Kusagil pool aastat tagasi saime \u00fcsna loogilise tagasiside habrovanitelt: \"Dodo, te r\u00e4\u00e4gite, et teil on oma s\u00fcsteem.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/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}]}}