{"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\/sq\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit","title":{"rendered":"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ose kompani t\u00eb pafat me monolitin jan\u00eb t\u00eb pafat n\u00eb m\u00ebnyra t\u00eb ndryshme.<\/p>\n<p>Zhvillimi i sistemit Dodo IS filloi menj\u00ebher\u00eb pas themelimit t\u00eb biznesit Dodo Pizza n\u00eb vitin 2011. Ideja ishte digitalizimi i plot\u00eb dhe total i proceseve t\u00eb biznesit, <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2011\/08\/30\/sobstvennaya-sistema\/\"><u>me forcat tona<\/u><\/a><\/noindex>, gj\u00eb q\u00eb at\u00ebher\u00eb n\u00eb vitin 2011 shkaktoi shum\u00eb pyetje dhe skepticiz\u00ebm. Por tani, pas 9 vjet\u00ebsh, ne vazhdojm\u00eb n\u00eb k\u00ebt\u00eb rrug\u00eb \u2014 me zhvillimin ton\u00eb, q\u00eb filloi me nj\u00eb monolit.<\/p>\n<p>Ky artikull \u00ebsht\u00eb \"p\u00ebrgjigje\" ndaj pyetjeve \"Pse t\u00eb rishkruhet arkitektura dhe t\u00eb b\u00ebhen ndryshime kaq t\u00eb m\u00ebdha dhe t\u00eb gjat\u00eb?\" ndaj artikullit t\u00eb m\u00ebparsh\u00ebm <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/506136\/\"><u>\"Historia e arkitektur\u00ebs Dodo IS: rruga e back-office\".<\/u><\/a><\/noindex>Do t\u00eb filloj me se si filloi zhvillimi i Dodo IS, si dukej arkitektura origjinale, si u shfaq\u00ebn modulet e reja dhe p\u00ebr \u00e7far\u00eb problemesh duhej t\u00eb b\u00ebheshin ndryshime t\u00eb m\u00ebdha.<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/881fe068f46f934dc9730a5946996da3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<p><strong>Seria e artikujve \u00ab\u00c7far\u00eb \u00ebsht\u00eb Dodo IS?\u00bb do t\u00eb flas\u00eb p\u00ebr:<\/strong><\/p>\n<\/blockquote>\n<ol>\n<li>\n<p>Monoliti i hersh\u00ebm n\u00eb Dodo IS (2011-2015). (Ju jeni k\u00ebtu)<\/p>\n<\/li>\n<li>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/506136\/\">Rruga e backoffice: baza t\u00eb ndara dhe shina<\/a><\/noindex>.<\/p>\n<\/li>\n<li>\n<p>Rruga e pjes\u00ebs klient: fasada mbi baz\u00ebn (2016-2017). (N\u00eb proces\u2026)<\/p>\n<\/li>\n<li>\n<p>Historia e mikrosherbimeve reale. (2018-2019). (N\u00eb proces\u2026)<\/p>\n<\/li>\n<li>\n<p>P\u00ebrfundimi i ndarjes s\u00eb monolitit dhe stabilizimi i arkitektur\u00ebs. (N\u00eb proces\u2026)<\/p>\n<\/li>\n<\/ol>\n<h3>Arkitektura origjinale<\/h3>\n<p>N\u00eb vitin 2011, arkitektura Dodo IS dukej k\u00ebshtu:<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/93814518ca50678933f2591749e3e489.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Moduli i par\u00eb n\u00eb arkitektur\u00eb \u2014 pranimi i porosis\u00eb. Procesi i biznesit ishte si m\u00eb posht\u00eb:<\/p>\n<ul>\n<li>\n<p>klienti telefonon n\u00eb pizzeria;<\/p>\n<\/li>\n<li>\n<p>menaxheri p\u00ebrgjigjet;<\/p>\n<\/li>\n<li>\n<p>ai merr porosin\u00eb p\u00ebrmes telefonit;<\/p>\n<\/li>\n<li>\n<p>paralelisht e regjistron at\u00eb n\u00eb nd\u00ebrfaqen e pranimit t\u00eb porosis\u00eb: informacioni p\u00ebr klientin, detajet e porosis\u00eb, adresa e d\u00ebrges\u00ebs, merren parasysh.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Nd\u00ebrfaqja e sistemit informativ dukej k\u00ebshtu...<\/p>\n<p>Versioni i par\u00eb nga tetori 2011:<\/p>\n<p><center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/5f75cfa9779ba700bea78afc\" frameborder=\"0\" allowfullscreen><\/iframe><\/center>Pak e p\u00ebrmir\u00ebsuar n\u00eb janar 2012.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/h2Cdht01gDA\">Sistemi informativ Dodo Pizza Delivery Pizza Restaurant<\/a><\/noindex><\/p>\n<p>Burimet p\u00ebr zhvillimin e modulit t\u00eb par\u00eb t\u00eb pranimit t\u00eb porosis\u00eb ishin t\u00eb kufizuara. Duhej t\u00eb b\u00ebhej shum\u00eb, shpejt dhe me nj\u00eb grup t\u00eb vog\u00ebl. Grupi i vog\u00ebl \u2014 ishin 2 zhvillues q\u00eb nd\u00ebrtuan themelet e t\u00eb gjith\u00eb sistemit t\u00eb ardhsh\u00ebm.<\/p>\n<p>Zgjidhja e par\u00eb e tyre p\u00ebrcaktoi fatin e stacks teknologjike:<\/p>\n<ul>\n<li>\n<p>Backend n\u00eb ASP.NET MVC, gjuha C#. Zhvilluesit ishin dotnet\u00e7inj, kjo stack ishte e njohur dhe e k\u00ebndshme p\u00ebr ta. <\/p>\n<\/li>\n<li>\n<p>Frontend n\u00eb Bootstrap dhe JQuery: nd\u00ebrfaqet e p\u00ebrdoruesit n\u00eb stile dhe skripta t\u00eb shkruar vet\u00eb.&nbsp;<\/p>\n<\/li>\n<li>\n<p>Baza e t\u00eb dh\u00ebnave MySQL: pa shpenzime p\u00ebr licenca, e leht\u00eb p\u00ebr t\u2019u p\u00ebrdorur.<\/p>\n<\/li>\n<li>\n<p>Server\u00eb n\u00eb Windows Server, sepse .NET at\u00ebher\u00eb mund t\u00eb ishte vet\u00ebm n\u00ebn Windows (nuk do t\u00eb flasim p\u00ebr Mono).<\/p>\n<\/li>\n<\/ul>\n<p>Fizikisht, gjith\u00eb kjo ishte shprehur n\u00eb \"dedikimin e hostit\".&nbsp;<\/p>\n<h4>Arkitektura e aplikacionit t\u00eb pranimit t\u00eb porosis\u00eb<\/h4>\n<p>At\u00ebher\u00eb, t\u00eb gjith\u00eb flisnin p\u00ebr mikrosh\u00ebrbime dhe SOA ishte p\u00ebrdorur p\u00ebr rreth 5 vjet n\u00eb projekte t\u00eb m\u00ebdha, p\u00ebr shembull, WCF doli n\u00eb vitin 2006. Por at\u00ebher\u00eb u zgjodh nj\u00eb zgjidhje e besueshme dhe e provuar.<\/p>\n<p>Ja ajo.<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/688da7d4e02a6310bf7d2da1b767fe10.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Asp.Net MVC \u2014 \u00ebsht\u00eb Razor, q\u00eb jep HTML-n\u00eb n\u00eb k\u00ebrkes\u00eb nga forma ose nga klienti me renderim n\u00eb server. N\u00eb klient, CSS dhe JS-skriptet tregojn\u00eb informacionin dhe, sipas nevoj\u00ebs, kryejn\u00eb k\u00ebrkesa AJAX p\u00ebrmes JQuery.<\/p>\n<p>K\u00ebrkesat n\u00eb server shkojn\u00eb n\u00eb klasat *Controller, ku metodat trajtojn\u00eb dhe gjenerojn\u00eb HTML-n\u00eb p\u00ebrfundimtare. Kontrollet b\u00ebjn\u00eb k\u00ebrkesa p\u00ebr nivelin e logjik\u00ebs, t\u00eb quajtur *Services. \u00c7do sh\u00ebrbim ishte p\u00ebrgjegj\u00ebs p\u00ebr nj\u00eb aspekt t\u00eb caktuar t\u00eb biznesit:<\/p>\n<ul>\n<li>\n<p>P\u00ebr shembull, DepartmentStructureService jepte informacion p\u00ebr pizzerit\u00eb, p\u00ebr departamentet. Departamenti \u2014 \u00ebsht\u00eb nj\u00eb grup pizzerish n\u00ebn menaxhimin e nj\u00eb franchaizieri.<\/p>\n<\/li>\n<li>\n<p>ReceivingOrdersService pranon dhe llogarit p\u00ebrmbajtjen e porosis\u00eb.<\/p>\n<\/li>\n<li>\n<p>SmsService d\u00ebrgon SMS, duke thirrur sh\u00ebrbimet e API p\u00ebr d\u00ebrgimin e SMS.<\/p>\n<\/li>\n<\/ul>\n<p>Sh\u00ebrbimet trajtojn\u00eb t\u00eb dh\u00ebnat nga baza, ruajn\u00eb logjik\u00ebn e biznesit. N\u00eb \u00e7do sh\u00ebrbim ka nj\u00eb ose m\u00eb shum\u00eb *Repository me emrin p\u00ebrkat\u00ebs. N\u00eb to gjenden k\u00ebrkesat p\u00ebr procedurat e ruajtura n\u00eb baz\u00eb dhe niveli i mapper\u00ebve. N\u00eb prosedurat e ruajtura ishte logjika e biznesit, ve\u00e7an\u00ebrisht shum\u00eb n\u00eb ato q\u00eb jepnin t\u00eb dh\u00ebna raportuese. ORM nuk u p\u00ebrdor, t\u00eb gjith\u00eb mb\u00ebshteteshin n\u00eb SQL t\u00eb shkruar me dor\u00eb.&nbsp;<\/p>\n<p>Ishte gjithashtu nj\u00eb nivel modeli domene dhe klasash ndihm\u00ebse t\u00eb zakonshme, p\u00ebr shembull, klasa Order, q\u00eb mbante porosin\u00eb. Atje, n\u00eb nivel, kishte nj\u00eb ndihm\u00ebs p\u00ebr metamorfizimin e tekstit t\u00eb paraqitjes sipas valutos s\u00eb zgjedhur.<\/p>\n<p>T\u00eb gjith\u00eb k\u00ebto mund t\u00eb paraqiten n\u00eb nj\u00eb model t\u00eb till\u00eb: <\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/ff76833cfd19e778bc6ad33589fc328b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Rruga e porosis\u00eb<\/h4>\n<p>Le t\u00eb shqyrtojm\u00eb rrug\u00ebn e thjesht\u00ebzuar t\u00eb krijimit t\u00eb nj\u00eb porosie t\u00eb till\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/da7334d6e6258b800618287de6e1d393.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Fillimisht, faqja ishte statike. Ajo kishte \u00e7mime, dhe sip\u00ebr \u2014 numri i telefonit dhe shpallja \"D\u00ebshiron pica \u2014 telefononi dhe porositni\". P\u00ebr porosin\u00eb, na duhej t\u00eb realizonim nj\u00eb rrjedh\u00eb t\u00eb thjesht\u00eb:&nbsp;<\/p>\n<ul>\n<li>\n<p>Klienti hyn n\u00eb faqen statike me \u00e7mimet, zgjedh produktet dhe telefonon numrin q\u00eb \u00ebsht\u00eb i sh\u00ebnuar n\u00eb faqen.<\/p>\n<\/li>\n<li>\n<p>Klienti p\u00ebrmend produktet q\u00eb d\u00ebshiron t\u00eb shtoj\u00eb n\u00eb porosi.<\/p>\n<\/li>\n<li>\n<p>P\u00ebrmend adres\u00ebn dhe emrin e tij.<\/p>\n<\/li>\n<li>\n<p>Operatori pranon porosin\u00eb.<\/p>\n<\/li>\n<li>\n<p>Porosia shfaqet n\u00eb nd\u00ebrfaqen e porosive t\u00eb pranuara.<\/p>\n<\/li>\n<\/ul>\n<p>Gjith\u00e7ka fillon me shfaqjen e menus\u00eb. Nj\u00eb p\u00ebrdorues-operator i identifikuar pranon vet\u00ebm nj\u00eb porosi n\u00eb nj\u00eb moment t\u00eb caktuar. Pra, karroca draft mund t\u00eb ruhen n\u00eb sesionin e tij (seanca e p\u00ebrdoruesit ruhet n\u00eb memorie). Atje \u00ebsht\u00eb objekti Cart, n\u00eb t\u00eb cilin ndodhen produktet dhe informacioni p\u00ebr klientin.<\/p>\n<p>Klienti p\u00ebrmend produktin, operatori klikon n\u00eb <code>+<\/code> pran\u00eb produktit dhe d\u00ebrgohet nj\u00eb k\u00ebrkes\u00eb n\u00eb server. Informacioni p\u00ebr produktin merret nga baza dhe shtohet n\u00eb informacionin e produktit n\u00eb karroc\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/e481d7a5865efc1d37574225c6a0b89e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><strong>Sh\u00ebnim<\/strong>. Po, k\u00ebtu nuk \u00ebsht\u00eb e nevojshme t\u00eb nxirrni produktin nga baza, por mund t\u00eb transferoni nga frontend. Megjithat\u00eb, p\u00ebr qart\u00ebsi un\u00eb e tregova k\u00ebt\u00eb rrug\u00eb nga baza.&nbsp;<\/p>\n<p>Pastaj, futni adres\u00ebn dhe emrin e klientit.&nbsp;<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/c40e29108a308015522cf219b6d7a515.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Kur klikoni \"Krijo porosi\":<\/p>\n<ul>\n<li>\n<p>K\u00ebrkesa d\u00ebrgohet n\u00eb OrderController.SaveOrder().<\/p>\n<\/li>\n<li>\n<p>Merrni Kart\u00ebn nga sesioni, ku ndodhen produktet n\u00eb sasin\u00eb e duhur.<\/p>\n<\/li>\n<li>\n<p>Plot\u00ebsoni Kart\u00ebn me informacionin e klientit dhe kaloni n\u00eb metod\u00ebn AddOrder t\u00eb klas\u00ebs ReceivingOrderService, ku ajo ruhet n\u00eb baz\u00eb.&nbsp;<\/p>\n<\/li>\n<li>\n<p>N\u00eb baz\u00eb ka tabela p\u00ebr porosin\u00eb, p\u00ebrb\u00ebrjen e porosis\u00eb, klientin dhe t\u00eb gjitha jan\u00eb t\u00eb lidhura.<\/p>\n<\/li>\n<li>\n<p>Interfaci i shfaqjes s\u00eb porosis\u00eb merr dhe nxjerr porosit\u00eb m\u00eb t\u00eb fundit dhe i shfaq ato.<\/p>\n<\/li>\n<\/ul>\n<h4>Module t\u00eb reja<\/h4>\n<p>Pranimi i porosis\u00eb ishte i r\u00ebnd\u00ebsish\u00ebm dhe i nevojsh\u00ebm. Nuk \u00ebsht\u00eb e mundur t\u00eb b\u00ebsh biznes me shitjen e picave pa pranimin e porosis\u00eb p\u00ebr shitje. Prandaj, sistemi filloi t\u00eb zgjerohet me funksionalitete \u2014 nga viti 2012 deri n\u00eb vitin 2015. Gjat\u00eb k\u00ebsaj periudhe, u shfaq\u00ebn shum\u00eb blloqe t\u00eb ndryshme t\u00eb sistemit, t\u00eb cilat un\u00eb do t'i quaj <strong>modula<\/strong>, n\u00eb kund\u00ebrshtim me konceptin e sh\u00ebrbimit ose produktit.&nbsp;<\/p>\n<p>Moduli \u00ebsht\u00eb nj\u00eb grup funksionesh q\u00eb jan\u00eb t\u00eb bashkuara me nj\u00eb q\u00ebllim t\u00eb p\u00ebrbashk\u00ebt biznesor. P\u00ebrve\u00e7 k\u00ebsaj, ato ndodhen fizikisht n\u00eb nj\u00eb aplikacion.<\/p>\n<p>Modulat mund t\u00eb quhen blloqe t\u00eb sistemit. P\u00ebr shembull, ky \u00ebsht\u00eb moduli i raporteve, nd\u00ebrfaqet e adminit, <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2011\/10\/20\/treking-zakazov\/\"><u>ndjek\u00ebsi i produkteve n\u00eb kuzhin\u00eb<\/u><\/a><\/noindex>, autorizimi. T\u00eb gjitha k\u00ebto jan\u00eb nd\u00ebrfaqe t\u00eb ndryshme p\u00ebr p\u00ebrdoruesin, disa prej t\u00eb cilave kan\u00eb madje stile vizuale t\u00eb ndryshme. Megjithat\u00eb, t\u00eb gjitha jan\u00eb brenda nj\u00eb aplikacioni, nj\u00eb procesi funksional.&nbsp;<\/p>\n<p>Nga pik\u00ebpamja teknike, modulat ishin t\u00eb organizuara si Area (nj\u00eb ide e till\u00eb ka mbetur n\u00eb <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>). Aty ishin skedar\u00eb t\u00eb ve\u00e7ant\u00eb p\u00ebr frontend-in, modelet, si dhe klasat e tyre t\u00eb kontrollor\u00ebve. Si rezultat, sistemi u transformua nga i till\u00eb\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/cac789e252e0df13718adbc694c31596.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u2026n\u00eb nj\u00eb t\u00eb till\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/6c75b61b33488edbb0427e87dee14189.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Disa modulet jan\u00eb realizuar si faqe t\u00eb ve\u00e7anta (projekte ekzekutiv), p\u00ebr shkak t\u00eb funksionalitetit t\u00eb ve\u00e7ant\u00eb dhe pjes\u00ebrisht p\u00ebr shkak t\u00eb zhvillimit m\u00eb t\u00eb fokusuar. K\u00ebto jan\u00eb:<\/p>\n<ul>\n<li>\n<p><strong>Site<\/strong> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/sila-uma.ru\/2013\/08\/06\/new_site_dodopizza_ru\/\"><u>versioni i par\u00eb<\/u><\/a><\/noindex> i faqes dodopizza.ru.<\/p>\n<\/li>\n<li>\n<p><strong>Eksport<\/strong>: eksportimi i raporteve nga Dodo IS p\u00ebr 1C.&nbsp;<\/p>\n<\/li>\n<li>\n<p><strong>Personal<\/strong> \u2014 zyra personale e punonj\u00ebsit. U zhvillua ve\u00e7mas dhe ka pik\u00ebn e tij t\u00eb hyrjes dhe nj\u00eb dizajn t\u00eb ve\u00e7ant\u00eb.<\/p>\n<\/li>\n<li>\n<p><strong>fs<\/strong> \u2014 projekt p\u00ebr hostimin e statik\u00ebs. M\u00eb von\u00eb e braktis\u00ebm, duke transferuar t\u00eb gjith\u00eb statik\u00ebn n\u00eb CDN Akamai.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Blloqet e tjera ishin brenda aplikacionit BackOffice.&nbsp;<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/c48e67beca3937a2e6e2df78834fd05d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Shpjegimi p\u00ebr emrat:<\/p>\n<ul>\n<li>\n<p>Cashier \u2014 Kasa e restorantit.<\/p>\n<\/li>\n<li>\n<p>ShiftManager \u2014 nd\u00ebrfaqet p\u00ebr rolin \"Menaxheri i nd\u00ebrrimit\": statistika operative p\u00ebr shitjet e picave, mund\u00ebsia p\u00ebr t\u00eb vendosur produkte n\u00eb list\u00ebn e bardh\u00eb, t\u00eb ndryshoni porosin\u00eb.<\/p>\n<\/li>\n<li>\n<p>OfficeManager \u2014 nd\u00ebrfaqet p\u00ebr rolin \"Menaxher i piceris\u00eb\" dhe \"Frashiz\u00eb\". K\u00ebtu jan\u00eb mbledhur funksionet p\u00ebr konfigurimin e piceris\u00eb, promovimet e saj, pranimin dhe pun\u00ebn me punonj\u00ebsit, raportet.<\/p>\n<\/li>\n<li>\n<p>PublicScreens \u2014 nd\u00ebrfaqet p\u00ebr televizor\u00ebt dhe tablet\u00ebt, q\u00eb varen n\u00eb picerit\u00eb. N\u00eb televizor\u00eb shfaqet menuja, informacioni reklamues, statusi i porosis\u00eb n\u00eb momentin e dor\u00ebzimit.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Ata p\u00ebrdor\u00ebn nj\u00eb shtres\u00eb t\u00eb p\u00ebrbashk\u00ebt sh\u00ebrbimesh, nj\u00eb bllok t\u00eb p\u00ebrbashk\u00ebt t\u00eb klasave domain Dodo.Core, si dhe nj\u00eb baz\u00eb t\u00eb p\u00ebrbashk\u00ebt. Ndonj\u00ebher\u00eb mund t\u00eb kalonin nga nj\u00ebri n\u00eb tjetrin. Gjithashtu, disa faqe t\u00eb ve\u00e7anta, si dodopizza.ru ose personal.dodopizza.ru, shkonin n\u00eb sh\u00ebrbime t\u00eb p\u00ebrbashk\u00ebta.<\/p>\n<p>Kur shfaqeshin modulet e reja, p\u00ebrpiqeshim maksimalisht t\u00eb rip\u00ebrdorim kodin ekzistues t\u00eb sh\u00ebrbimeve, procedurave t\u00eb ruajtura dhe tabelave n\u00eb baz\u00eb.&nbsp;<\/p>\n<p>P\u00ebr t\u00eb kuptuar m\u00eb mir\u00eb shkall\u00ebn e moduleve t\u00eb krijuara n\u00eb sistem, ja skema nga viti 2012 me planet e zhvillimit:<\/p>\n<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/57bf3e8be415ed9ae38abb976f7a5393.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Deri n\u00eb vitin 2015, gjith\u00e7ka q\u00eb ishte n\u00eb skem\u00eb dhe madje edhe m\u00eb shum\u00eb ishte n\u00eb prodhim.<\/p>\n<ul>\n<li>\n<p>Pranimi i porosis\u00eb u shnd\u00ebrrua n\u00eb nj\u00eb bllok t\u00eb ve\u00e7ant\u00eb t\u00eb Qendr\u00ebs s\u00eb Kontaktit, ku porosia pranohej nga nj\u00eb operator.<\/p>\n<\/li>\n<li>\n<p>U shfaq\u00ebn ekranet publike me menu dhe informacion, q\u00eb varen n\u00eb piceri.<\/p>\n<\/li>\n<li>\n<p>N\u00eb kuzhin\u00eb ka nj\u00eb modul, i cili automatikisht luan nj\u00eb mesazh verbal \"Pizza e re\" kur bie nj\u00eb porosi e re dhe gjithashtu shtyp nj\u00eb fatur\u00eb p\u00ebr kurierin. Kjo e thjeshton shum\u00eb proceset n\u00eb kuzhin\u00eb dhe i lejon punonj\u00ebsit t\u00eb mos shp\u00ebrqendrohen nga shum\u00eb operacione t\u00eb thjeshta.<\/p>\n<\/li>\n<li>\n<p>Blloku i dor\u00ebzimit u shnd\u00ebrrua n\u00eb nj\u00eb Kasa t\u00eb Dor\u00ebzimit, ku porosia jepet kurierit, i cili \u00ebsht\u00eb regjistruar paraprakisht n\u00eb nd\u00ebrrimin. Koha e tij e pun\u00ebs \u00ebsht\u00eb marr\u00eb parasysh p\u00ebr llogaritjen e pag\u00ebs.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Paralelisht nga 2012 deri n\u00eb 2015 u zhvilluan m\u00eb shum\u00eb se 10 zhvillues, u hap\u00ebn 35 piceri, u implementua sistemi n\u00eb Rumani dhe u p\u00ebrgatit p\u00ebr hapjen e pikave n\u00eb SHBA. Zhvilluesit tashm\u00eb nuk merreshin me t\u00eb gjitha detyrat, por ishin t\u00eb ndar\u00eb n\u00eb grupe, secila e specializuar n\u00eb at\u00eb pjes\u00eb t\u00eb sistemit.&nbsp;<\/p>\n<h3>Problemet<\/h3>\n<p>Kjo n\u00eb p\u00ebrputhje me arkitektur\u00ebn (por jo vet\u00ebm).<\/p>\n<h4>Kaosi n\u00eb baz\u00eb<\/h4>\n<p>Nj\u00eb baz\u00eb \u2014 \u00ebsht\u00eb e p\u00ebrshtatshme. N\u00eb t\u00eb mund t\u00eb arrish konsistenc\u00eb, madje p\u00ebrmes mjeteve t\u00eb integruara n\u00eb bazat relazionale. T\u00eb punosh me t\u00eb \u00ebsht\u00eb e zakonshme dhe e leht\u00eb, ve\u00e7an\u00ebrisht n\u00ebse ka pak tabela dhe pak t\u00eb dh\u00ebna.<\/p>\n<p>Por kat\u00ebr vjet zhvillimi, baza kishte rreth 600 tabela, 1500 procedura t\u00eb ruajtura, n\u00eb shum\u00eb nga t\u00eb cilat kishte edhe logjik\u00eb. Fatkeq\u00ebsisht, procedurat e ruajtura nuk ofrojn\u00eb ndonj\u00eb avantazh t\u00eb ve\u00e7ant\u00eb kur punoni me MySQL. Ato nuk ruajn\u00eb n\u00eb cache nga baza, dhe ruajtja e logjik\u00ebs n\u00eb to e komplikon zhvillimin dhe debugging-un. Rinfoshkimi i kodit gjithashtu \u00ebsht\u00eb i v\u00ebshtir\u00eb.<\/p>\n<p><strong>N\u00eb shum\u00eb tabela nuk kishte indekse t\u00eb p\u00ebrshtatshme<\/strong>, nd\u00ebrsa n\u00eb disa t\u00eb tjera kishte shum\u00eb indekse, gj\u00eb q\u00eb e b\u00ebnte m\u00eb t\u00eb v\u00ebshtir\u00eb shtimin. Duhej t\u00eb modifikohen rreth 20 tabela \u2014 transaksioni p\u00ebr krijimin e porosis\u00eb mund t\u00eb zgjaste rreth 3-5 sekonda.&nbsp;<\/p>\n<p><strong>T\u00eb dh\u00ebnat n\u00eb tabela nuk ishin gjithmon\u00eb n\u00eb form\u00ebn m\u00eb t\u00eb duhur<\/strong>. N\u00eb disa raste duhej t\u00eb b\u00ebhej de-normalizimi. Nj\u00eb pjes\u00eb e t\u00eb dh\u00ebnave q\u00eb merrnim rregullisht ishte n\u00eb nj\u00eb kolon\u00eb n\u00eb form\u00ebn e nj\u00eb strukture XML, gj\u00eb q\u00eb e rrisnin koh\u00ebn e ekzekutimit, zgjateshin k\u00ebrkesat dhe e komplikonin zhvillimin.<\/p>\n<p>P\u00ebr t\u00eb nj\u00ebjtat tabela ishin b\u00ebr\u00eb shum\u00eb <strong>k\u00ebrkesa t\u00eb ndryshme<\/strong>. Ve\u00e7an\u00ebrisht vuajt\u00ebn tabelat e njohura, si tabela e p\u00ebrmendur <em>orders<\/em> apo tabela <em>pizzeria<\/em>. Ato p\u00ebrdorej p\u00ebr t\u00eb shp\u00ebrndar\u00eb nd\u00ebrfaqet operative n\u00eb kuzhin\u00eb, analitik\u00ebn. Gjithashtu u drejtohej faqes s\u00eb internetit (<noindex><a rel=\"nofollow\" href=\"https:\/\/dodopizza.ru\/\"><u>dodopizza.ru<\/u><\/a><\/noindex>), ku n\u00eb \u00e7do moment mund t\u00eb kishte shum\u00eb k\u00ebrkesa t\u00eb papritura.&nbsp;<\/p>\n<p><strong>T\u00eb dh\u00ebnat nuk ishin t\u00eb agreguara<\/strong> dhe shum\u00eb llogaritje ndodhnin n\u00eb fluks me ndihm\u00ebn e baz\u00ebs. Kjo krijonte llogaritje t\u00eb tep\u00ebrta dhe ngarkes\u00eb t\u00eb shtuar.&nbsp;<\/p>\n<p>Shpesh, kodi hynte n\u00eb baz\u00eb kur nuk kishte nevoj\u00eb. N\u00eb disa raste mungonin operacionet bulk, ndonj\u00ebher\u00eb ishte e nevojshme t\u00eb nd\u00ebrtohej nj\u00eb k\u00ebrkes\u00eb m\u00eb shum\u00eb p\u00ebrmes kodit, p\u00ebr t\u00eb p\u00ebrshpejtuar dhe rritur besueshm\u00ebrin\u00eb.&nbsp;<\/p>\n<h4>Lidhja dhe ngat\u00ebrrimi n\u00eb kod<\/h4>\n<p><strong>Modulet, t\u00eb cilat duhet t\u00eb ishin p\u00ebrgjegj\u00ebse p\u00ebr sektor\u00ebt e tyre t\u00eb biznesit, nuk e b\u00ebnin k\u00ebt\u00eb me ndershm\u00ebri.<\/strong>Disa prej tyre kishin p\u00ebrs\u00ebritje funksionesh p\u00ebr rolet. P\u00ebr shembull, marketeri lokal, i cili ishte p\u00ebrgjegj\u00ebs p\u00ebr aktivitetin marketing t\u00eb rrjetit n\u00eb qytetin e tij, duhej t\u00eb p\u00ebrdorte si nd\u00ebrfaqen \"Admin\" (p\u00ebr t\u00eb krijuar fushata), ashtu edhe nd\u00ebrfaqen \"Menaxheri i Zyr\u00ebs\" (p\u00ebr t\u00eb par\u00eb ndikimin e fushatave n\u00eb biznes). Sigurisht, brenda t\u00eb dy moduleve p\u00ebrdorej nj\u00eb sh\u00ebrbim, q\u00eb punonte me fushatat e bonusit.<\/p>\n<p>Sh\u00ebrbimet (klasa brenda nj\u00eb projekti t\u00eb madh monolitik) mund t\u00eb th\u00ebrrisnin nj\u00ebra-tjetr\u00ebn p\u00ebr t\u00eb pasuruar t\u00eb dh\u00ebnat e tyre.<\/p>\n<p>Me klasat-model, q\u00eb ruanin t\u00eb dh\u00ebna, <strong>punimi n\u00eb kod b\u00ebhej n\u00eb m\u00ebnyra t\u00eb ndryshme.<\/strong>N\u00eb disa raste kishte konstruktora, p\u00ebrmes t\u00eb cil\u00ebve mund t\u00eb shiheshin fushat e detyrueshme. N\u00eb disa t\u00eb tjera, kjo b\u00ebhej p\u00ebrmes pronar\u00ebve publik\u00eb. Sigurisht, marrja dhe transformimi i t\u00eb dh\u00ebnave nga baza ishte i larmish\u00ebm.&nbsp;<\/p>\n<p><strong>Logjika ishte ose n\u00eb kontrollet, ose n\u00eb klasat e sh\u00ebrbimeve.<\/strong>&nbsp;<\/p>\n<p>K\u00ebto mund t\u00eb duken si probleme t\u00eb vogla, por ato ngadal\u00ebsuan shum\u00eb zhvillimin dhe ul\u00ebn cil\u00ebsin\u00eb, duke \u00e7uar n\u00eb paq\u00ebndrueshm\u00ebri dhe gabime.&nbsp;<\/p>\n<h4>Sfidat e zhvillimit t\u00eb madh<\/h4>\n<p><strong>Problemet u shfaq\u00ebn edhe n\u00eb zhvillimin e vet\u00eb.<\/strong>Duhej t\u00eb b\u00ebheshin blloqe t\u00eb ndryshme t\u00eb sistemit, madje paralelisht. T\u00eb vendos\u00ebsh nevojat e \u00e7do komponente n\u00eb nj\u00eb kod t\u00eb vet\u00ebm po b\u00ebhej gjithnj\u00eb e m\u00eb e v\u00ebshtir\u00eb. Nuk ishte e leht\u00eb t\u00eb arrihej nj\u00eb marr\u00ebveshje dhe t\u00eb k\u00ebnaqeshin t\u00eb gjitha komponentet nj\u00ebher\u00ebsh. K\u00ebsaj i shtoheshin kufizime n\u00eb teknologji, ve\u00e7an\u00ebrisht kur b\u00ebhej fjal\u00eb p\u00ebr baz\u00ebn dhe frontend-in. Duhej t\u00eb hiqeshim nga JQuery drejt framework-ve m\u00eb t\u00eb avancuar, ve\u00e7an\u00ebrisht n\u00eb pjes\u00ebn e sh\u00ebrbimeve klient\u00ebve (faqja e internetit).<\/p>\n<p><strong>N\u00eb disa pjes\u00eb t\u00eb sistemit mund t\u00eb p\u00ebrdoren baza m\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr k\u00ebt\u00eb.<\/strong>P\u00ebr shembull, m\u00eb von\u00eb kishim nj\u00eb rast kalimi nga Redis n\u00eb CosmosDB p\u00ebr ruajtjen e shport\u00ebs s\u00eb porosis\u00eb.&nbsp;<\/p>\n<p>Grupet dhe zhvilluesit, q\u00eb merreshin me fushat e tyre, padyshim q\u00eb d\u00ebshironin m\u00eb shum\u00eb autonomi p\u00ebr sh\u00ebrbimet e tyre, si n\u00eb aspektin e zhvillimit, ashtu edhe n\u00eb at\u00eb t\u00eb lan\u00e7imit. Konfliktet gjat\u00eb bashkimeve, probleme gjat\u00eb lirimeve. N\u00ebse p\u00ebr 5 zhvillues kjo problematik\u00eb nuk ishte e r\u00ebnd\u00ebsishme, p\u00ebr 10, e tashm\u00eb p\u00ebr rritjen e planifikuar, gjith\u00e7ka do t\u00eb b\u00ebhej m\u00eb serioze. Dhe p\u00ebrpara duhej t\u00eb fillonte zhvillimi i aplikacionit mobil (ai filloi n\u00eb vitin 2017, dhe n\u00eb vitin 2018 kishte) <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/498280\/\">nj\u00eb r\u00ebnie t\u00eb madhe<\/a><\/noindex>).&nbsp;<\/p>\n<p><strong>Pjes\u00eb t\u00eb ndryshme t\u00eb sistemit k\u00ebrkonin tregues t\u00eb ndrysh\u00ebm t\u00eb stabilitetit<\/strong>, por p\u00ebr shkak t\u00eb lidhjes s\u00eb fort\u00eb t\u00eb sistemit, nuk mund\u00ebm ta siguronim k\u00ebt\u00eb. Nj\u00eb gabim n\u00eb zhvillimin e nj\u00eb funksioni t\u00eb ri n\u00eb admin, mund t\u00eb kishte ndikuar n\u00eb pranimin e porosis\u00eb n\u00eb faqen e internetit, pasi kodi ishte i p\u00ebrbashk\u00ebt dhe i rip\u00ebrdoruesh\u00ebm, baza dhe t\u00eb dh\u00ebnat gjithashtu ishin t\u00eb nj\u00ebjta.<\/p>\n<p>Ndoshta, mund t\u00eb kishte qen\u00eb e mundur q\u00eb edhe n\u00eb kuad\u00ebr t\u00eb nj\u00eb arkitekture monolitike-moderne, t\u00eb mos lejonim k\u00ebto gabime dhe probleme: t\u00eb b\u00ebnim ndarje p\u00ebrgjegj\u00ebsish, t\u00eb b\u00ebnim refaktorizimin e kodit dhe t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, t\u00eb ndajm\u00eb qart\u00eb shtresat nga nj\u00ebra-tjetra, dhe t\u00eb kontrollojm\u00eb cil\u00ebsin\u00eb \u00e7do dit\u00eb. Por zgjidhjet arhitektonike t\u00eb zgjedhura dhe fokusimi n\u00eb zgjerimin e shpejt\u00eb t\u00eb funksionalitetit t\u00eb sistemit \u00e7uan n\u00eb probleme n\u00eb \u00e7\u00ebshtjet e stabilitetit.<\/p>\n<h4>Si forumi Fuqia e Mendjes vendosi kasat n\u00eb restorante<\/h4>\n<p>N\u00ebse rritja e rrjetit t\u00eb picerive (dhe ngarkesave) do t\u00eb vazhdonte me k\u00ebt\u00eb rit\u00ebm, pas nj\u00eb kohe r\u00ebniet do t\u00eb ishin t\u00eb tilla q\u00eb sistemi nuk do t\u00eb ngrihej m\u00eb. Nj\u00eb histori q\u00eb ilustron problemet me t\u00eb cilat filluam t\u00eb p\u00ebrballemi n\u00eb vitin 2015 \u00ebsht\u00eb kjo.&nbsp;<\/p>\n<p>N\u00eb blogun \u201c<noindex><a rel=\"nofollow\" href=\"http:\/\/sila-uma.ru\/\"><u>Fuqia e Mendjes<\/u><\/a><\/noindex>nisi nj\u00eb widget q\u00eb tregonte t\u00eb dh\u00ebnat p\u00ebr t\u00eb ardhurat e gjith\u00eb rrjetit p\u00ebr nj\u00eb vit. Widget-i th\u00ebrriste API-n\u00eb publike Dodo, e cila ofronte k\u00ebto t\u00eb dh\u00ebna. Tani, k\u00ebto statistika jan\u00eb t\u00eb disponueshme n\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/dodopizzastory.com\/\"><u>http:\/\/dodopizzastory.com\/<\/u><\/a><\/noindex>. Widget-i shfaqej n\u00eb \u00e7do faqe dhe b\u00ebnte k\u00ebrkesa \u00e7do 20 sekonda. K\u00ebrkesa shkonte n\u00eb api.dodopizza.ru dhe k\u00ebrkonte:<\/p>\n<ul>\n<li>\n<p>numrin e picerive n\u00eb rrjet;<\/p>\n<\/li>\n<li>\n<p>t\u00eb ardhurat totale t\u00eb rrjetit q\u00eb nga fillimi i vitit;<\/p>\n<\/li>\n<li>\n<p>t\u00eb ardhurat e sotme.<\/p>\n<\/li>\n<\/ul>\n<p>K\u00ebrkesa p\u00ebr statistikat e t\u00eb ardhurave shkonte menj\u00ebher\u00eb n\u00eb baz\u00eb dhe fillonte t\u00eb k\u00ebrkonte t\u00eb dh\u00ebna p\u00ebr porosit\u00eb, duke agreguar t\u00eb dh\u00ebnat n\u00eb koh\u00eb reale dhe duke l\u00ebshuar shum\u00ebn.&nbsp;<\/p>\n<p>N\u00eb k\u00ebt\u00eb tavullin\u00eb t\u00eb porosive hynin Kasat n\u00eb restorante, duke nxjerr\u00eb list\u00ebn e porosive t\u00eb pranuara p\u00ebr sot, dhe aty shtoheshin porosit\u00eb e reja. Kasat b\u00ebnin k\u00ebrkesa \u00e7do 5 sekonda ose kur refresh-uan faqen.<\/p>\n<p>Skema dukej k\u00ebshtu:<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/9f39d8c412c64e6aa40a0d5170a8cc0e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nj\u00eb her\u00eb n\u00eb vjesht\u00eb, Fedor Ovchinnikov shkroi nj\u00eb artikull t\u00eb gjat\u00eb dhe popullor n\u00eb blogun e tij. Blogu t\u00ebrheq shum\u00eb njer\u00ebz dhe ata filluan ta lexonin me kujdes. Nd\u00ebrsa \u00e7do person i pranish\u00ebm po lexonte artikullin, widget-i i t\u00eb ardhurave punonte dhe k\u00ebrkonte API-n\u00eb \u00e7do 20 sekonda.<\/p>\n<p>API-ja th\u00ebrriste nj\u00eb procedur\u00eb t\u00eb ruajtur p\u00ebr llogaritjen e shum\u00ebs s\u00eb t\u00eb gjitha porosive q\u00eb nga fillimi i vitit p\u00ebr t\u00eb gjitha picerit\u00eb e rrjetit. Agregimi b\u00ebhej p\u00ebr tabel\u00ebn e porosive, e cila \u00ebsht\u00eb shum\u00eb e popullarizuar. Aty hynin t\u00eb gjitha kasat e restoranteve t\u00eb hapura n\u00eb at\u00eb moment. Kasat ndaluan s\u00eb p\u00ebrgjiguri, porosit\u00eb nuk pranoheshin. Ato gjithashtu nuk pranoheshin nga faqja, nuk shfaqeshin n\u00eb tracker, menaxheri i nd\u00ebrrimit nuk mund t\u00eb shihte ato n\u00eb nd\u00ebrfaqen e tij.&nbsp;<\/p>\n<p>Kjo nuk \u00ebsht\u00eb historia e vetme. Deri n\u00eb vjesht\u00ebn e vitit 2015, \u00e7do t\u00eb premte ngarkesa n\u00eb sistem ishte kritike. Disa her\u00eb ne fiknim API-n\u00eb publike, dhe nj\u00eb her\u00eb, na duhej madje t\u00eb fiknim faqen, sepse asgj\u00eb tjet\u00ebr nuk ndihmoi. Kishte madje nj\u00eb list\u00eb sh\u00ebrbimesh me rendin e fikjes p\u00ebr ngarkesa t\u00eb r\u00ebnda.<\/p>\n<p>Nga ky moment fillon lufta jon\u00eb me ngarkesat dhe p\u00ebr stabilizimin e sistemit (nga vjeshta e 2015 deri n\u00eb vjesht\u00ebn e 2018). Pik\u00ebrisht at\u00ebher\u00eb ndodhi \u201c<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/498280\/\"><u>R\u00ebnia e Madhe<\/u><\/a><\/noindex>\u201d. Edhe m\u00eb pas, her\u00eb pas here ndodhnin prishje, disa prej t\u00eb cilave ishin mjaft t\u00eb ndjeshme, por periudha e p\u00ebrgjithshme e destabilitetit tani mund t\u00eb quhet e kaluar.<\/p>\n<h4>Rritja e madhe e biznesit<\/h4>\n<p>Pse nuk mund t\u00eb \u201cb\u00ebhej menj\u00ebher\u00eb mir\u00eb\u201d? Mjafton t\u00eb shoh\u00ebsh grafiket n\u00eb vijim.<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/a6dd39909ecc553b2ff4a8fc370d5846.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Gjithashtu, n\u00eb vitet 2014-2015 u hap nj\u00eb pik\u00eb n\u00eb Rumani dhe po p\u00ebrgatitej hapja n\u00eb SHBA.<\/p>\n<p>Rrjeti po rritej shum\u00eb shpejt, po hapeshin vende t\u00eb reja, po shfaqeshin formate t\u00eb reja picerish, p\u00ebr shembull, u hap nj\u00eb piceri n\u00eb food court. E gjith\u00eb kjo k\u00ebrkonte nj\u00eb v\u00ebmendje t\u00eb konsiderueshme n\u00eb zgjerimin e funksioneve Dodo IS. Pa t\u00eb gjitha k\u00ebto funksione, pa gjurmimin n\u00eb kuzhin\u00eb, llogaritjen e produkteve dhe humbjeve n\u00eb sistem, shfaqjen e porosive n\u00eb sall\u00ebn e food court, v\u00ebshtir\u00eb se do t\u00eb diskutonim tani p\u00ebr arkitektur\u00ebn \u201ce duhur\u201d dhe qasjen \u201ce sakt\u00eb\u201d n\u00eb zhvillim.<\/p>\n<p>Pengesat p\u00ebr rivler\u00ebsimin n\u00eb koh\u00eb t\u00eb arkitektur\u00ebs dhe v\u00ebmendjes n\u00eb problemet teknike, ishin kriza e vitit 2014. K\u00ebto gj\u00ebra godasin r\u00ebnd\u00eb mund\u00ebsit\u00eb p\u00ebr rritjen e grupeve, ve\u00e7an\u00ebrisht p\u00ebr biznesin e ri si\u00e7 ishte Dodo Pizza.<\/p>\n<h3>Zgjidhjet e shpejta q\u00eb ndihmuan<\/h3>\n<p>Problemet k\u00ebrkonin zgjidhje. N\u00eb m\u00ebnyr\u00eb relative, zgjidhjet mund t\u00eb ndahen n\u00eb 2 grupe:<\/p>\n<ul>\n<li>\n<p>T\u00eb shpejta, t\u00eb cilat shuhin zjarri dhe japin nj\u00eb rezerv\u00eb t\u00eb vog\u00ebl stabiliteti dhe na fitojn\u00eb koh\u00eb p\u00ebr ndryshime.<\/p>\n<\/li>\n<li>\n<p>Sistematike dhe, prandaj, t\u00eb gjata. Riinxhirimi i disa moduleve, ndarja e arkitektur\u00ebs monolite n\u00eb sh\u00ebrbime t\u00eb ve\u00e7anta (shumica nga to nuk jan\u00eb n\u00eb fakt mikro, por m\u00eb shum\u00eb makro-sh\u00ebrbime dhe p\u00ebr k\u00ebt\u00eb ka <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=XeNrWkRmVWw\"><u>nj\u00eb raport nga Andrey Morevsky<\/u><\/a><\/noindex>).&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>Lista e thjesht\u00eb e ndryshimeve t\u00eb shpejta \u00ebsht\u00eb si vijon:<\/p>\n<h4>Rritja e kapacitetit t\u00eb master baz\u00ebs<\/h4>\n<p>Sigurisht, gj\u00ebja e par\u00eb q\u00eb b\u00ebhet p\u00ebr t\u00eb p\u00ebrballuar ngarkesat \u00ebsht\u00eb rritja e kapacitetit t\u00eb serverit. Kjo u b\u00eb p\u00ebr master baz\u00ebn dhe p\u00ebr serverat web. Fatkeq\u00ebsisht, kjo \u00ebsht\u00eb e mundur vet\u00ebm deri n\u00eb nj\u00eb kufi t\u00eb caktuar, m\u00eb pas b\u00ebhet shum\u00eb e shtrenjt\u00eb.<\/p>\n<p>Q\u00eb nga viti 2014 ne kaluam n\u00eb Azure, p\u00ebr k\u00ebt\u00eb tema ne gjithashtu kemi shkruar at\u00ebher\u00eb n\u00eb artikullin \u201c<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/microsoft\/blog\/277821\/\">Si Dodo Pizza sjell pica me ndihm\u00ebn e cloud-it Microsoft Azure<\/a><\/noindex>\u201d. Por pas nj\u00eb s\u00ebr\u00eb rritjesh t\u00eb serverit p\u00ebr baz\u00ebn, u penguam n\u00eb koston.&nbsp;<\/p>\n<h4>Replicat e baz\u00ebs p\u00ebr lexim<\/h4>\n<p>B\u00ebri dy replika p\u00ebr baz\u00ebn:<\/p>\n<p><strong>ReadReplica<\/strong> <strong>p\u00ebr k\u00ebrkesat p\u00ebr registrat<\/strong>. P\u00ebrdoret p\u00ebr leximin e regjistrave, si qytete, rrug\u00eb, piceri, produkte (domene t\u00eb ngadalta), dhe n\u00eb ato nd\u00ebrfaqe ku pranohet nj\u00eb vones\u00eb e vog\u00ebl. K\u00ebto replika ishin 2, ne siguronim disponueshm\u00ebrin\u00eb e tyre ashtu si edhe masterin.<\/p>\n<p><strong>ReadReplica p\u00ebr k\u00ebrkesat p\u00ebr raporte<\/strong>. Kjo baz\u00eb kishte nj\u00eb disponueshm\u00ebri m\u00eb t\u00eb ul\u00ebt, por p\u00ebrfshinte t\u00eb gjitha raportet. Le t\u00eb ken\u00eb k\u00ebrkesa t\u00eb r\u00ebnda p\u00ebr p\u00ebrllogaritje t\u00eb m\u00ebdha t\u00eb t\u00eb dh\u00ebnave, por ato nuk ndikonin n\u00eb baz\u00ebn kryesore dhe n\u00eb nd\u00ebrfaqet operative.&nbsp;<\/p>\n<h4>Keshat n\u00eb kod<\/h4>\n<p>Keshat n\u00eb kod nuk ishin askund (p\u00ebrgjith\u00ebsisht). Kjo \u00e7onte n\u00eb k\u00ebrkesa shtes\u00eb, jo gjithmon\u00eb t\u00eb nevojshme, n\u00eb baz\u00ebn e ngarkuar. Keshat ishin fillimisht n\u00eb memorie dhe gjithashtu n\u00eb nj\u00eb sh\u00ebrbim t\u00eb jasht\u00ebm t\u00eb keshit, ishte Redis. T\u00eb gjitha invalidoheshin me koh\u00eb, cil\u00ebsimet p\u00ebrcaktoheshin n\u00eb kod.<\/p>\n<h4>Disa server\u00eb p\u00ebr backend<\/h4>\n<p>Backend i aplikacionit gjithashtu duhet t\u00eb shkall\u00ebzohej p\u00ebr t\u00eb p\u00ebrballuar ngarkesat e rritura. Duhej t\u00eb krijonim nj\u00eb klaster nga nj\u00eb server i caktuar i iis. Ne transferuam <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/aspnet\/core\/fundamentals\/app-state?view=aspnetcore-3.1\"><u>sesionin e aplikacioneve<\/u><\/a><\/noindex> nga memorie n\u00eb RedisCache, e cila lejoi t\u00eb krijoheshin disa server\u00eb q\u00eb qendronin pas nj\u00eb balancuesi t\u00eb thjesht\u00eb ngarkese me round robin. Fillimisht u p\u00ebrdor t\u00eb nj\u00ebjtin Redis si p\u00ebr keshat, pastaj i ndam\u00eb n\u00eb disa.&nbsp;<\/p>\n<p>Si pasoj\u00eb, arkitektura u komplikuar...<\/p>\n<p><img decoding=\"async\" alt=\"Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm\" src=\"\/wp-content\/uploads\/2020\/10\/70a3e8d5578469239c08b4759ab32264.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>...por nj\u00eb pjes\u00eb e ngarkes\u00ebs u leht\u00ebsua.<\/p>\n<p>Dhe m\u00eb pas duhej t\u00eb rip\u00ebrkraheshin komponent\u00ebt e ngarkuar, p\u00ebr t\u00eb cilat ne filluam. P\u00ebr k\u00ebt\u00eb do flasim n\u00eb pjes\u00ebn tjet\u00ebr.<\/p>\n<p>Burimi: <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.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u043b\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u043c \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443.\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Dodo IS \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b \u2014 \u0432 2011 \u0433\u043e\u0434\u0443.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47Historia e arkitektur\u00ebs Dodo IS: monoliti i hersh\u00ebm | ProHoster","description":"Ose \u00e7do kompani e pafat me nj\u00eb monolit \u00ebsht\u00eb e pafat n\u00eb m\u00ebnyr\u00ebn e vet. Zhvillimi i sistemit Dodo IS filloi menj\u00ebher\u00eb me fillimin e biznesit Dodo Pizza \u2014 n\u00eb vitin 2011.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/istoriya-arhitektury-dodo-is-rannij-monolit","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/95804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=95804"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/95804\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/95805"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=95804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=95804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=95804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}