{"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\/hu\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit","title":{"rendered":"A Dodo IS architekt\u00far\u00e1ja: korai monolit","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Vagy minden szerencs\u00e9tlen v\u00e1llalat a maga m\u00f3dj\u00e1n boldogtalan.<\/p>\n<p>A Dodo IS rendszer fejleszt\u00e9se azonnal a Dodo Pizza \u00fczlet kezdete ut\u00e1n, 2011-ben indult. Az alap\u00f6tlet a teljes \u00e9s tot\u00e1lis digit\u00e1lis \u00fczleti folyamatok megval\u00f3s\u00edt\u00e1sa volt, <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2011\/08\/30\/sobstvennaya-sistema\/\"><u>saj\u00e1t er\u0151b\u0151l<\/u><\/a><\/noindex>, ami akkoriban, 2011-ben sok k\u00e9rd\u00e9st \u00e9s szkepticizmust v\u00e1ltott ki. De m\u00e1r 9 \u00e9ve ezen az \u00faton haladunk \u2013 a saj\u00e1t fejleszt\u00e9s\u00fcnkkel, ami a monolithb\u00f3l indult.<\/p>\n<p>Ez a cikk a \"Mi\u00e9rt kell \u00fajra\u00edr\u00e1ni az architekt\u00far\u00e1t \u00e9s v\u00e9gezni ilyen nagyszab\u00e1s\u00fa \u00e9s hossz\u00fa v\u00e1ltoztat\u00e1sokat?\" k\u00e9rd\u00e9sekre ad v\u00e1laszt, az el\u0151z\u0151 cikkre <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/506136\/\"><u>\"A Dodo IS architekt\u00far\u00e1j\u00e1nak t\u00f6rt\u00e9nete: a h\u00e1tt\u00e9r\"<\/u><\/a><\/noindex>. Kezdem azzal, hogyan indult a Dodo IS fejleszt\u00e9se, hogy n\u00e9zett ki az eredeti architekt\u00fara, hogyan jelentek meg az \u00faj modulok, \u00e9s hogy mely probl\u00e9m\u00e1k miatt kellett nagyszab\u00e1s\u00fa v\u00e1ltoz\u00e1sokat v\u00e9grehajtani.<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/881fe068f46f934dc9730a5946996da3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<p><strong>A \"Mi az a Dodo IS?\" cikk sorozat besz\u00e1mol az al\u00e1bbiakr\u00f3l:<\/strong><\/p>\n<\/blockquote>\n<ol>\n<li>\n<p>A Dodo IS korai monolitja (2011-2015). (Itt vagy \u00d6n)<\/p>\n<\/li>\n<li>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/506136\/\">A h\u00e1tt\u00e9r \u00fatja: k\u00fcl\u00f6n adatb\u00e1zisok \u00e9s busz<\/a><\/noindex>.<\/p>\n<\/li>\n<li>\n<p>A kliens oldali \u00fat: homlokzat az adatb\u00e1zis felett (2016-2017). (Folyamatban\u2026)<\/p>\n<\/li>\n<li>\n<p>A val\u00f3di mikroszolg\u00e1ltat\u00e1sok t\u00f6rt\u00e9nete. (2018-2019). (Folyamatban\u2026)<\/p>\n<\/li>\n<li>\n<p>A monolit v\u00e9gleges feloszt\u00e1sa \u00e9s az architekt\u00fara stabiliz\u00e1l\u00e1sa. (Folyamatban\u2026)<\/p>\n<\/li>\n<\/ol>\n<h3>Eredeti architekt\u00fara<\/h3>\n<p>2011-ben a Dodo IS architekt\u00far\u00e1ja \u00edgy n\u00e9zett ki:<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/93814518ca50678933f2591749e3e489.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Az els\u0151 modul az architekt\u00far\u00e1ban a rendel\u00e9sfelv\u00e9tel volt. Az \u00fczleti folyamat a k\u00f6vetkez\u0151k\u00e9ppen alakult:<\/p>\n<ul>\n<li>\n<p>az \u00fcgyf\u00e9l telefon\u00e1l a pizz\u00e9ri\u00e1ba;<\/p>\n<\/li>\n<li>\n<p>a telefont a menedzser veszi fel;<\/p>\n<\/li>\n<li>\n<p>telefonon \u00e1tveszi a rendel\u00e9st;<\/p>\n<\/li>\n<li>\n<p>p\u00e1rhuzamosan adatokat r\u00f6gz\u00edt az rendel\u00e9sfelv\u00e9teli fel\u00fcleten: figyelembe veszik az \u00fcgyf\u00e9l adatait, a rendel\u00e9s r\u00e9szleteit, a sz\u00e1ll\u00edt\u00e1si c\u00edmet.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Az informatikai rendszer fel\u00fclete k\u00f6r\u00fclbel\u00fcl \u00edgy n\u00e9zett ki...<\/p>\n<p>Az els\u0151 verzi\u00f3 2011 okt\u00f3ber\u00e9b\u0151l:<\/p>\n<p><center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/5f75cfa9779ba700bea78afc\" frameborder=\"0\" allowfullscreen><\/iframe><\/center>Kicsit jav\u00edtott verzi\u00f3 2012 janu\u00e1rj\u00e1ban<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/h2Cdht01gDA\">Dodo Pizza Inform\u00e1ci\u00f3s Rendszer Delivery Pizza Restaurant<\/a><\/noindex><\/p>\n<p>Az els\u0151 rendel\u00e9sfelv\u00e9teli modul fejleszt\u00e9s\u00e9re sz\u00e1nt forr\u00e1sok korl\u00e1tozottak voltak. Sok mindent kellett gyorsan \u00e9s kis csapattal megval\u00f3s\u00edtani. A kis csapat \u2013 2 fejleszt\u0151 \u2013 alapozta meg az eg\u00e9sz j\u00f6v\u0151beli rendszert.<\/p>\n<p>Els\u0151 d\u00f6nt\u00e9s\u00fck meghat\u00e1rozta a technol\u00f3giai stack tov\u00e1bbi sors\u00e1t:<\/p>\n<ul>\n<li>\n<p>Backend ASP.NET MVC-n, C# nyelven. A fejleszt\u0151k dotnet-esek voltak, ez a stack ismert \u00e9s kedvelt volt sz\u00e1mukra. <\/p>\n<\/li>\n<li>\n<p>Frontend Bootstrap \u00e9s JQuery seg\u00edts\u00e9g\u00e9vel: felhaszn\u00e1l\u00f3i fel\u00fcletek egyedi st\u00edlusokkal \u00e9s szkriptekkel.&nbsp;<\/p>\n<\/li>\n<li>\n<p>MySQL adatb\u00e1zis: licenszek n\u00e9lk\u00fcl, egyszer\u0171en haszn\u00e1lhat\u00f3.<\/p>\n<\/li>\n<li>\n<p>Szerverek Windows Serveren, mert a .NET akkoriban csak Windows alatt m\u0171k\u00f6dhetett (a Mono-t nem vitatjuk).<\/p>\n<\/li>\n<\/ul>\n<p>Fizikailag ez mind a \u201ededik\u00e1lt szerver a szolg\u00e1ltat\u00f3n\u00e1l\u201d form\u00e1j\u00e1ban nyilv\u00e1nult meg.&nbsp;<\/p>\n<h4>A rendel\u00e9sfeldolgoz\u00f3 alkalmaz\u00e1s architekt\u00far\u00e1ja<\/h4>\n<p>Akkor m\u00e1r mindenki a mikroszolg\u00e1ltat\u00e1sokr\u00f3l besz\u00e9lt, m\u00edg a SOA k\u00f6r\u00fclbel\u00fcl 5 \u00e9vig haszn\u00e1latban volt nagyobb projektekn\u00e9l, p\u00e9ld\u00e1ul a WCF 2006-ban jelent meg. De akkor megb\u00edzhat\u00f3 \u00e9s bev\u00e1lt megold\u00e1st v\u00e1lasztottak.<\/p>\n<p>Itt van.<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/688da7d4e02a6310bf7d2da1b767fe10.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Az Asp.Net MVC a Razor, amely HTML-oldalt gener\u00e1l a b\u00f6ng\u00e9sz\u0151ben a form\u00e1r\u00f3l vagy a kliensr\u0151l \u00e9rkez\u0151 k\u00e9r\u00e9sre, a szerveren t\u00f6rt\u00e9n\u0151 renderel\u00e9ssel. A kliensoldalon a CSS \u00e9s a JavaScript jelen\u00edti meg az inform\u00e1ci\u00f3t, \u00e9s sz\u00fcks\u00e9g eset\u00e9n AJAX-k\u00e9r\u00e9seket hajt v\u00e9gre a JQuery-n kereszt\u00fcl.<\/p>\n<p>A k\u00e9rd\u00e9sek a szerver fel\u00e9 a *Controller oszt\u00e1lyokba \u00e9rkeznek, ahol a m\u00f3dszer feldolgozza \u00e9s gener\u00e1lja a v\u00e9gs\u0151 HTML-oldalt. A kontrollerek k\u00e9rd\u00e9seket int\u00e9znek a logikai r\u00e9teghez, amelyet *Services-nek neveznek. Minden szolg\u00e1ltat\u00e1s egy \u00fczleti aspektus\u00e9rt felelt:<\/p>\n<ul>\n<li>\n<p>P\u00e9ld\u00e1ul a DepartmentStructureService inform\u00e1ci\u00f3t biztos\u00edtott a pizz\u00e9ri\u00e1kr\u00f3l \u00e9s a r\u00e9szlegekr\u0151l. A r\u00e9szleg egy fr franchise-kezel\u00e9s alatt \u00e1ll\u00f3 pizz\u00e9ria csoport.<\/p>\n<\/li>\n<li>\n<p>A ReceivingOrdersService fogadta \u00e9s kisz\u00e1molta a rendel\u00e9s \u00f6sszet\u00e9tel\u00e9t.<\/p>\n<\/li>\n<li>\n<p>A SmsService SMS-t k\u00fcld\u00f6tt, API-szolg\u00e1ltat\u00e1sokat h\u00edvva meg az SMS-k\u00fcld\u00e9shez.<\/p>\n<\/li>\n<\/ul>\n<p>A szolg\u00e1ltat\u00e1sok adatokat dolgoztak fel az adatb\u00e1zisb\u00f3l, t\u00e1rolt\u00e1k az \u00fczleti logik\u00e1t. Minden szolg\u00e1ltat\u00e1sban volt egy vagy t\u00f6bb *Repository, azonos nev\u0171. Itt t\u00e1rolt\u00e1k a lek\u00e9rdez\u00e9seket a t\u00e1rolt elj\u00e1r\u00e1sokra az adatb\u00e1zisban, \u00e9s a lek\u00e9pez\u0151 r\u00e9teget. A t\u00e1rolt elj\u00e1r\u00e1sokban volt \u00fczleti logika, k\u00fcl\u00f6n\u00f6sen sok abban, amely riportadatokat szolg\u00e1ltatott. ORM nem volt haszn\u00e1latban, mindenki a k\u00e9zzel \u00edrt SQL-re t\u00e1maszkodott.&nbsp;<\/p>\n<p>Volt egy domainmodell r\u00e9teg \u00e9s k\u00f6z\u00f6s seg\u00e9doszt\u00e1lyok, p\u00e9ld\u00e1ul az Order oszt\u00e1ly, amely meg\u0151rizte a rendel\u00e9st. Ott volt m\u00e9g a r\u00e9tegben egy seg\u00e9d a megjelen\u00edt\u00e9si sz\u00f6veg valuta szerinti \u00e1tkonvert\u00e1l\u00e1s\u00e1ra.<\/p>\n<p>Mindezt egy ilyen modellel lehet elk\u00e9pzelni: <\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/ff76833cfd19e778bc6ad33589fc328b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>A rendel\u00e9s folyamata<\/h4>\n<p>Vegy\u00fck szem\u00fcgyre az egyszer\u0171s\u00edtett kezdeti folyamatot egy rendel\u00e9s l\u00e9trehoz\u00e1sakor.<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/da7334d6e6258b800618287de6e1d393.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Kezdetben az oldal statikus volt. Az \u00e1rak szerepeltek rajta, \u00e9s fel\u00fcl a telefonsz\u00e1m \u00e9s a felirat, hogy \u201eSzeretn\u00e9l pizz\u00e1t \u2013 h\u00edvd fel a sz\u00e1mot \u00e9s rendeld meg\u201d. A rendel\u00e9shez egyszer\u0171 folyamatot kell megval\u00f3s\u00edtanunk:&nbsp;<\/p>\n<ul>\n<li>\n<p>A kliens bel\u00e9p a statikus \u00e1raz\u00e1si oldalra, kiv\u00e1lasztja a term\u00e9keket \u00e9s felh\u00edvja a weboldalon felt\u00fcntetett sz\u00e1mot.<\/p>\n<\/li>\n<li>\n<p>A kliens nev\u00e9ben megnevezi azokat a term\u00e9keket, amelyeket hozz\u00e1 szeretne adni a rendel\u00e9shez.<\/p>\n<\/li>\n<li>\n<p>Megnevezi a c\u00edm\u00e9t \u00e9s a nev\u00e9t.<\/p>\n<\/li>\n<li>\n<p>Az oper\u00e1tor elfogadja a rendel\u00e9st.<\/p>\n<\/li>\n<li>\n<p>A rendel\u00e9s megjelenik az \u00e1tvett rendel\u00e9sek fel\u00fclet\u00e9n.<\/p>\n<\/li>\n<\/ul>\n<p>Minden a men\u00fc megjelen\u00edt\u00e9s\u00e9vel kezd\u0151dik. A bejelentkezett \u00fcgyf\u00e9l-\u00fczemeltet\u0151 egy id\u0151ben csak egy megrendel\u00e9st fogadhat el. Ez\u00e9rt a draft kos\u00e1r az \u0151 munkamenet\u00e9ben t\u00e1rolhat\u00f3 (a felhaszn\u00e1l\u00f3 munkamenet\u00e9t a mem\u00f3ria t\u00e1rolja). Itt tal\u00e1lhat\u00f3 a Cart objektum, amelyben a term\u00e9kek \u00e9s az \u00fcgyf\u00e9l inform\u00e1ci\u00f3i vannak.<\/p>\n<p>Az \u00fcgyf\u00e9l megnevezi a term\u00e9ket, az \u00fczemeltet\u0151 r\u00e1kattint a <code>+<\/code> melletti gombra, \u00e9s a szerverre k\u00fcld egy k\u00e9r\u00e9st. A term\u00e9khez inform\u00e1ci\u00f3kat nyer\u00fcnk a k\u00edn\u00e1latb\u00f3l, \u00e9s az inform\u00e1ci\u00f3t hozz\u00e1adjuk a kos\u00e1rhoz.<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/e481d7a5865efc1d37574225c6a0b89e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><strong>Megjegyz\u00e9s<\/strong>. Igen, itt nem sz\u00fcks\u00e9ges a term\u00e9ket megkeresni az adatb\u00e1zisb\u00f3l, \u00e1t lehet adni a front-end-b\u0151l is. De a vil\u00e1goss\u00e1g kedv\u00e9\u00e9rt bemutattam az adatb\u00e1zis \u00fatj\u00e1t.&nbsp;<\/p>\n<p>Ezut\u00e1n megadjuk az \u00fcgyf\u00e9l c\u00edm\u00e9t \u00e9s nev\u00e9t.&nbsp;<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/c40e29108a308015522cf219b6d7a515.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A \"Megrendel\u00e9s l\u00e9trehoz\u00e1sa\" gombra kattintva:<\/p>\n<ul>\n<li>\n<p>A k\u00e9r\u00e9st az OrderController.SaveOrder() met\u00f3dusba k\u00fcldj\u00fck.<\/p>\n<\/li>\n<li>\n<p>Megkapjuk a Cart-ot a munkamenetb\u0151l, ott a k\u00edv\u00e1nt mennyis\u00e9g\u0171 term\u00e9k tal\u00e1lhat\u00f3.<\/p>\n<\/li>\n<li>\n<p>Kieg\u00e9sz\u00edtj\u00fck a Cart-ot az \u00fcgyf\u00e9l inform\u00e1ci\u00f3ival, \u00e9s \u00e1tadjuk az AddOrder met\u00f3dusnak a ReceivingOrderService oszt\u00e1lyban, ahol az adatb\u00e1zisba mentj\u00fck.&nbsp;<\/p>\n<\/li>\n<li>\n<p>Az adatb\u00e1zisban vannak t\u00e1bl\u00e1k a megrendel\u00e9sekr\u0151l, a megrendel\u00e9sek \u00f6sszet\u00e9tel\u00e9r\u0151l \u00e9s az \u00fcgyfelekr\u0151l, ezek mind \u00f6sszekapcsol\u00f3dnak.<\/p>\n<\/li>\n<li>\n<p>A megrendel\u00e9s megjelen\u00edt\u0151je lek\u00e9rdezi az utols\u00f3 megrendel\u00e9seket, \u00e9s megjelen\u00edti azokat.<\/p>\n<\/li>\n<\/ul>\n<h4>\u00daj modulok<\/h4>\n<p>A megrendel\u00e9s kezel\u00e9se fontos \u00e9s sz\u00fcks\u00e9ges volt. Nincs pizza \u00e9rt\u00e9kes\u00edt\u00e9s, ha nincs megrendel\u00e9skezel\u00e9s. Ez\u00e9rt a rendszer folyamatosan b\u0151v\u00fclt funkcionalit\u00e1ssal \u2014 2012 \u00e9s 2015 k\u00f6z\u00f6tt. Ez id\u0151 alatt sok k\u00fcl\u00f6nb\u00f6z\u0151 blokk jelent meg a rendszerben, amelyeket \u00e9n blokkoknak fogok nevezni. <strong>moduloknak<\/strong>h\u00edvok, ellent\u00e9tben a szolg\u00e1ltat\u00e1s vagy term\u00e9k fogalm\u00e1val.&nbsp;<\/p>\n<p>A modul egy funkci\u00f3k\u00e9szlet, amelyeket valamilyen k\u00f6z\u00f6s \u00fczleti c\u00e9l egyes\u00edt. Ezek fizikailag egy alkalmaz\u00e1sban tal\u00e1lhat\u00f3k.<\/p>\n<p>A modulokat a rendszer blokkjainak is nevezhetj\u00fck. P\u00e9ld\u00e1ul ez a riport modul, az admin fel\u00fclet <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2011\/10\/20\/treking-zakazov\/\"><u>, a konyhai term\u00e9kek nyomoz\u00f3ja<\/u><\/a><\/noindex>, az azonos\u00edt\u00e1s. Ezek mind k\u00fcl\u00f6nb\u00f6z\u0151 felhaszn\u00e1l\u00f3i fel\u00fcletek, egyesek ak\u00e1r k\u00fcl\u00f6nb\u00f6z\u0151 vizu\u00e1lis st\u00edlusokkal is rendelkeznek. Mindek\u00f6zben mindez egyetlen alkalmaz\u00e1s keretein bel\u00fcl, egy m\u0171k\u00f6d\u0151 folyamatban.&nbsp;<\/p>\n<p>Technikailag a modulok Ter\u00fcletk\u00e9nt (Area) voltak megval\u00f3s\u00edtva (ez az \u00f6tlet a <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>). K\u00fcl\u00f6n f\u00e1jlok voltak a frontendhez, modellekhez, valamint saj\u00e1t vez\u00e9rl\u0151oszt\u00e1lyaik is. Ennek eredm\u00e9nyek\u00e9nt a rendszer \u00e1talakult az ilyen\u2026<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/cac789e252e0df13718adbc694c31596.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>...amely \u00edgy n\u00e9zett ki:<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/6c75b61b33488edbb0427e87dee14189.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>N\u00e9h\u00e1ny modult k\u00fcl\u00f6n weboldalk\u00e9nt val\u00f3s\u00edtottak meg (kivitelezhet\u0151 projekt), eg\u00e9szen k\u00fcl\u00f6n\u00e1ll\u00f3 funkcionalit\u00e1s miatt \u00e9s r\u00e9szben a r\u00e9szben k\u00fcl\u00f6n, f\u00f3kusz\u00e1ltabb fejleszt\u00e9s miatt. Ezek:<\/p>\n<ul>\n<li>\n<p><strong>Weboldal<\/strong> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2013\/08\/06\/new_site_dodopizza_ru\/\"><u>az els\u0151 verzi\u00f3ja<\/u><\/a><\/noindex> a dodopizza.ru weboldalnak.<\/p>\n<\/li>\n<li>\n<p><strong>Export<\/strong>: Jelent\u00e9sk\u00e9sz\u00edt\u00e9s a Dodo IS-b\u0151l az 1C sz\u00e1m\u00e1ra.&nbsp;<\/p>\n<\/li>\n<li>\n<p><strong>Szem\u00e9lyes<\/strong> \u2014 a munkav\u00e1llal\u00f3k szem\u00e9lyes fi\u00f3kja. K\u00fcl\u00f6n lett kifejlesztve, saj\u00e1t bel\u00e9p\u00e9si ponttal \u00e9s k\u00fcl\u00f6n diz\u00e1jnnal rendelkezik.<\/p>\n<\/li>\n<li>\n<p><strong>fs<\/strong> \u2014 projekt statikus tartalomhoz val\u00f3 t\u00e1rhelyez\u00e9sre. K\u00e9s\u0151bb elhagytuk, \u00e9s az \u00f6sszes statikus tartalmat az Akamai CDN-re helyezt\u00fck \u00e1t.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>A t\u00f6bbi blokk a BackOffice alkalmaz\u00e1sban tal\u00e1lhat\u00f3.&nbsp;<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/c48e67beca3937a2e6e2df78834fd05d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A nevek magyar\u00e1zata:<\/p>\n<ul>\n<li>\n<p>Cashier \u2014 a vend\u00e9gl\u00e1t\u00f3hely p\u00e9nzt\u00e1ra.<\/p>\n<\/li>\n<li>\n<p>ShiftManager \u2014 a \u201eM\u0171szakvezet\u0151\u201d szerephez tartoz\u00f3 fel\u00fcletek: az \u00e9tterem elad\u00e1si statisztik\u00e1ja, lehet\u0151s\u00e9g term\u00e9kek letilt\u00e1s\u00e1ra, rendel\u00e9s m\u00f3dos\u00edt\u00e1sa.<\/p>\n<\/li>\n<li>\n<p>OfficeManager \u2014 a \u201ePizz\u00e9ria vezet\u0151je\u201d \u00e9s a \u201eFranchise-tag\u201d szerephez tartoz\u00f3 fel\u00fcletek. Itt tal\u00e1lhat\u00f3 a pizz\u00e9ria be\u00e1ll\u00edt\u00e1s\u00e1val, b\u00f3nusz akci\u00f3ival, munkav\u00e1llal\u00f3k fogad\u00e1s\u00e1val \u00e9s kezel\u00e9s\u00e9vel, valamint jelent\u00e9sekkel kapcsolatos funkci\u00f3k.<\/p>\n<\/li>\n<li>\n<p>PublicScreens \u2014 a pizz\u00e9ri\u00e1kban elhelyezett telev\u00edzi\u00f3k \u00e9s t\u00e1blag\u00e9pek fel\u00fcletei. A telev\u00edzi\u00f3kon men\u00fc, rekl\u00e1m inform\u00e1ci\u00f3k, valamint a rendel\u00e9s \u00e1llapota jelenik meg a kiad\u00e1s sor\u00e1n.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>K\u00f6z\u00f6s szolg\u00e1ltat\u00e1sr\u00e9teget, k\u00f6z\u00f6s Dodo.Core domain oszt\u00e1ly blokkot \u00e9s k\u00f6z\u00f6s adatb\u00e1zist haszn\u00e1ltak. N\u00e9ha a k\u00fcl\u00f6nb\u00f6z\u0151 oldalak, p\u00e9ld\u00e1ul a dodopizza.ru vagy a personal.dodopizza.ru k\u00f6z\u00f6tti \u00e1tkapcsol\u00e1sok is l\u00e9teztek.<\/p>\n<p>\u00daj modulok megjelen\u00e9sekor igyekeztek min\u00e9l ink\u00e1bb \u00fajrahasznos\u00edtani a m\u00e1r l\u00e9trehozott szolg\u00e1ltat\u00e1sokat, t\u00e1rolt elj\u00e1r\u00e1sokat \u00e9s adatb\u00e1zis t\u00e1bl\u00e1kat.&nbsp;<\/p>\n<p>A rendszerben k\u00e9sz\u00fclt modulok m\u00e9ret\u00e9nek jobb meg\u00e9rt\u00e9se \u00e9rdek\u00e9ben itt van egy 2012-es s\u00e9ma a fejleszt\u00e9si tervekkel:<\/p>\n<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/57bf3e8be415ed9ae38abb976f7a5393.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>2015-re minden a s\u00e9m\u00e1n, \u00e9s m\u00e9g ann\u00e1l is t\u00f6bb \u00e9les \u00fczemm\u00f3dba ker\u00fclt.<\/p>\n<ul>\n<li>\n<p>A rendel\u00e9sfelv\u00e9tel k\u00fcl\u00f6n blokk\u00e1 fejl\u0151d\u00f6tt, a Kontakt K\u00f6zpontba, ahol a rendel\u00e9st egy oper\u00e1tor veszi fel.<\/p>\n<\/li>\n<li>\n<p>Megjelentek a pizz\u00e9ri\u00e1kban l\u00f3g\u00f3, nyilv\u00e1nos men\u00fcvel \u00e9s inform\u00e1ci\u00f3val rendelkez\u0151 k\u00e9perny\u0151k.<\/p>\n<\/li>\n<li>\n<p>A konyh\u00e1ban van egy modul, amely automatikusan lej\u00e1tsza a hang\u00fczenetet: \u201e\u00daj pizza\u201d, amikor \u00faj rendel\u00e9s \u00e9rkezik, \u00e9s nyomtatja a fuvarlevelet a fut\u00e1r sz\u00e1m\u00e1ra. Ez jelent\u0151sen megk\u00f6nny\u00edti a konyhai folyamatokat, lehet\u0151v\u00e9 t\u00e9ve, hogy a munkav\u00e1llal\u00f3k ne vonj\u00e1k el figyelm\u00fcket sok egyszer\u0171 m\u0171veletr\u0151l.<\/p>\n<\/li>\n<li>\n<p>A sz\u00e1ll\u00edt\u00e1si blokk k\u00fcl\u00f6n Kisz\u00e1ll\u00edt\u00f3 P\u00e9nzt\u00e1rr\u00e1 v\u00e1lt, ahol a rendel\u00e9st a fut\u00e1r kapta meg, aki el\u0151zetesen a m\u0171szakra jelentkezett. Figyelembe vett\u00e9k a munkav\u00e9gz\u00e9si idej\u00e9t a b\u00e9rsz\u00e1mfejt\u00e9shez.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>2012 \u00e9s 2015 k\u00f6z\u00f6tt p\u00e1rhuzamosan t\u00f6bb mint 10 fejleszt\u0151 jelent meg, 35 pizz\u00e9ria ny\u00edlt meg, a rendszert Rom\u00e1ni\u00e1ban elind\u00edtott\u00e1k, \u00e9s az Egyes\u00fclt \u00c1llamokban is k\u00e9sz\u00fcltek a nyit\u00e1sra. A fejleszt\u0151k m\u00e1r nem foglalkoztak minden feladattal, hanem csapatokra oszlottak, mindegyik a rendszer saj\u00e1t r\u00e9sz\u00e9n dolgozott.&nbsp;<\/p>\n<h3>Problems<\/h3>\n<p>Egyebek mellett az architekt\u00fara miatt (de nem csak).<\/p>\n<h4>K\u00e1osz az adatb\u00e1zisban<\/h4>\n<p>Egy adatb\u00e1zis \u2014 ez k\u00e9nyelmes. Itt k\u00f6vetkezetess\u00e9get lehet el\u00e9rni, r\u00e1ad\u00e1sul a rel\u00e1ci\u00f3s adatb\u00e1zisokba be\u00e9p\u00edtett eszk\u00f6z\u00f6k r\u00e9v\u00e9n. Dolgozni vele szok\u00e1sos \u00e9s k\u00e9nyelmes, k\u00fcl\u00f6n\u00f6sen, ha kev\u00e9s t\u00e1bl\u00e1zat \u00e9s nem sok adat van benne.<\/p>\n<p>De n\u00e9gy \u00e9v fejleszt\u00e9s ut\u00e1n az adatb\u00e1zisban k\u00f6r\u00fclbel\u00fcl 600 t\u00e1bl\u00e1zat \u00e9s 1500 t\u00e1rolt elj\u00e1r\u00e1s volt, amelyek k\u00f6z\u00fcl sokban m\u00e9g logika is volt. Sajnos a t\u00e1rolt elj\u00e1r\u00e1sok nem ny\u00fajtanak k\u00fcl\u00f6n\u00f6sebb el\u0151nyt a MySQL haszn\u00e1latakor. Az adatb\u00e1zis nem gyors\u00edtja \u0151ket, \u00e9s a logika t\u00e1rol\u00e1sa bonyol\u00edtja a fejleszt\u00e9st \u00e9s a hibakeres\u00e9st. A k\u00f3d \u00fajrahaszn\u00e1l\u00e1sa is neh\u00e9zkes volt.<\/p>\n<p><strong>Sok t\u00e1bl\u00e1zaton nem voltak megfelel\u0151 indexek<\/strong>, m\u00edg m\u00e1shol \u00e9ppen ellenkez\u0151leg, t\u00fal sok index volt, ami megnehez\u00edtette az adatok beilleszt\u00e9s\u00e9t. K\u00f6r\u00fclbel\u00fcl 20 t\u00e1bl\u00e1t kellett m\u00f3dos\u00edtani \u2014 a tranzakci\u00f3 egy rendel\u00e9s l\u00e9trehoz\u00e1s\u00e1ra k\u00f6r\u00fclbel\u00fcl 3-5 m\u00e1sodpercig tartott.&nbsp;<\/p>\n<p><strong>Az adatb\u00e1zisban nem mindig voltak az adatok a legmegfelel\u0151bb form\u00e1ban<\/strong>. Valahol denormaliz\u00e1l\u00e1sra volt sz\u00fcks\u00e9g. A rendszeresen kapott adatok egy r\u00e9sze XML-strukt\u00far\u00e1ban volt egy oszlopban, ami n\u00f6velte a v\u00e9grehajt\u00e1si id\u0151t, meghosszabb\u00edtotta a lek\u00e9rdez\u00e9seket \u00e9s bonyol\u00edtotta a fejleszt\u00e9st.<\/p>\n<p>Ugyanazokhoz a t\u00e1bl\u00e1zatokhoz nagyon <strong>k\u00fcl\u00f6nb\u00f6z\u0151 lek\u00e9rdez\u00e9sek \u00e9rkeztek<\/strong>. K\u00fcl\u00f6n\u00f6sen szenvedtek a n\u00e9pszer\u0171 t\u00e1bl\u00e1zatok, mint a fent eml\u00edtett t\u00e1bla <em>orders<\/em> vagy a <em>pizzeria<\/em>. Ezeket az operat\u00edv fel\u00fcletek kiad\u00e1s\u00e1ra haszn\u00e1lt\u00e1k a konyh\u00e1n, elemz\u00e9s c\u00e9lj\u00e1b\u00f3l. Emellett a weboldal is hivatkozott r\u00e1juk (<noindex><a rel=\"nofollow\" href=\"https:\/\/dodopizza.ru\/\"><u>dodopizza.ru<\/u><\/a><\/noindex>), amelyhez b\u00e1rmikor hirtelen sok lek\u00e9rdez\u00e9s \u00e9rkezhetett.&nbsp;<\/p>\n<p><strong>Az adatok nem voltak aggreg\u00e1ltak<\/strong> \u00e9s sok sz\u00e1m\u00edt\u00e1s val\u00f3s id\u0151ben t\u00f6rt\u00e9nt az adatb\u00e1zis eszk\u00f6zeivel. Ez felesleges sz\u00e1m\u00edt\u00e1sokat \u00e9s extra terhel\u00e9st okozott.&nbsp;<\/p>\n<p>Gyakran a k\u00f3d az adatb\u00e1zisba l\u00e9pett, amikor nem kellett volna. Valahol hi\u00e1nyoztak a bulk-m\u0171veletek, m\u00e1shol egy lek\u00e9rdez\u00e9st t\u00f6bb r\u00e9szre kellett volna bontani a gyorsas\u00e1g \u00e9s a megb\u00edzhat\u00f3s\u00e1g n\u00f6vel\u00e9s\u00e9hez.&nbsp;<\/p>\n<h4>A k\u00f3d \u00f6sszefon\u00f3d\u00e1sa \u00e9s bonyolults\u00e1ga<\/h4>\n<p><strong>A modulok, amelyeknek felelni\u00fck kellett volna a saj\u00e1t \u00fczleti ter\u00fclet\u00fck\u00e9rt, ezt nem tett\u00e9k meg megfelel\u0151en.<\/strong>. N\u00e9h\u00e1ny funkci\u00f3t duplik\u00e1lva tartalmaztak a szerepek. P\u00e9ld\u00e1ul a helyi marketinges, aki a v\u00e1ros\u00e1ban a h\u00e1l\u00f3zat marketingtev\u00e9kenys\u00e9g\u00e9\u00e9rt felel\u0151s, k\u00e9nytelen volt haszn\u00e1lni mind az \u201eAdmin\u201d fel\u00fcletet (akci\u00f3k l\u00e9trehoz\u00e1s\u00e1hoz), mind pedig a \u201eK\u00f6zponti Menedzser\u201d fel\u00fcletet (az akci\u00f3k \u00fczletre gyakorolt hat\u00e1s\u00e1nak megtekint\u00e9s\u00e9hez). Term\u00e9szetesen mindk\u00e9t modul egy k\u00f6z\u00f6s szolg\u00e1ltat\u00e1st haszn\u00e1lt, amely a b\u00f3nusz akci\u00f3kkal foglalkozott.<\/p>\n<p>A szolg\u00e1ltat\u00e1sok (oszt\u00e1lyok egy monolitikus nagy projekt keretein bel\u00fcl) egym\u00e1st h\u00edvhatt\u00e1k az adataik gazdag\u00edt\u00e1s\u00e1ra.<\/p>\n<p>A modellekhez tartoz\u00f3 oszt\u00e1lyok, amelyek az adatokat t\u00e1rolt\u00e1k, <strong>a k\u00f3dban elt\u00e9r\u0151en m\u0171k\u00f6dtek<\/strong>. Valahol voltak konstrukt\u0151r\u00f6k, amelyeken kereszt\u00fcl k\u00f6telez\u0151 mez\u0151ket lehetett megadni. M\u00e1shol ez nyilv\u00e1nos tulajdons\u00e1gokon kereszt\u00fcl t\u00f6rt\u00e9nt. Term\u00e9szetesen az adatok lek\u00e9r\u00e9se \u00e9s \u00e1talak\u00edt\u00e1sa az adatb\u00e1zisb\u00f3l v\u00e1ltozatos volt.&nbsp;<\/p>\n<p><strong>A logika vagy a vez\u00e9rl\u0151kben, vagy a szolg\u00e1ltat\u00e1soszt\u00e1lyokban volt.<\/strong>&nbsp;<\/p>\n<p>Ezek l\u00e1tsz\u00f3lag jelent\u00e9ktelen probl\u00e9m\u00e1k voltak, de komolyan lelass\u00edtott\u00e1k a fejleszt\u00e9st \u00e9s cs\u00f6kkentett\u00e9k a min\u0151s\u00e9get, ami instabilit\u00e1shoz \u00e9s hib\u00e1khoz vezetett.&nbsp;<\/p>\n<h4>A nagy fejleszt\u00e9si bonyolults\u00e1g<\/h4>\n<p><strong>Neh\u00e9zs\u00e9gek mer\u00fcltek fel mag\u00e1ban a fejleszt\u00e9sben<\/strong>. K\u00fcl\u00f6nb\u00f6z\u0151 rendszerblokkokat kellett k\u00e9sz\u00edteni, r\u00e1ad\u00e1sul p\u00e1rhuzamosan. A sz\u00fcks\u00e9gletek egyetlen k\u00f3dba val\u00f3 \u00f6sszeszor\u00edt\u00e1sa egyre nehezebb\u00e9 v\u00e1lt. Nem volt egyszer\u0171 megegyezni \u00e9s egyszerre mindenkinek megfelelni. Ezen k\u00edv\u00fcl technol\u00f3gi\u00e1kb\u00f3l ered\u0151 korl\u00e1toz\u00e1sok is voltak, k\u00fcl\u00f6n\u00f6sen az adatb\u00e1zisra \u00e9s a frontend-re vonatkoz\u00f3an. A JQueryr\u0151l el kellett hagyni a magas szint\u0171 keretrendszerek fel\u00e9, k\u00fcl\u00f6n\u00f6sen az \u00fcgyf\u00e9lszolg\u00e1ltat\u00e1sok (weboldal) vonatkoz\u00e1s\u00e1ban.<\/p>\n<p><strong>A rendszer bizonyos r\u00e9szein azok az adatb\u00e1zisok hasznosabbak lehettek,<\/strong>. P\u00e9ld\u00e1ul k\u00e9s\u0151bb volt precedens\u00fcnk a Redis-r\u00f3l a CosmosDB-ra val\u00f3 \u00e1tt\u00e9r\u00e9sre a kos\u00e1r t\u00e1rol\u00e1s\u00e1hoz.&nbsp;<\/p>\n<p>A csapatok \u00e9s a fejleszt\u0151k, akik a saj\u00e1t ter\u00fclet\u00fckre \u00f6sszpontos\u00edtottak, nyilv\u00e1nval\u00f3an nagyobb \u00f6n\u00e1ll\u00f3s\u00e1got szerettek volna a szolg\u00e1ltat\u00e1saik sz\u00e1m\u00e1ra, mind a fejleszt\u00e9s, mind a kiad\u00e1s szempontj\u00e1b\u00f3l. \u00d6sszeolvad\u00e1si konfliktusok, probl\u00e9m\u00e1k a kiad\u00e1sok sor\u00e1n. Ha 5 fejleszt\u0151 sz\u00e1m\u00e1ra ez a probl\u00e9ma nem l\u00e9nyeges, akkor 10-n\u00e9l, nem besz\u00e9lve a tervezett n\u00f6veked\u00e9sr\u0151l, minden komolyabb\u00e1 v\u00e1lt. El\u0151tt\u00fcnk pedig egy mobilalkalmaz\u00e1s fejleszt\u00e9se \u00e1llt (ami 2017-ben indult, 2018-ra pedig k\u00e9szen \u00e1llt). <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/498280\/\">nagy zuhan\u00e1s<\/a><\/noindex>).&nbsp;<\/p>\n<p><strong>A rendszer k\u00fcl\u00f6nb\u00f6z\u0151 r\u00e9szei elt\u00e9r\u0151 stabilit\u00e1si mutat\u00f3kat ig\u00e9nyeltek.<\/strong>, de a rendszer szoros \u00f6sszefon\u00f3d\u00e1sa miatt ezt nem tudtuk biztos\u00edtani. Egy \u00faj funkci\u00f3 fejleszt\u00e9se a vez\u00e9rl\u0151pulton probl\u00e9m\u00e1t okozhatott a weboldalon leadott rendel\u00e9sek sor\u00e1n, hiszen a k\u00f3d k\u00f6z\u00f6s \u00e9s \u00fajrahaszn\u00e1lhat\u00f3, az adatb\u00e1zis \u00e9s az adatok is egys\u00e9gesek.<\/p>\n<p>Val\u00f3sz\u00edn\u0171leg a monolitikus-modul\u00e1ris architekt\u00fara keretein bel\u00fcl is elker\u00fclhett\u00fck volna ezeket a hib\u00e1kat \u00e9s probl\u00e9m\u00e1kat: a felel\u0151ss\u00e9g megoszt\u00e1sa, a k\u00f3d \u00e9s az adatb\u00e1zis refaktor\u00e1l\u00e1sa, a r\u00e9tegek vil\u00e1gos elv\u00e1laszt\u00e1sa, a min\u0151s\u00e9g napi nyomon k\u00f6vet\u00e9se. Azonban a v\u00e1lasztott architektur\u00e1lis megold\u00e1sok \u00e9s a rendszer funkcionalit\u00e1s\u00e1nak gyors b\u0151v\u00edt\u00e9s\u00e9re val\u00f3 f\u00f3kusz\u00e1l\u00e1s instabilit\u00e1si probl\u00e9m\u00e1khoz vezetett.<\/p>\n<h4>A \u201eSzellemi Er\u0151\u201d blog jelent\u0151s\u00e9ge a \u00e9ttermek kassz\u00e1iban<\/h4>\n<p>Ha a pizz\u00e9ria-h\u00e1l\u00f3zat (\u00e9s a terhel\u00e9s) n\u00f6veked\u00e9se ugyanebben a temp\u00f3ban folytat\u00f3dott volna, akkor egy id\u0151 ut\u00e1n a visszaes\u00e9sek olyan s\u00falyoss\u00e1 v\u00e1ltak volna, hogy a rendszer m\u00e1r nem tudott volna m\u0171k\u00f6dni. Ezt j\u00f3l illusztr\u00e1lja 2015 k\u00f6r\u00fcli probl\u00e9m\u00e1ink egy ilyen t\u00f6rt\u00e9nete.&nbsp;<\/p>\n<p>A \u201e<noindex><a rel=\"nofollow\" href=\"http:\/\/sila-uma.ru\/\"><u>Szellemi Er\u0151<\/u><\/a><\/noindex>\u201d blogon volt egy widget, ami az eg\u00e9sz h\u00e1l\u00f3zat \u00e9ves bev\u00e9teli adatait mutatta. A widget a Dodo nyilv\u00e1nos API-j\u00e1hoz fordult, amely ezeket az adatokat biztos\u00edtja. Jelenleg ez a statisztika el\u00e9rhet\u0151 a <noindex><a rel=\"nofollow\" href=\"http:\/\/dodopizzastory.com\/\"><u>http:\/\/dodopizzastory.com\/<\/u><\/a><\/noindex>. A widget minden oldalon megjelent, \u00e9s 20 m\u00e1sodpercenk\u00e9nt k\u00e9rte az adatokat. A k\u00e9r\u00e9s a api.dodopizza.ru-ra ment, \u00e9s az al\u00e1bbiakat k\u00e9rte:<\/p>\n<ul>\n<li>\n<p>a h\u00e1l\u00f3zatban l\u00e9v\u0151 pizz\u00e9ri\u00e1k sz\u00e1ma;<\/p>\n<\/li>\n<li>\n<p>a h\u00e1l\u00f3zat \u00f6sszes bev\u00e9tele az \u00e9v eleje \u00f3ta;<\/p>\n<\/li>\n<li>\n<p>a mai napi bev\u00e9tel.<\/p>\n<\/li>\n<\/ul>\n<p>A bev\u00e9teli statisztika ir\u00e1nti k\u00e9r\u00e9s k\u00f6zvetlen\u00fcl az adatb\u00e1zisba ment, \u00e9s elkezdett adatokat lek\u00e9rdezni a rendel\u00e9sekb\u0151l, aggreg\u00e1lta az adatokat val\u00f3s id\u0151ben \u00e9s kiadta az \u00f6sszeget.&nbsp;<\/p>\n<p>Ebben a rendel\u00e9s t\u00e1bl\u00e1zatban a kassz\u00e1k az \u00e9ttermekben is belef\u00e9rtek, \u00e9s let\u00f6lt\u00f6tt\u00e9k a ma elfogadott rendel\u00e9sek list\u00e1j\u00e1t, az \u00faj rendel\u00e9sek is ide ker\u00fcltek. A kassz\u00e1k minden 5 m\u00e1sodpercben, vagy az oldal friss\u00edt\u00e9sekor k\u00e9rtek.<\/p>\n<p>A rendszer \u00edgy n\u00e9zett ki:<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/9f39d8c412c64e6aa40a0d5170a8cc0e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Egy \u0151sszel, Fedor Ovcsinnyikov egy hossz\u00fa \u00e9s n\u00e9pszer\u0171 cikket \u00edrt a blogj\u00e1ra. A blogra nagyon sok ember j\u00f6tt, \u00e9s figyelmesen mindent olvastak. Mik\u00f6zben minden l\u00e1togat\u00f3 olvasta a cikket, a bev\u00e9teli widget zavartalanul m\u0171k\u00f6d\u00f6tt, \u00e9s 20 m\u00e1sodpercenk\u00e9nt lek\u00e9rdezte az API-t.<\/p>\n<p>Az API a h\u00e1l\u00f3zat \u00f6sszes pizz\u00e9ri\u00e1j\u00e1nak rendel\u00e9seinek \u00f6sszeg\u00e9nek sz\u00e1m\u00edt\u00e1s\u00e1ra szolg\u00e1l\u00f3 t\u00e1rolt elj\u00e1r\u00e1st h\u00edvott meg az \u00e9v elej\u00e9t\u0151l kezdve. Az aggreg\u00e1l\u00e1s az orders t\u00e1bl\u00e1n t\u00f6rt\u00e9nt, ami nagyon n\u00e9pszer\u0171. Ebben t\u00e1rolj\u00e1k az \u00f6sszes nyitott \u00e9tterem kassz\u00e1j\u00e1t abban az id\u0151pontban. A kassz\u00e1k nem v\u00e1laszoltak, a rendel\u00e9seket nem fogadt\u00e1k el. A weboldalr\u00f3l sem fogadtak el rendel\u00e9seket, ezek nem jelentek meg a nyomk\u00f6vet\u0151n, a v\u00e1lt\u00e1svezet\u0151 nem tudta \u0151ket l\u00e1tni a fel\u00fclet\u00e9n.&nbsp;<\/p>\n<p>Ez nem az egyetlen t\u00f6rt\u00e9net. 2015 \u0151sz\u00e9re minden p\u00e9nteken kritikus volt a rendszer terhel\u00e9se. T\u00f6bbsz\u00f6r is le kellett \u00e1ll\u00edtanunk a nyilv\u00e1nos API-t, egyszer pedig ak\u00e1r a weboldalt is ki kellett kapcsolnunk, mert m\u00e1r semmi sem seg\u00edtett. Volt egy lista a szolg\u00e1ltat\u00e1sokr\u00f3l, amelyek sorrendben t\u00f6rt\u00e9ntek a s\u00falyos terhel\u00e9sek sor\u00e1n.<\/p>\n<p>Ett\u0151l az id\u0151pontt\u00f3l kezd\u0151dik a harcunk a terhel\u00e9sekkel \u00e9s a rendszer stabiliz\u00e1l\u00e1s\u00e1val (2015 \u0151sze \u00e9s 2018 \u0151sze k\u00f6z\u00f6tt). Akkor t\u00f6rt\u00e9nt a \"<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/498280\/\"><u>Nagy Buk\u00e1s<\/u><\/a><\/noindex>\". Ezek ut\u00e1n is el\u0151fordultak hib\u00e1k, amelyek k\u00f6z\u00fcl n\u00e9h\u00e1ny meglehet\u0151sen \u00e9rz\u00e9keny volt, de most m\u00e1r az \u00e1ltal\u00e1nos instabilit\u00e1si id\u0151szakot letudhatjuk.<\/p>\n<h4>A v\u00e1llalkoz\u00e1s robban\u00e1sszer\u0171 n\u00f6veked\u00e9se<\/h4>\n<p>Mi\u00e9rt nem lehetett \"azonnal j\u00f3l csin\u00e1lni\"? El\u00e9g csak r\u00e1n\u00e9zni a k\u00f6vetkez\u0151 grafikonokra.<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/a6dd39909ecc553b2ff4a8fc370d5846.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>2014-2015-ben Rom\u00e1ni\u00e1ban nyitottunk, \u00e9s az Egyes\u00fclt \u00c1llamokban is nyit\u00e1sra k\u00e9sz\u00fclt\u00fcnk.<\/p>\n<p>A h\u00e1l\u00f3zat nagyon gyorsan n\u0151tt, \u00faj orsz\u00e1gok ny\u00edltak, \u00faj pizz\u00e9ria form\u00e1tumok jelentek meg, p\u00e9ld\u00e1ul megny\u00edlt egy pizz\u00e9ria a food courtban. Mindez jelent\u0151s figyelmet k\u00f6vetelt meg a Dodo IS funkci\u00f3inak b\u0151v\u00edt\u00e9s\u00e9re. Mindezek n\u00e9lk\u00fcl, a konyhai nyomk\u00f6vet\u00e9s, az alapanyagok \u00e9s vesztes\u00e9gek figyel\u00e9se a rendszerben, valamint a rendel\u00e9s megjelen\u00edt\u00e9se a food court teremben, val\u00f3sz\u00edn\u0171leg most nem besz\u00e9ln\u00e9nk a \"helyes\" architekt\u00far\u00e1r\u00f3l \u00e9s a \"helyes\" fejleszt\u00e9si megk\u00f6zel\u00edt\u00e9sr\u0151l.<\/p>\n<p>A 2014-es v\u00e1ls\u00e1g is akad\u00e1lyozta az architekt\u00fara id\u0151ben t\u00f6rt\u00e9n\u0151 fel\u00fclvizsg\u00e1lat\u00e1t \u00e9s a technikai probl\u00e9m\u00e1kra val\u00f3 figyelmet. Az ilyen dolgok f\u00e1jdalmasan \u00e9rintik a csapatok n\u00f6veked\u00e9si lehet\u0151s\u00e9geit, k\u00fcl\u00f6n\u00f6sen egy fiatal v\u00e1llalkoz\u00e1s sz\u00e1m\u00e1ra, amilyen a Dodo Pizza volt.<\/p>\n<h3>Gyors megold\u00e1sok, amelyek seg\u00edtettek<\/h3>\n<p>A probl\u00e9m\u00e1k megold\u00e1st k\u00f6veteltek. \u00c1ltal\u00e1noss\u00e1gban a megold\u00e1sokat k\u00e9t csoportra lehet osztani:<\/p>\n<ul>\n<li>\n<p>Gyorsak, amelyek eloltj\u00e1k a t\u00fczet, \u00e9s kis tartal\u00e9kot adnak, \u00edgy id\u0151t nyer\u00fcnk a v\u00e1ltoz\u00e1sokra.<\/p>\n<\/li>\n<li>\n<p>Rendszerszint\u0171 \u00e9s ez\u00e9rt hossz\u00fa t\u00e1v\u00faak. Sz\u00e1mos modul \u00fajratervez\u00e9se, a monolitikus architekt\u00fara k\u00fcl\u00f6n\u00e1ll\u00f3 szolg\u00e1ltat\u00e1sokra val\u00f3 bont\u00e1sa (ezek k\u00f6z\u00fcl a legt\u00f6bb val\u00f3j\u00e1ban nem micro, ink\u00e1bb macro szolg\u00e1ltat\u00e1s \u00e9s ezeket eml\u00edtett\u00fck) <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XeNrWkRmVWw\"><u>Andrej Morevszkij jelent\u00e9se<\/u><\/a><\/noindex>).&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>A gyors v\u00e1ltoz\u00e1sok sz\u00e1raz list\u00e1ja a k\u00f6vetkez\u0151:<\/p>\n<h4>Mester adatb\u00e1zis sk\u00e1l\u00e1z\u00e1sa<\/h4>\n<p>Term\u00e9szetesen az els\u0151 l\u00e9p\u00e9s a terhel\u00e9sek kezel\u00e9s\u00e9re a szerver teljes\u00edtm\u00e9ny\u00e9nek n\u00f6vel\u00e9se. Ezt elk\u00e9sz\u00edtett\u00fck a mester adatb\u00e1zis \u00e9s a web szerverek sz\u00e1m\u00e1ra. Sajnos ez csak bizonyos hat\u00e1rokig lehets\u00e9ges, ut\u00e1na t\u00fal dr\u00e1g\u00e1v\u00e1 v\u00e1lik.<\/p>\n<p>2014 \u00f3ta \u00e1t\u00e1lltunk az Azure-ra, err\u0151l m\u00e1r akkor \u00edrtunk a \"<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/microsoft\/blog\/277821\/\">Hogyan sz\u00e1ll\u00edtja a Dodo Pizza a pizz\u00e1t a Microsoft Azure felh\u0151j\u00e9vel<\/a><\/noindex>\" cikk\u00fcnkben. De a mester adatb\u00e1zis szervereinek sorozatos n\u00f6vel\u00e9sek ut\u00e1n elakadtunk a k\u00f6lts\u00e9geken.&nbsp;<\/p>\n<h4>Olvas\u00e1si m\u00e1solatok az adatb\u00e1zisra<\/h4>\n<p>K\u00e9t m\u00e1solatot hoztunk l\u00e9tre az adatb\u00e1zis sz\u00e1m\u00e1ra:<\/p>\n<p><strong>ReadReplica<\/strong> <strong>sz\u00f3t\u00e1rol\u00e1si lek\u00e9rdez\u00e9sekhez<\/strong>. A sz\u00f3t\u00e1rak, p\u00e9ld\u00e1ul v\u00e1rosok, utc\u00e1k, pizz\u00e9ri\u00e1k, term\u00e9kek (lassan v\u00e1ltoz\u00f3 domain), \u00e9s azokon a fel\u00fcleteken haszn\u00e1latos, ahol elfogadhat\u00f3 egy kis k\u00e9s\u00e9s. Ezekb\u0151l a m\u00e1solatokb\u00f3l kett\u0151t \u00e1ll\u00edtottunk be, \u00e9s biztos\u00edtottuk az el\u00e9rhet\u0151s\u00e9g\u00fcket, mint a mester adatb\u00e1zis eset\u00e9ben.<\/p>\n<p><strong>ReadReplica riportk\u00e9r\u00e9sekhez<\/strong>. Ez az adatb\u00e1zis alacsonyabb el\u00e9rhet\u0151s\u00e9ggel rendelkezett, de ide futottak be az \u00f6sszes riport. B\u00e1r neh\u00e9z lek\u00e9rdez\u00e9sek voltak \u00f3ri\u00e1si adatsz\u00e1m\u00edt\u00e1sokkal, nem befoly\u00e1solt\u00e1k a f\u0151 adatb\u00e1zist \u00e9s az oper\u00e1ci\u00f3s fel\u00fcleteket.&nbsp;<\/p>\n<h4>K\u00e9szletek a k\u00f3dban<\/h4>\n<p>A k\u00f3dban sehol nem voltak k\u00e9szletek. Ez plusz, nem mindig sz\u00fcks\u00e9ges lek\u00e9rdez\u00e9sekhez vezetett a terhelt adatb\u00e1zisban. A k\u00e9szleteket kezdetben mem\u00f3ri\u00e1ban \u00e9s egy k\u00fcls\u0151 gyors\u00edt\u00f3szolg\u00e1ltat\u00e1sban, a Redis-ben t\u00e1roltuk. Minden id\u0151vel \u00e9rv\u00e9nytelen\u00edt\u0151d\u00f6tt, a be\u00e1ll\u00edt\u00e1sokat a k\u00f3dban adtuk meg.<\/p>\n<h4>T\u00f6bb szerver a h\u00e1tt\u00e9rrendszerhez<\/h4>\n<p>A h\u00e1tt\u00e9rrendszert is sk\u00e1l\u00e1zni kellett a n\u00f6vekv\u0151 terhel\u00e9s elvisel\u00e9s\u00e9hez. Az egy iis szerverb\u0151l kl\u00f3nt kellett l\u00e9trehozni. \u00c1ttelep\u00edtett\u00fck <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/aspnet\/core\/fundamentals\/app-state?view=aspnetcore-3.1\"><u>az alkalmaz\u00e1sok munkamenet\u00e9t<\/u><\/a><\/noindex> a RedisCache-be, ami lehet\u0151v\u00e9 tette t\u00f6bb szerver l\u00e9trehoz\u00e1s\u00e1t egy egyszer\u0171 terhel\u00e9seloszt\u00f3 m\u00f6g\u00f6tt, k\u00f6rk\u00f6r\u00f6s eloszt\u00e1ssal. Eleinte ugyanazt a Redis-t haszn\u00e1ltuk a gyors\u00edt\u00f3t\u00e1rakhoz, majd sz\u00e9tv\u00e1lasztottuk t\u00f6bb szerverre.&nbsp;<\/p>\n<p>V\u00e9g\u00fcl az architekt\u00fara bonyolultabb\u00e1 v\u00e1lt...<\/p>\n<p><img decoding=\"async\" alt=\"A Dodo IS architekt\u00far\u00e1ja: korai monolit\" src=\"\/wp-content\/uploads\/2020\/10\/70a3e8d5578469239c08b4759ab32264.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>...de egy r\u00e9sz\u00e9t a fesz\u00fclts\u00e9gnek siker\u00fclt cs\u00f6kkenteni.<\/p>\n<p>Ezut\u00e1n a terhelt komponenseket kellett \u00e1talak\u00edtanunk, amivel nekil\u00e1ttunk. Err\u0151l a k\u00f6vetkez\u0151 r\u00e9szben fogunk besz\u00e1molni.<\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/521614\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u043b\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u043c \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Dodo IS \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b \u2014 \u0432 2011 \u0433\u043e\u0434\u0443. \u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0435\u0436\u0430\u043b\u0430 \u0438\u0434\u0435\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u0438 \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043f\u0440\u0438\u0447\u0435\u043c \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438, \u0447\u0442\u043e \u0435\u0449\u0435 \u0442\u043e\u0433\u0434\u0430 \u0432 2011 \u0433\u043e\u0434\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0441\u043a\u0435\u043f\u0442\u0438\u0446\u0438\u0437\u043c\u0430. \u041d\u043e \u0432\u043e\u0442 \u0443\u0436\u0435 9 \u043b\u0435\u0442 \u043c\u044b \u0438\u0434\u0435\u043c \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95805,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u043b\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u043c \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443.\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Dodo IS \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b \u2014 \u0432 2011 \u0433\u043e\u0434\u0443.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Dodo IS: \u0440\u0430\u043d\u043d\u0438\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u043b\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u043c \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443.\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Dodo IS \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b \u2014 \u0432 2011 \u0433\u043e\u0434\u0443.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-03T11:42:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-03T11:42:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47A Dodo IS architekt\u00far\u00e1j\u00e1nak t\u00f6rt\u00e9nete: korai monolit | ProHoster","description":"Vagy minden szerencs\u00e9tlen c\u00e9g a monolitj\u00e1val a maga m\u00f3dj\u00e1n boldogtalan. A Dodo IS rendszer fejleszt\u00e9se azonnal megkezd\u0151d\u00f6tt a Dodo Pizza \u00fczlet\u00e9vel egy\u00fctt - 2011-ben.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Dodo IS: \u0440\u0430\u043d\u043d\u0438\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442 | ProHoster","og:description":"\u0418\u043b\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u043c \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443.\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Dodo IS \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b \u2014 \u0432 2011 \u0433\u043e\u0434\u0443.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-03T11:42:27+00:00","article:modified_time":"2020-10-03T11:42:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95804","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:57:47","updated":"2022-09-28 00:34:07","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/95804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=95804"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/95804\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/95805"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=95804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=95804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=95804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}