{"id":35906,"date":"2019-10-31T22:07:29","date_gmt":"2019-10-31T19:07:29","guid":{"rendered":"https:\/\/prohoster.info\/blog\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika\/"},"modified":"2019-10-31T22:07:29","modified_gmt":"2019-10-31T19:07:29","slug":"perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika","title":{"rendered":"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>N\u00eb k\u00ebt\u00eb artikull do t\u00eb flas p\u00ebr m\u00ebnyr\u00ebn se si projekti n\u00eb t\u00eb cilin punoj u transformua nga nj\u00eb monolit i madh n\u00eb nj\u00eb grup mikrosh\u00ebrbimesh.<\/p>\n<p>Projekti filloi historin\u00eb e tij mjaft koh\u00eb m\u00eb par\u00eb, n\u00eb fillim t\u00eb viteve 2000. Versionet e para ishin shkruar n\u00eb Visual Basic 6. Me kalimin e koh\u00ebs, u b\u00eb evidente se zhvillimi n\u00eb k\u00ebt\u00eb gjuh\u00eb do t\u00eb ishte i v\u00ebshtir\u00eb p\u00ebr t'u mbajtur, pasi IDE dhe vet\u00eb gjuha zhvilloheshin ngadal\u00eb. N\u00eb fund t\u00eb viteve 2000, u vendos t\u00eb kalojm\u00eb n\u00eb nj\u00eb C# m\u00eb t\u00eb perspektiv\u00eb. Versioni i ri u shkruajt paralelisht me p\u00ebrmir\u00ebsimin e atij t\u00eb vjet\u00ebr, duke u b\u00ebr\u00eb gradualisht m\u00eb shum\u00eb kod n\u00eb .NET. Backend n\u00eb C# fillimisht ishte orientuar n\u00eb nj\u00eb arkitektur\u00eb sh\u00ebrbimi, megjithat\u00eb gjat\u00eb zhvillimit u p\u00ebrdor\u00ebn biblioteka t\u00eb p\u00ebrbashk\u00ebta me logjik\u00eb, dhe sh\u00ebrbimet u startuan n\u00eb nj\u00eb proces t\u00eb vet\u00ebm. U krijua nj\u00eb aplikacion, t\u00eb cilin e quajt\u00ebm \"monolit sh\u00ebrbimi\". <\/p>\n<p>Nj\u00eb nga pak p\u00ebrfitimet e k\u00ebtij kombinimi ishte mund\u00ebsia e sh\u00ebrbimeve p\u00ebr t\u00eb thirrur nj\u00ebra-tjetr\u00ebn p\u00ebrmes nj\u00eb API t\u00eb jashtme. Kishin ekzistuar premisa t\u00eb dukshme p\u00ebr kalimin n\u00eb nj\u00eb arkitektur\u00eb m\u00eb t\u00eb drejt\u00eb sh\u00ebrbimi, dhe n\u00eb perspektiv\u00eb n\u00eb arkitektur\u00ebn mikrosh\u00ebrbimore. <\/p>\n<p>Ne e filluam pun\u00ebn ton\u00eb p\u00ebr dekompozimin rreth vitit 2015. Nd\u00ebrsa ende nuk kemi arritur nj\u00eb gjendje ideale - kan\u00eb mbetur pjes\u00eb t\u00eb m\u00ebdha t\u00eb projektit, t\u00eb cilat tashm\u00eb \u00ebsht\u00eb e v\u00ebshtir\u00eb t'i quajm\u00eb monolite, por as q\u00eb ngjajn\u00eb me mikrosh\u00ebrbime. Megjithat\u00eb, progresi \u00ebsht\u00eb i duksh\u00ebm. <br \/>\nP\u00ebr k\u00ebt\u00eb do t\u00eb flas n\u00eb artikull.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/132bb4ea6b9dbcdd202ee090f2b86289.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>P\u00ebrmbajtja<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#1\"> Arkitektura dhe problemet e zgjidhjes existente<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#2\">Pritet nga mikrosh\u00ebrbimet<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#3\">Problemet e kalimit<\/a><\/noindex><\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"#4\">Si t\u00eb kaloni nga monoliti n\u00eb mikrosh\u00ebrbime<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#5\">M\u00ebnyra e par\u00eb<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#6\">M\u00ebnyra e dyt\u00eb<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#7\">M\u00ebnyra e tret\u00eb<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#8\">M\u00ebnyra e kat\u00ebrt<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#9\">Puna me DB<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#10\">Ndara e tabelave ekzistuese<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#11\">Ndara me rishikim<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#12\">Puna me kodin burimor<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#13\">Problemet e Infrastruktur\u00ebs<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#16\">Instalimi manual n\u00eb mjedise<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#14\">Logimi i ve\u00e7uar<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#15\">Testimi dhe debagimi i sh\u00ebrbimeve t\u00eb lidhura<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"1\"><\/a><\/noindex><b><\/p>\n<h3>Arkitektura dhe problemet e zgjidhjes existente<\/h3>\n<p><\/b><br \/>\nFillimisht, arkitektura dukej si m\u00eb posht\u00eb: UI - nj\u00eb aplikacion i ve\u00e7ant\u00eb, pjesa monolit \u00ebsht\u00eb shkruar n\u00eb Visual Basic 6, aplikacioni n\u00eb .NET ishte nj\u00eb grup sh\u00ebrbimesh t\u00eb lidhura, q\u00eb punonin me nj\u00eb baz\u00eb t\u00eb dh\u00ebnash mjaft t\u00eb madhe.<\/p>\n<p><b>Disavantazhet e zgjidhjes s\u00eb m\u00ebparshme<\/b><\/p>\n<p><u>Pika e vetme e d\u00ebshtimit<\/u><br \/>\nNe kemi pasur nj\u00eb pik\u00eb t\u00eb vetme t\u00eb d\u00ebshtimit: aplikacioni n\u00eb .NET ekzekutohej n\u00eb nj\u00eb proces. N\u00ebse ndodhte ndonj\u00eb d\u00ebshtim n\u00eb nj\u00eb prej moduleve, gjith\u00eb aplikacioni d\u00ebshtonte dhe duhej riaktivizuar. Duke qen\u00eb se kemi automatizuar nj\u00eb num\u00ebr t\u00eb madh procesesh p\u00ebr p\u00ebrdorues t\u00eb ndrysh\u00ebm, p\u00ebr shkak t\u00eb nj\u00eb d\u00ebshtimi n\u00eb nj\u00ebrin prej tyre, t\u00eb gjith\u00eb nuk mund t\u00eb punonin p\u00ebr nj\u00eb periudh\u00eb. As rezervimi nuk ndihmonte n\u00eb rast t\u00eb nj\u00eb gabimi programor. <\/p>\n<p><u>Rradha e rregullimeve<\/u><br \/>\nKy mang\u00ebsi \u00ebsht\u00eb m\u00eb shum\u00eb organizativ. N\u00eb aplikacionin ton\u00eb ka shum\u00eb porosit\u00ebs, dhe t\u00eb gjith\u00eb ata duan ta rregullojn\u00eb at\u00eb sa m\u00eb shpejt q\u00eb t\u00eb jet\u00eb e mundur. M\u00eb par\u00eb, nuk ishte e mundur ta b\u00ebnim k\u00ebt\u00eb paralelisht, dhe t\u00eb gjith\u00eb porosit\u00ebsit prisnin n\u00eb rradhe. Ky proces shkaktonte negativitet p\u00ebr biznesin, pasi ata duhej t\u00eb provonin se detyra e tyre kishte vler\u00eb. Dhe ekipi i zhvillimit e kalonte koh\u00ebn p\u00ebr t\u00eb organizuar k\u00ebt\u00eb rradhe. Kjo merrte shum\u00eb koh\u00eb dhe forc\u00eb, dhe produkti n\u00eb fund nuk mund t\u00eb ndryshonte aq shpejt sa d\u00ebshironin.<\/p>\n<p><u>P\u00ebrdorim i pap\u00ebrshtatsh\u00ebm i burimeve<\/u><br \/>\nKur vendosnim sh\u00ebrbimet n\u00eb nj\u00eb proces t\u00eb vet\u00ebm, gjithmon\u00eb e kopjonim plot\u00ebsisht konfigurimin nga serveri n\u00eb server. Na p\u00eblqente t\u00eb vendosnim sh\u00ebrbimet m\u00eb t\u00eb ngarkuara ve\u00e7mas, p\u00ebr t\u00eb mos humbur burimet kot dhe p\u00ebr t\u00eb fituar nj\u00eb menaxhim m\u00eb t\u00eb fleksib\u00ebl t\u00eb skem\u00ebs ton\u00eb t\u00eb shp\u00ebrndarjes.<\/p>\n<p><u>E v\u00ebshtir\u00eb t\u00eb implementosh teknologji moderne<\/u><br \/>\nNj\u00eb problem q\u00eb t\u00eb gjith\u00eb zhvilluesit e njohin: ka d\u00ebshir\u00eb p\u00ebr t\u00eb implementuar teknologji moderne n\u00eb projekt, por nuk ka mund\u00ebsi. N\u00eb nj\u00eb zgjidhje t\u00eb madhe monolite, \u00e7do p\u00ebrdit\u00ebsim i bibliotek\u00ebs aktuale, duke mos p\u00ebrmendur kalimin n\u00eb nj\u00eb t\u00eb re, shnd\u00ebrrohet n\u00eb nj\u00eb detyr\u00eb t\u00eb mjaftueshme jo triviale. Duhet t\u00eb argumentohet gjat\u00eb p\u00ebrpara liderit t\u00eb ekipit, q\u00eb kjo do t\u00eb sjell\u00eb m\u00eb shum\u00eb p\u00ebrfitime se sa nerva t\u00eb shpenzuara. <\/p>\n<p><u>V\u00ebshtir\u00ebsi n\u00eb dh\u00ebnien e ndryshimeve<\/u><br \/>\nKjo ishte problemi m\u00eb i r\u00ebnd\u00ebsish\u00ebm - ne l\u00ebshonim versionet \u00e7do dy muaj. <br \/>\n\u00c7do l\u00ebshim shnd\u00ebrrohej n\u00eb nj\u00eb katastrof\u00eb reale p\u00ebr bank\u00ebn, pavar\u00ebsisht testimeve dhe p\u00ebrpjekjeve t\u00eb zhvilluesve. Biznesi e dinte se n\u00eb fillim t\u00eb jav\u00ebs do t\u00eb kishte nj\u00eb pjes\u00eb t\u00eb funksionaliteteve q\u00eb nuk do t\u00eb punonin. Dhe zhvilluesit e dinin se i priste nj\u00eb jav\u00eb me incidente serioze. <br \/>\nT\u00eb gjith\u00eb kishin d\u00ebshir\u00ebn p\u00ebr t\u00eb ndryshuar situat\u00ebn. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"2\"><\/a><\/noindex><b><\/p>\n<h3>Pritet nga mikrosh\u00ebrbimet<\/h3>\n<p><\/b><br \/>\n<u>L\u00ebshimi i komponent\u00ebve sipas gatishm\u00ebris\u00eb. <\/u>L\u00ebshimi i komponent\u00ebve sipas gatishm\u00ebris\u00eb fal\u00eb dekompozimit t\u00eb zgjidhjes dhe ndarjes s\u00eb proceseve t\u00eb ndryshme.<\/p>\n<p><u>Ekipet e vogla t\u00eb produkteve.<\/u> Kjo \u00ebsht\u00eb e r\u00ebnd\u00ebsishme, sepse menaxhimi i nj\u00eb ekipi t\u00eb madh q\u00eb punon mbi nj\u00eb monolit t\u00eb vjet\u00ebr ishte e v\u00ebshtir\u00eb. Nj\u00eb ekip i till\u00eb detyrohej t\u00eb punonte sipas nj\u00eb procesi t\u00eb rrept\u00eb, nd\u00ebrsa do t\u00eb d\u00ebshironin m\u00eb shum\u00eb krijimtari dhe pavar\u00ebsi. K\u00ebt\u00eb mund ta lejonin vet\u00ebm ekipet e vogla.<\/p>\n<p><u>Izolimi i sh\u00ebrbimeve n\u00eb procese t\u00eb ve\u00e7anta.<\/u> Idealisht do t\u00eb d\u00ebshironim t\u00eb izolonim n\u00eb kontejner\u00eb, por numri i madh i sh\u00ebrbimeve t\u00eb shkruara n\u00eb .NET Framework funksionon vet\u00ebm n\u00ebn Windows. Tani po shfaqen sh\u00ebrbime t\u00eb reja n\u00eb .NET Core, por jan\u00eb ende t\u00eb pakta.<\/p>\n<p><u>Fleksibiliteti i implementimit.<\/u> Do t\u00eb donim t\u00eb kombinonim sh\u00ebrbimet ashtu si\u00e7 na nevojitet, dhe jo ashtu si\u00e7 e detyron kodi.<\/p>\n<p><u>P\u00ebrdorimi i teknologjive t\u00eb reja.<\/u> Kjo \u00ebsht\u00eb interesante p\u00ebr \u00e7do programues.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"3\"><\/a><\/noindex><b><\/p>\n<h3>Problemet e kalimit<\/h3>\n<p><\/b><br \/>\nSigurisht, n\u00ebse ndarja e monolit n\u00eb mikrosh\u00ebrbime do t\u00eb ishte e leht\u00eb, nuk do t\u00eb flitej p\u00ebr k\u00ebt\u00eb n\u00eb konferenca dhe nuk do t\u00eb shkruheshin artikuj. Ky proces ka shum\u00eb pengesa, do t\u00eb p\u00ebrshkruaj ato kryesoret q\u00eb na penguan.<\/p>\n<p><b>Problemi i par\u00eb<\/b> \u00ebsht\u00eb tipik p\u00ebr shumic\u00ebn e monoliteve: lidhshm\u00ebria e logjik\u00ebs s\u00eb biznesit. Kur shkruajm\u00eb monolit, ne duam t\u00eb rip\u00ebrdorim klasat tona p\u00ebr t\u00eb mos shkruar kod t\u00eb tep\u00ebrt. Por, kur kalojm\u00eb n\u00eb mikrosh\u00ebrbime, kjo b\u00ebhet nj\u00eb problem: i gjith\u00eb kodi \u00ebsht\u00eb mjaft i lidhur ngusht\u00eb, dhe \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb ndajm\u00eb sh\u00ebrbimet.<\/p>\n<p>N\u00eb momentin e fillimit t\u00eb pun\u00ebs, n\u00eb depo kishte m\u00eb shum\u00eb se 500 projekte dhe m\u00eb shum\u00eb se 700 mij\u00eb rreshta kodi. Kjo \u00ebsht\u00eb nj\u00eb zgjidhje mjaft e madhe dhe <b>problemi i dyt\u00eb<\/b>. Thjesht ta ndajm\u00eb at\u00eb n\u00eb mikrosh\u00ebrbime nuk ishte e mundur.<\/p>\n<p><b>Problemi i tret\u00eb<\/b> \u00ebsht\u00eb mungesa e infrastruktur\u00ebs s\u00eb nevojshme. N\u00eb thelb, ne ishim duke b\u00ebr\u00eb kopjimin manual t\u00eb kodit burimor n\u00eb servera.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"4\"><\/a><\/noindex><b><\/p>\n<h3>Si t\u00eb kaloni nga monoliti n\u00eb mikrosh\u00ebrbime<\/h3>\n<p><\/b><br \/>\n<u>Dalja e mikrosh\u00ebrbimeve<\/u><\/p>\n<p>S\u00eb pari, ne e p\u00ebrcaktuam menj\u00ebher\u00eb se ndarja e mikrosh\u00ebrbimeve \u00ebsht\u00eb nj\u00eb proces iterativ. Na k\u00ebrkohej gjithmon\u00eb t\u00eb zhvilloheshim paralelisht me detyrat e biznesit. Si do ta realizonim k\u00ebt\u00eb teknikisht \u2013 kjo ishte problemi yn\u00eb. Prandaj, ne u p\u00ebrgatit\u00ebm p\u00ebr nj\u00eb proces iterativ. Nuk do t\u00eb funksiononte ndryshe, n\u00ebse keni nj\u00eb aplikacion t\u00eb madh dhe ai fillimisht nuk \u00ebsht\u00eb i gatsh\u00ebm p\u00ebr t'u shkruar nga e para.<\/p>\n<p>Cilat jemi ne m\u00ebnyrat q\u00eb p\u00ebrdorim p\u00ebr t\u00eb dal\u00eb mikrosh\u00ebrbimet?<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"5\"><\/a><\/noindex><b>M\u00ebnyra e par\u00eb <\/b>\u2014 t\u00eb rregullojm\u00eb modulet ekzistuese si sh\u00ebrbime. N\u00eb k\u00ebt\u00eb plan, kishim fat: sh\u00ebrbimet e gatshme ishin t\u00eb dizajnuara duke punuar me protokollin WCF. Ato ishin t\u00eb shp\u00ebrndara n\u00eb ndarje t\u00eb ve\u00e7anta. Ne i transferuam ato ve\u00e7mas, duke i shtuar \u00e7do ndarje nj\u00eb modul t\u00eb vog\u00ebl nis\u00ebs. Ai ishte shkruar me bibliotek\u00ebn e shk\u00eblqyer Topshelf, e cila lejon t\u00eb ekzekutohet aplikacioni si sh\u00ebrbim dhe si konsol\u00eb. Kjo \u00ebsht\u00eb e p\u00ebrshtatshme p\u00ebr debugimin, pasi nuk k\u00ebrkon projekte t\u00eb tjera n\u00eb zgjidhje.<\/p>\n<p>Sh\u00ebrbimet ishin t\u00eb lidhura me logjik\u00ebn e biznesit, pasi p\u00ebrdornin ndarje t\u00eb zakonshme dhe punonin me nj\u00eb baz\u00eb t\u00eb p\u00ebrbashk\u00ebt t\u00eb t\u00eb dh\u00ebnave. Ishin t\u00eb v\u00ebshtira p\u00ebr t'u quajtur mikrosherbime n\u00eb sensin e past\u00ebr. Megjithat\u00eb, ne mund t\u00eb shp\u00ebrndanim k\u00ebto sh\u00ebrbime ve\u00e7mas, n\u00eb procese t\u00eb ndryshme. Kjo tashm\u00eb lejonte t\u00eb zvog\u00eblohej ndikimi i nj\u00ebri-tjetrit, duke ulur problemin e zhvillimit paralel dhe pik\u00ebs s\u00eb vetme t\u00eb d\u00ebshtimit.<\/p>\n<p>Ndarja me hostin \u00ebsht\u00eb vet\u00ebm nj\u00eb rresht kodi n\u00eb klas\u00ebn Program. Puna me Topshelf ishte fshehur n\u00eb nj\u00eb klas\u00eb ndihm\u00ebse.<\/p>\n<pre><code class=\"plaintext\">namespace RBA.Services.Accounts.Host\n{\n   internal class Program\n   {\n      private static void Main(string[] args)\n      {\n        HostRunner.Run(\"RBA.Services.Accounts.Host\");\n\n       }\n    }\n}\n<\/code><\/pre>\n<p>\n<noindex><a rel=\"nofollow\" name=\"6\"><\/a><\/noindex><b>M\u00ebnyra e dyt\u00eb e ndarjes s\u00eb mikrosherbimeve:<\/b> t\u00eb krijojm\u00eb ato p\u00ebr t\u00eb zgjidhur detyra t\u00eb reja. N\u00ebse n\u00eb k\u00ebt\u00eb rast monoliti nuk rritet, kjo \u00ebsht\u00eb nj\u00eb gj\u00eb e shk\u00eblqyer, q\u00eb do t\u00eb thot\u00eb se po l\u00ebvizim n\u00eb drejtimin e duhur. P\u00ebr zgjidhjen e detyrave t\u00eb reja ne p\u00ebrpiqeshim t\u00eb b\u00ebnim sh\u00ebrbime t\u00eb ve\u00e7anta. N\u00ebse kishte mund\u00ebsi, at\u00ebher\u00eb krijonim sh\u00ebrbime m\u00eb \"kanonike\", t\u00eb cilat menaxhojn\u00eb plot\u00ebsisht modelin e tyre t\u00eb t\u00eb dh\u00ebnave, nj\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb ve\u00e7ant\u00eb. <\/p>\n<p>Ne, si shum\u00eb t\u00eb tjer\u00eb, filluam me sh\u00ebrbimet e autentifikimit dhe autorizimit. Ato jan\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr k\u00ebt\u00eb. Ato jan\u00eb t\u00eb pavarura, zakonisht kan\u00eb nj\u00eb model t\u00eb ve\u00e7ant\u00eb t\u00eb t\u00eb dh\u00ebnave. Ato vet\u00eb nuk nd\u00ebrveprojn\u00eb me monolitin, vet\u00ebm ai iu drejtohet atyre p\u00ebr t\u00eb zgjidhur ndonj\u00eb detyr\u00eb. N\u00eb k\u00ebto sh\u00ebrbime mund t\u00eb fillojm\u00eb kalimin n\u00eb nj\u00eb arkitektur\u00eb t\u00eb re, t'i p\u00ebrshtatnim infrastruktura, t\u00eb provonim disa qasje t\u00eb lidhura me bibliotekat e rrjetit, etj. N\u00eb organizat\u00ebn ton\u00eb nuk ka ekipe t\u00eb cilat nuk do t\u00eb mund t\u00eb krijonin nj\u00eb sh\u00ebrbim autentifikimi. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"7\"><\/a><\/noindex><b>M\u00ebnyra e tret\u00eb e ndarjes s\u00eb mikrosherbimeve<\/b>, i cili \u00ebsht\u00eb pak specifik p\u00ebr ne. Kjo \u00ebsht\u00eb nxjerrja e logjik\u00ebs biznesore nga shtresa UI. Aplikacioni yn\u00eb kryesor i UI \u00ebsht\u00eb desktop, i shkruar n\u00eb C# si backend-u. Zhvilluesit ndonj\u00ebher\u00eb gabonin dhe sillnin pjes\u00eb t\u00eb logjik\u00ebs n\u00eb UI, q\u00eb duhej t\u00eb ekzistonin n\u00eb backend dhe t\u00eb rip\u00ebrdoren. <\/p>\n<p>N\u00ebse shohim nj\u00eb shembull real nga kodi i pjes\u00ebs UI, shihet se shumica e k\u00ebtij zgjidhjeje p\u00ebrmban logjik\u00ebn reale t\u00eb biznesit, e cila \u00ebsht\u00eb e dobishme n\u00eb procese t\u00eb tjera, jo vet\u00ebm p\u00ebr nd\u00ebrtimin e formular\u00ebve UI. <\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/74c7b90ff94b343816ab3ac2fa0673c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLogjika reale t\u00eb UI aty ka vet\u00ebm dy rreshta t\u00eb fundit. Ne e kemi transferuar at\u00eb n\u00eb server p\u00ebr ta b\u00ebr\u00eb t\u00eb rip\u00ebrdorshme, duke reduktuar k\u00ebshtu UI-n\u00eb dhe arritur nj\u00eb arkitektur\u00eb t\u00eb duhur.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"8\"><\/a><\/noindex><b>M\u00ebnyra e kat\u00ebrt, m\u00eb e r\u00ebnd\u00ebsishme p\u00ebr t\u00eb ndar\u00eb mikrosh\u00ebrbimet<\/b>, e cila lejon t\u00eb reduktoj\u00eb monolit, \u00ebsht\u00eb nxjerrja e sh\u00ebrbimeve ekzistuese me rip\u00ebrpunim. Kur ne nxjerrim module ekzistuese ashtu si jan\u00eb, rezultati nuk i p\u00eblqen gjithmon\u00eb zhvilluesve, dhe procesi i biznesit mund t\u00eb jet\u00eb kthyer pas nga koha e krijimit t\u00eb funksionalitetit. Fal\u00eb refaktorizimit, ne mund t\u00eb mb\u00ebshtesim nj\u00eb proces t\u00eb ri biznesi, sepse k\u00ebrkesat e biznesit vazhdimisht ndryshojn\u00eb. Ne mund t\u00eb p\u00ebrmir\u00ebsojm\u00eb kodin burimor, t\u00eb hoqim defekte t\u00eb njohura, t\u00eb krijojm\u00eb nj\u00eb model m\u00eb cil\u00ebsor t\u00eb t\u00eb dh\u00ebnave. P\u00ebrfitime t\u00eb shumta grumbullohen.<\/p>\n<p>Ndarja e sh\u00ebrbimeve me rip\u00ebrpunim \u00ebsht\u00eb e lidhur ngusht\u00eb me konceptin e kontekstit t\u00eb kufizuar. Ky \u00ebsht\u00eb nj\u00eb koncept nga dizajni i orientuar nga subjekti. Ai do t\u00eb thot\u00eb nj\u00eb pjes\u00eb e modelit t\u00eb fush\u00ebs, ku t\u00eb gjitha termat e gjuh\u00ebs s\u00eb nj\u00ebjt\u00eb jan\u00eb t\u00eb p\u00ebrcaktuara qart\u00eb. Le ta ilustrojm\u00eb me shembullin e konteksteve t\u00eb sigurimeve dhe faturave. Ne kemi nj\u00eb aplikacion monolit dhe \u00ebsht\u00eb e nevojshme t\u00eb punojm\u00eb me fatur\u00ebn n\u00eb sigurime. Ne presim q\u00eb zhvilluesi t\u00eb gjej\u00eb n\u00eb nj\u00eb nd\u00ebrrim t\u00eb ndrysh\u00ebm klas\u00ebn ekzistuese 'Fatur\u00eb', t\u00eb b\u00ebj\u00eb nj\u00eb lidhje me t\u00eb nga klasa 'Sigurim', dhe t\u00eb marrim kod n\u00eb pun\u00eb. Parimi DRY do t\u00eb respektohet, detyra do t\u00eb realizohet m\u00eb shpejt p\u00ebrmes p\u00ebrdorimit t\u00eb kodit ekzistues.<\/p>\n<p>Si p\u00ebrshtatet, kontekstet e llogarive dhe t\u00eb sigurimeve jan\u00eb t\u00eb lidhura. Kur t\u00eb shfaqen k\u00ebrkesa t\u00eb reja, kjo lidhje do t'i pengoj\u00eb zhvillimet, duke e rritur kompleksitetin e logjik\u00ebs s\u00eb biznesit tashm\u00eb t\u00eb nd\u00ebrlikuar. P\u00ebr t\u00eb zgjidhur k\u00ebt\u00eb problem, duhet t\u00eb gjejm\u00eb kufijt\u00eb midis konteksteve n\u00eb kod dhe t\u00eb heqim shkeljet e tyre. P\u00ebr shembull, konteksti i sigurimeve do t\u00eb mjaftonte me nj\u00eb num\u00ebr llogarie 20-shifror t\u00eb BQK-s\u00eb dhe dat\u00ebn e hapjes s\u00eb llogaris\u00eb. <\/p>\n<p>P\u00ebr t\u00eb ndar\u00eb k\u00ebto kontekste t\u00eb kufizuar nga nj\u00ebri-tjetri dhe p\u00ebr t\u00eb filluar procesin e ve\u00e7imit t\u00eb mikroservic\u00ebve nga zgjidhja monolitike, ne kemi p\u00ebrdorur nj\u00eb qasje si krijimi i API-ve t\u00eb jashtme brenda aplikacionit. N\u00ebse e dinim se nj\u00eb modul duhej t\u00eb b\u00ebhej mikroservic, dhe do t\u00eb ndryshonte n\u00eb kuad\u00ebr t\u00eb procesit, ne menj\u00ebher\u00eb b\u00ebnim thirrjet e logjik\u00ebs s\u00eb q\u00eb i takon nj\u00eb konteksti tjet\u00ebr t\u00eb kufizuar, p\u00ebrmes thirrjeve t\u00eb jashtme. P\u00ebr shembull, p\u00ebrmes REST ose WCF.<\/p>\n<p>Ne e kemi b\u00ebr\u00eb nj\u00eb vendim t\u00eb fort\u00eb p\u00ebr ta shmangur kodin q\u00eb do t\u00eb k\u00ebrkonte t\u00eb b\u00ebnte transaksione t\u00eb shp\u00ebrndara. N\u00eb rastin ton\u00eb ka rezultuar mjaft e leht\u00eb ta respektojm\u00eb k\u00ebt\u00eb rregull. Akoma nuk kemi hasur situata ku do t\u00eb nevojiteshin transaksione t\u00eb rrepta t\u00eb shp\u00ebrndara \u2014 mjafton konsistenca p\u00ebrfundimtare midis moduleve.<\/p>\n<p>Le t\u00eb shqyrtojm\u00eb nj\u00eb shembull konkret. Ne kemi konceptin e orkestratorit \u2014 nj\u00eb konvej q\u00eb p\u00ebrpunon entitetin e \"k\u00ebrkes\u00ebs\". Ai p\u00ebr radh\u00eb krijon klientin, llogarin\u00eb dhe kartel\u00ebn bankare. N\u00ebse klienti dhe llogaria krijohen me sukses, por krijimi i kartel\u00ebs d\u00ebshtoi, k\u00ebrkesa nuk kalon n\u00eb statusin \"me sukses\" dhe mbetet n\u00eb statusin \"kartela nuk u krijua\". N\u00eb t\u00eb ardhmen, aktiviteti n\u00eb sfond do ta kap\u00eb dhe do ta p\u00ebrfundoj\u00eb. Sistemi ndodhet p\u00ebr nj\u00eb koh\u00eb n\u00eb nj\u00eb gjendje t\u00eb pap\u00ebrshtatshm\u00ebris\u00eb, por kjo na p\u00ebrmbush p\u00ebrgjith\u00ebsisht.<\/p>\n<p>N\u00eb rast se ndodh nj\u00eb situat\u00eb ku duhet t\u00eb ruajm\u00eb nj\u00eb pjes\u00eb t\u00eb t\u00eb dh\u00ebnave n\u00eb m\u00ebnyr\u00eb t\u00eb akorduar, ne, me shum\u00eb gjasa, do t\u00eb shkojm\u00eb n\u00eb nj\u00eb konsolidim t\u00eb sh\u00ebrbimit p\u00ebr ta p\u00ebrpunuar k\u00ebt\u00eb n\u00eb nj\u00eb proces t\u00eb vet\u00ebm. <\/p>\n<p>Le t\u00eb shqyrtojm\u00eb shembullin e ve\u00e7imit t\u00eb nj\u00eb mikroservici. Si mund ta \u00e7ojm\u00eb at\u00eb n\u00eb prodhim n\u00eb nj\u00eb m\u00ebnyr\u00eb relativisht t\u00eb sigurt? N\u00eb k\u00ebt\u00eb shembull kemi nj\u00eb pjes\u00eb t\u00eb ve\u00e7ant\u00eb t\u00eb sistemit \u2014 modul t\u00eb sh\u00ebrbimeve t\u00eb pagave, nj\u00eb nga pjes\u00ebt e kodit t\u00eb cilit d\u00ebshirojm\u00eb ta b\u00ebjm\u00eb mikroservic.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/346af271b0c3f99897d330e56f713f18.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u00eb pari krijojm\u00eb nj\u00eb mikrosh\u00ebrbim, duke e rishkruar kodin. P\u00ebrmir\u00ebsojm\u00eb disa nga aspektet q\u00eb nuk na k\u00ebnaqin. Realizojm\u00eb k\u00ebrkesat e reja t\u00eb biznesit nga klienti. Shtojm\u00eb nj\u00eb API Gateway n\u00eb lidhjen midis UI dhe backend-i, e cila do t\u00eb siguroj\u00eb kalimin e thirrjeve. <\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/bec8d68f20f3ec53af0cef225a51c2b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u00eb pas e l\u00ebshojm\u00eb k\u00ebt\u00eb konfigruacion n\u00eb prodhim, por n\u00eb gjendje piloti. Shumica e p\u00ebrdoruesve tan\u00eb ende punojn\u00eb me proceset e vjetra t\u00eb biznesit. P\u00ebr p\u00ebrdoruesit e rinj, ne zhvillojm\u00eb nj\u00eb version t\u00eb ri t\u00eb aplikacionit monolit, i cili k\u00ebt\u00eb proces nuk e p\u00ebrmban m\u00eb. N\u00eb fakt, n\u00eb form\u00eb piloti kemi nj\u00eb lidhje midis monolit dhe mikrosh\u00ebrbimit.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/27e98812746bb7f142fa3a3c3a03b52f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMe nj\u00eb pilot t\u00eb suksessh\u00ebm kuptojm\u00eb se konfiguracioni i ri \u00ebsht\u00eb n\u00eb t\u00eb v\u00ebrtet\u00eb funksional, mund t\u00eb heqim monolitin e vjet\u00ebr nga ekuacioni dhe t\u00eb l\u00ebm\u00eb konfiguracionin e ri n\u00eb vend t\u00eb zgjidhjes s\u00eb vjet\u00ebr.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/11dcf1d771b57d3921c0aa91b82646e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPra, ne p\u00ebrdorim praktikisht t\u00eb gjitha metodat ekzistuese p\u00ebr ndarjen e kodit burimor t\u00eb monolitit. T\u00eb gjitha k\u00ebto na lejojn\u00eb t\u00eb zvog\u00eblojm\u00eb madh\u00ebsin\u00eb e pjes\u00ebve t\u00eb aplikacionit dhe t'i kalojm\u00eb ato n\u00eb bibliotekat e reja, duke b\u00ebr\u00eb kodin burimor m\u00eb cil\u00ebsor.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"9\"><\/a><\/noindex><b><\/p>\n<h3>Puna me DB<\/h3>\n<p><\/b><br \/>\nBaza e t\u00eb dh\u00ebnave ndahet m\u00eb keq se kodi burimor, pasi ajo p\u00ebrmban jo vet\u00ebm skem\u00ebn aktuale, por edhe t\u00eb dh\u00ebnat historike t\u00eb grumbulluara.<\/p>\n<p>Baza e t\u00eb dh\u00ebnave ton\u00eb, si shum\u00eb t\u00eb tjera, kishte nj\u00eb tjet\u00ebr t\u00eb met\u00eb t\u00eb r\u00ebnd\u00ebsishme \u2014 madh\u00ebsin\u00eb e saj t\u00eb madhe. Kjo Baze t\u00eb Dh\u00ebnash u projektua sipas logjik\u00ebs s\u00eb nd\u00ebrlikuar t\u00eb biznesit t\u00eb monolitit, dhe midis tabelave t\u00eb konteksteve t\u00eb ndryshme t\u00eb kufizuara u grumbulluan lidhje.<\/p>\n<p>N\u00eb rastin ton\u00eb, p\u00ebrve\u00e7 t\u00eb gjitha problemeve (baza e madhe e t\u00eb dh\u00ebnave, shum\u00eb lidhje, ndonj\u00ebher\u00eb kufij t\u00eb paqart\u00eb midis tabelave) u shfaq nj\u00eb problem i zakonsh\u00ebm n\u00eb shum\u00eb projekte t\u00eb m\u00ebdha: p\u00ebrdorimi i modelit t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave t\u00eb ndar\u00eb. T\u00eb dh\u00ebnat merren nga tabelat p\u00ebrmes view-s, p\u00ebrmes replikimit dhe d\u00ebrgohen n\u00eb sisteme t\u00eb tjera, ku nevojitet kjo replikim. Si rezultat, ne nuk mund t\u00eb nxjerrim tabelat n\u00eb nj\u00eb skem\u00eb t\u00eb ve\u00e7ant\u00eb, sepse ato ishin aktivisht t\u00eb p\u00ebrdorura.<\/p>\n<p>N\u00eb ndarjen na ndihmon ai ndarje n\u00eb kontekste t\u00eb kufizuara n\u00eb kod. Kjo, n\u00eb p\u00ebrgjith\u00ebsi, na jep nj\u00eb ide mjaft t\u00eb mir\u00eb se si i ndajm\u00eb t\u00eb dh\u00ebnat n\u00eb nivelin e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. Ne kuptojm\u00eb se cilat tabela i p\u00ebrkasin nj\u00eb konteksti t\u00eb kufizuar dhe cilat t\u00eb tjerave.<\/p>\n<p>Ne kemi aplikuar dy m\u00ebnyra globale t\u00eb ndarjes s\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave: ndarjen e tabelave ekzistuese dhe ndarjen me p\u00ebrpunim.<\/p>\n<p>Ndarja e tabelave ekzistuese \u00ebsht\u00eb nj\u00eb metod\u00eb q\u00eb \u00ebsht\u00eb mir\u00eb t\u00eb aplikohet kur struktura e t\u00eb dh\u00ebnave \u00ebsht\u00eb e mir\u00eb, p\u00ebrmbush k\u00ebrkesat e biznesit dhe t\u00eb gjith\u00eb jan\u00eb t\u00eb k\u00ebnaqur. N\u00eb k\u00ebt\u00eb rast, ne mund t\u00eb nxjerrim tabelat ekzistuese n\u00eb nj\u00eb skem\u00eb t\u00eb ve\u00e7ant\u00eb.<\/p>\n<p>Ndarja me p\u00ebrpunim \u00ebsht\u00eb e nevojshme kur modeli i biznesit ka ndryshuar ndjesh\u00ebm dhe tabelat nuk na plot\u00ebsojn\u00eb m\u00eb.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"10\"><\/a><\/noindex><b>Ndarja e tabelave ekzistuese.<\/b> Na nevojitet t\u00eb p\u00ebrcaktojm\u00eb se \u00e7far\u00eb do t\u00eb ndajm\u00eb. Pa k\u00ebt\u00eb njohuri, asgj\u00eb nuk do t\u00eb jet\u00eb e mundur, dhe k\u00ebtu do t\u00eb na ndihmoj\u00eb ndarja e konteksteve t\u00eb kufizuara n\u00eb kod. Zakonisht, n\u00ebse arrijm\u00eb t\u00eb kuptojm\u00eb kufijt\u00eb e konteksteve n\u00eb kodin burimor, b\u00ebhet e qart\u00eb se cilat tabela duhet t\u00eb p\u00ebrfshihen n\u00eb list\u00ebn p\u00ebr ndarje.<\/p>\n<p>Le t\u00eb imagjinojm\u00eb se kemi nj\u00eb zgjidhje, n\u00eb t\u00eb cil\u00ebn dy module t\u00eb monolit nd\u00ebrveprojn\u00eb me nj\u00eb baz\u00eb t\u00eb dh\u00ebnash. Na nevojitet t\u00eb b\u00ebjm\u00eb q\u00eb me pjes\u00ebn e tabelave t\u00eb ndara t\u00eb nd\u00ebrveproj\u00eb vet\u00ebm nj\u00eb modul, nd\u00ebrsa tjetri t\u00eb filloj\u00eb t\u00eb nd\u00ebrveproj\u00eb me t\u00eb p\u00ebrmes API. N\u00eb fillim, mjafton q\u00eb t\u00eb ket\u00eb vet\u00ebm shkrim p\u00ebrmes API. Ky \u00ebsht\u00eb nj\u00eb kusht i nevojsh\u00ebm p\u00ebr t\u00eb diskutuar mbi pavar\u00ebsin\u00eb e mikrosh\u00ebrbimeve. Lidhjet p\u00ebr lexim mund t\u00eb mbeten, derisa nuk ka ndonj\u00eb problem t\u00eb madh.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/1602637ad752ac055f475cfa45d95e95.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHapi tjet\u00ebr \u00ebsht\u00eb q\u00eb ne mund ta ndajm\u00eb kodin q\u00eb punon me tabelat e ndara, me p\u00ebrpunim ose pa p\u00ebrpunim, n\u00eb nj\u00eb mikrosh\u00ebrbim t\u00eb ve\u00e7ant\u00eb dhe ta ekzekutojm\u00eb n\u00eb nj\u00eb proces t\u00eb ve\u00e7ant\u00eb, kontejner. Ky do t\u00eb jet\u00eb nj\u00eb sh\u00ebrbim i ve\u00e7ant\u00eb me lidhje me baz\u00ebn e t\u00eb dh\u00ebnave t\u00eb monolit dhe ato tabela q\u00eb nuk i p\u00ebrkasin drejtp\u00ebrdrejt atij. Monoliti akoma nd\u00ebrvepron p\u00ebr lexim me pjes\u00ebn e ndar\u00eb. <\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/36011f4e6be4f6a2f19f2f074b645dcb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u00eb von\u00eb ne do ta heqim k\u00ebt\u00eb lidhje, dometh\u00ebn\u00eb leximin e t\u00eb dh\u00ebnave nga aplikacioni monolit nga tabelat e ndara gjithashtu do ta transferojm\u00eb n\u00eb API.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/290f91bbfccac2a4b384078e4cf4e337.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u00eb pas do t\u00eb ndajm\u00eb nga Baza e Dh\u00ebnash e p\u00ebrgjithshme tabelat me t\u00eb cilat punon vet\u00ebm mikrosh\u00ebrbimi i ri. Ne mund t\u00eb nxjerrim tabelat n\u00eb nj\u00eb skem\u00eb t\u00eb ve\u00e7ant\u00eb ose madje n\u00eb nj\u00eb Baza t\u00eb Dh\u00ebnash fizike t\u00eb ve\u00e7ant\u00eb. Ka nj\u00eb lidhje p\u00ebr lexim midis mikrosh\u00ebrbimit dhe Baza e Dh\u00ebnash t\u00eb monolit, por n\u00eb k\u00ebt\u00eb nuk ka asgj\u00eb t\u00eb keqe, n\u00eb nj\u00eb konfigurat\u00eb t\u00eb till\u00eb ai mund t\u00eb jetoj\u00eb mjaft gjat\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/ab947ac6a38ffbccd4e2b51103aef609.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHapi i fundit \u00ebsht\u00eb t\u00eb hiqni plot\u00ebsisht t\u00eb gjitha lidhjet. N\u00eb k\u00ebt\u00eb rast, ndoshta do t\u00eb na nevojitet migrimi i t\u00eb dh\u00ebnave nga baza kryesore. Ndonj\u00ebher\u00eb do t\u00eb duam t\u00eb rip\u00ebrdorim disa t\u00eb dh\u00ebna ose lista t\u00eb cilat jan\u00eb replikuar nga sisteme t\u00eb jashtme n\u00eb disa baza. Kjo na ndodh periodikisht.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/f40cf17dd56b9575751e370c44f08344.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"11\"><\/a><\/noindex><b>Departamenti i tep\u00ebrish\u00ebm.<\/b> Ky metod \u00ebsht\u00eb shum\u00eb i ngjash\u00ebm me t\u00eb parin, por shkon n\u00eb an\u00ebn e kund\u00ebrt. Ne menj\u00ebher\u00eb krijojm\u00eb nj\u00eb baz\u00eb t\u00eb re t\u00eb dh\u00ebnash dhe nj\u00eb mikro-sh\u00ebrbim t\u00eb ri q\u00eb komunikon me monolitin p\u00ebrmes API-t. Por me k\u00ebt\u00eb, ngelen nj\u00eb set tabelash n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave q\u00eb d\u00ebshirojm\u00eb t'i heqim n\u00eb t\u00eb ardhmen. Kjo nuk na nevojitet m\u00eb, n\u00eb modelin e ri e kemi z\u00ebvend\u00ebsuar at\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/c94932033e47cfa1fd56595ab9a19246.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00ebr q\u00eb kjo skem\u00eb t\u00eb funksionoj\u00eb, ndoshta do t\u00eb na nevojitet nj\u00eb periudh\u00eb kalimi.<\/p>\n<p>M\u00eb pas ka dy qasje t\u00eb mundshme.<\/p>\n<p><b>First<\/b>: ne kopjojm\u00eb t\u00eb gjitha t\u00eb dh\u00ebnat n\u00eb bazat e reja dhe t\u00eb vjetra. N\u00eb k\u00ebt\u00eb rast na krijohet tep\u00ebrsi t\u00eb dh\u00ebnash, mund t\u00eb ndodhin probleme me sinkronizimin. Por k\u00ebshtu mund t\u00eb kemi dy klient\u00eb t\u00eb ndrysh\u00ebm. Nj\u00eb do t\u00eb punoj\u00eb me versionin e ri, tjetri me versionin e vjet\u00ebr.<\/p>\n<p><b>E dyta<\/b>: ndajm\u00eb t\u00eb dh\u00ebnat sipas ndonj\u00eb kriteri biznesi. P\u00ebr shembull, n\u00eb sistemin ton\u00eb kishte 5 produkte q\u00eb ruheshin n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave t\u00eb vjetra. Nj\u00eb e gjasht\u00eb n\u00eb kuad\u00ebr t\u00eb detyr\u00ebs s\u00eb re t\u00eb biznesit e vendosim n\u00eb baz\u00ebn e re. Por do na nevojitet nj\u00eb API Gateway q\u00eb sinkronizon k\u00ebto t\u00eb dh\u00ebna dhe tregon klientit se nga e ku mund t\u00eb marr\u00eb.<\/p>\n<p>T\u00eb dy qasjet jan\u00eb funksionale, zgjidhni n\u00eb var\u00ebsi t\u00eb situat\u00ebs.<\/p>\n<p>Pasi t\u00eb jemi siguruar q\u00eb gjith\u00e7ka funksionon, pjesa e monolitit q\u00eb punon me strukturat e vjetra t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave mund t\u00eb fiket. <\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/973bf5015bdf49a290a5b901f89628cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHapi i fundit do t\u00eb jet\u00eb shp\u00ebrb\u00ebrja e strukturave t\u00eb vjetra t\u00eb t\u00eb dh\u00ebnave. <\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/fe83acc07077b7eb3717138e3c20c005.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDuke p\u00ebrmbledhur, mund t\u00eb themi se kemi probleme me baz\u00ebn e t\u00eb dh\u00ebnave: \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb punosh me t\u00eb krahasuar me kodin burimor, ndarja \u00ebsht\u00eb m\u00eb e komplikuar, por kjo \u00ebsht\u00eb di\u00e7ka q\u00eb mund dhe duhet t\u00eb b\u00ebhet. Ne kemi gjetur disa m\u00ebnyra q\u00eb lejojn\u00eb ta b\u00ebjm\u00eb k\u00ebt\u00eb mjaft t\u00eb sigurt, megjithat\u00eb, t\u00eb gabosh me t\u00eb dh\u00ebnat \u00ebsht\u00eb m\u00eb e leht\u00eb sesa me kodin burimor. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"12\"><\/a><\/noindex><b><\/p>\n<h3>Puna me kodin burimor<\/h3>\n<p><\/b><br \/>\nJa si dukej skema e kodit burimor kur filluam t\u00eb analizojm\u00eb projektin monolit.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/a6d886e37117ccf8f63106d6616aa653.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAjo mund ta ndajm\u00eb n\u00eb tre shtresa. Kjo \u00ebsht\u00eb shtresa e moduleve t\u00eb aktivizuesh\u00ebm, e plogjeve, sh\u00ebrbimeve dhe aktiviteteve t\u00eb ve\u00e7anta. Faktikisht, k\u00ebto ishin pik\u00ebnisje brenda nj\u00eb zgjidhjeje monolite. T\u00eb gjitha ato ishin t\u00eb lidhura ngusht\u00eb me shtres\u00ebn e Common. Ajo p\u00ebrmbante logjik\u00ebn e biznesit q\u00eb sh\u00ebrbimet e p\u00ebrdornin s\u00eb bashku, dhe shum\u00eb lidhje. \u00c7do sh\u00ebrbim dhe plog p\u00ebrdorte deri n\u00eb 10 dhe m\u00eb shum\u00eb mbledhje t\u00eb zakonshme, n\u00eb var\u00ebsi t\u00eb madh\u00ebsis\u00eb s\u00eb tyre dhe nd\u00ebrgjegj\u00ebsis\u00eb s\u00eb zhvilluesve.<\/p>\n<p>Na ndodhi me fat, kishim biblioteka infrastrukturore q\u00eb mund t\u00eb p\u00ebrdoren ve\u00e7mas. <\/p>\n<p>Ndonj\u00ebher\u00eb ndodhte q\u00eb disa objekte t\u00eb Common n\u00eb t\u00eb v\u00ebrtet\u00eb nuk i p\u00ebrkisnin k\u00ebsaj shtrese, por ishin biblioteka infrastrukturore. Kjo zgjidhej me riem\u00ebrim.<\/p>\n<p>Konceptet e kufizuara ngjanin m\u00eb shqet\u00ebsuese. Ndonj\u00ebher\u00eb 3-4 kontekste p\u00ebrziheshin n\u00eb nj\u00eb mbledhje t\u00eb Common dhe p\u00ebrdornin nj\u00ebri-tjetrin brenda funksioneve t\u00eb biznesit. Duhej t\u00eb kuptonim se ku mund t\u00eb ndaheshin dhe \u00e7far\u00eb t\u00eb b\u00ebnim m\u00eb pas me kartelat p\u00ebr k\u00ebt\u00eb ndarje n\u00eb mbledhjet e kodit burim.<\/p>\n<p>Ne formuluam disa rregulla p\u00ebr procesin e ndarjes s\u00eb kodit.<\/p>\n<p><b>E para<\/b>: ne nuk donim m\u00eb ndarjen e logjik\u00ebs s\u00eb biznesit midis sh\u00ebrbimeve, aktiviteteve dhe plogjeve. Donim ta b\u00ebnim logjik\u00ebn e biznesit t\u00eb pavarur brenda mikrosherbimeve. Nga ana tjet\u00ebr, mikrosherbimet, n\u00eb ideale, perceptohen si sh\u00ebrbime q\u00eb ekzistojn\u00eb krejt\u00ebsisht pavarur. Un\u00eb mendoj se ky qasje \u00ebsht\u00eb disi e shtrenjt\u00eb dhe e v\u00ebshtir\u00eb p\u00ebr t'u arritur, pasi, p\u00ebr shembull, sh\u00ebrbimet n\u00eb C# do t\u00eb lidhen ndonj\u00ebher\u00eb me bibliotek\u00ebn standarde. Sistemi yn\u00eb \u00ebsht\u00eb shkruar n\u00eb C#, nuk kemi pasur nevoj\u00eb t\u00eb p\u00ebrdorim teknologji t\u00eb tjera p\u00ebr momentin. Prandaj, ne vendos\u00ebm se mund ta lejonim veten t\u00eb p\u00ebrdornim mbledhje teknike t\u00eb zakonshme. E r\u00ebnd\u00ebsishme \u00ebsht\u00eb q\u00eb n\u00eb to t\u00eb mos ket\u00eb asnj\u00eb fragment t\u00eb logjik\u00ebs s\u00eb biznesit. N\u00ebse keni nj\u00eb mbules\u00eb t\u00eb p\u00ebrshtatshme mbi ORM q\u00eb p\u00ebrdorni, at\u00ebher\u00eb kopjimi i saj nga sh\u00ebrbimi n\u00eb sh\u00ebrbim \u00ebsht\u00eb shum\u00eb i shtrenjt\u00eb.<\/p>\n<p>Ekipi yn\u00eb \u00ebsht\u00eb adhurues i dizajnit t\u00eb orientuar drejt objektit, prandaj \"arkitektura e qep\u00ebs\" na p\u00ebrshtatet shumic\u00ebs. Nj\u00eb baz\u00eb n\u00eb sh\u00ebrbimet tona nuk \u00ebsht\u00eb layer-i i aksesit n\u00eb t\u00eb dh\u00ebna, por nj\u00eb nd\u00ebrtim me logjik\u00ebn e domenit, e cila p\u00ebrmban vet\u00ebm logjik\u00ebn biznesore dhe \u00ebsht\u00eb e lir\u00eb nga lidhjet me infrastruktur\u00ebn. N\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, ne mund t\u00eb zhvillojm\u00eb n\u00eb m\u00ebnyr\u00eb t\u00eb pavarur nd\u00ebrtimin e domenit p\u00ebr t\u00eb zgjidhur problemet q\u00eb lidhen me framorkat.<\/p>\n<p>N\u00eb k\u00ebt\u00eb faz\u00eb, ne u p\u00ebrball\u00ebm me problemin e par\u00eb serioz. Sh\u00ebrbimi duhet t\u00eb referohet n\u00eb nj\u00eb nd\u00ebrtim t\u00eb vet\u00ebm t\u00eb domenit, dhe ne donim ta bamisnim logjik\u00ebn si t\u00eb pavarur, por k\u00ebtu na pengonte fort principi DRY. Zhvilluesit donin, p\u00ebr t\u00eb shmangur p\u00ebrs\u00ebritjen, t\u00eb rip\u00ebrdornin klasat nga nd\u00ebrtimet fqinj, dhe si rezultat, domenet filluan s\u00ebrish t\u00eb lidhen me nj\u00ebra-tjetr\u00ebn. Ne analizuam rezultatet dhe vendos\u00ebm se ndoshta problemi ishte edhe n\u00eb nd\u00ebrtimin e sistemit t\u00eb ruajtjes s\u00eb kodit burimor. Ne kishim nj\u00eb depo t\u00eb madhe, ku ndodheshin t\u00eb gjith\u00eb kodet burimore. Zgjidhja p\u00ebr t\u00ebr\u00eb projektin ishte shum\u00eb e v\u00ebshtir\u00eb t\u00eb mblidhej n\u00eb makinat lokale. Prandaj, p\u00ebr pjes\u00ebt e projektit krijoheshin nd\u00ebrtime t\u00eb vogla t\u00eb ve\u00e7anta, dhe askush nuk ndalonte t\u00eb shtonte ndonj\u00eb nd\u00ebrtim Common ose t\u00eb domenit dhe ta rip\u00ebrdorte at\u00eb. Vegla e vetme q\u00eb nuk na lejonte ta b\u00ebnim k\u00ebt\u00eb ishte shqyrtimi i kodit. Por ndonj\u00ebher\u00eb edhe ai d\u00ebshtonte.<\/p>\n<p>At\u00ebher\u00eb ne filluam kalimin n\u00eb modelin me depo t\u00eb ve\u00e7anta. Logjika biznesore nuk filloi m\u00eb t\u00eb rrjedh\u00eb nga sh\u00ebrbimi n\u00eb sh\u00ebrbim, domenet v\u00ebrtet u b\u00ebn\u00eb t\u00eb pavarura. Konceptet e kufizuara mb\u00ebshteten m\u00eb qart\u00eb. Si i rip\u00ebrdorim bibliotekat infrastrukturore? Ne i p\u00ebrjashtuam ato n\u00eb nj\u00eb depo t\u00eb ve\u00e7ant\u00eb dhe m\u00eb pas i vendos\u00ebm n\u00eb paketat Nuget, t\u00eb cilat i vendos\u00ebm n\u00eb Artifactory. Me \u00e7do ndryshim, nd\u00ebrtimi dhe publikimi ndodhin automatikisht.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/8ddbc750dc7c6d397a459acf7825de90.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSh\u00ebrbimet tona filluan t\u00eb referohen n\u00eb paketat e brendshme infrastrukturore n\u00eb t\u00eb nj\u00ebjt\u00ebn m\u00ebnyr\u00eb si edhe n\u00eb ato t\u00eb jashtme. Bibliotekat e jashtme i shkarkojm\u00eb nga Nuget. P\u00ebr t\u00eb punuar me Artifactory, ku i vendosnim k\u00ebto paketa, ne p\u00ebrdor\u00ebm dy menaxher\u00eb paketash. Edhe n\u00eb depo t\u00eb vogla ne p\u00ebrdorim Nuget. N\u00eb depo me disa sh\u00ebrbime p\u00ebrdor\u00ebm Paket, i cili ofron m\u00eb shum\u00eb koherenc\u00eb versioni midis moduleve.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/672a25a70a481bff68baebe963184ccd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00ebshtu, duke punuar mbi kodin burimor, duke e ndryshuar pak arkitektur\u00ebn dhe duke ndar\u00eb repository-t, ne b\u00ebjm\u00eb sh\u00ebrbimet tona m\u00eb t\u00eb pavarura.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"13\"><\/a><\/noindex><b><\/p>\n<h3>Problemet e Infrastruktur\u00ebs<\/h3>\n<p><\/b><br \/>\nShumica e disavantazheve kur kaloni n\u00eb mikrosh\u00ebrbime lidhen me infrastruktur\u00ebn. Do t'ju duhet nj\u00eb implementim automatizuar, dhe do t'ju nevojiten biblioteka t\u00eb reja p\u00ebr t\u00eb punuar me infrastrukturen.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"16\"><\/a><\/noindex><b>Instalimi manual n\u00eb mjedise<\/b><\/p>\n<p>Fillimisht, ne e vendosnim zgjidhjen n\u00eb mjedise manualisht. P\u00ebr ta automatizuar k\u00ebt\u00eb proces, krijuam nj\u00eb pipeline CI\/CD. Zgjodh\u00ebm procesin e d\u00ebrgimit vazhdim\u00ebs p\u00ebr shkak se d\u00ebrgimi i vazhduesh\u00ebm p\u00ebr ne ende nuk \u00ebsht\u00eb i pranuesh\u00ebm nga pik\u00ebpamja e proceseve biznesore. Prandaj, d\u00ebrgimi n\u00eb prodhim b\u00ebhet me nj\u00eb buton, nd\u00ebrsa testimi \u2014 automatikisht.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/0fc092326a48813398c6f3a031197bab.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNe p\u00ebrdorim Atlassian, Bitbucket p\u00ebr ruajtjen e kodit burimor dhe Bamboo p\u00ebr nd\u00ebrtimin. Na p\u00eblqen t\u00eb shkruajm\u00eb skripta nd\u00ebrtimi n\u00eb Cake, sepse \u00ebsht\u00eb e nj\u00ebjta gjuh\u00eb si C#. Paketat p\u00ebrfundojn\u00eb n\u00eb Artifactory, dhe Ansible automatikisht d\u00ebrgon n\u00eb serverat e testimit, pas s\u00eb cil\u00ebs ato mund t\u00eb testohet menj\u00ebher\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/fcc743cfaa4a24b906ceeb40ec1ba0a0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"14\"><\/a><\/noindex><b><\/p>\n<h3>Logimi i ve\u00e7uar<\/h3>\n<p><\/b><br \/>\nN\u00eb koh\u00ebn e tij, nj\u00eb nga idet\u00eb e monolit ishte sigurimi i regjistrimit t\u00eb p\u00ebrbashk\u00ebt. Ne gjithashtu duhej t\u00eb kuptonim se \u00e7far\u00eb t\u00eb b\u00ebnim me regjistrat e ve\u00e7ant\u00eb q\u00eb ndodheshin n\u00eb disqe. Regjistrat tan\u00eb shkruhen n\u00eb skedar\u00eb tekstual\u00eb. Vendos\u00ebm t\u00eb p\u00ebrdorim stakun standard ELK. Nuk u fut\u00ebm direkt n\u00eb ELK p\u00ebrmes ofruesve, por vendos\u00ebm q\u00eb do t\u00eb p\u00ebrmir\u00ebsonim regjistrat tekstual\u00eb dhe do t\u00eb shkruanim ID-n\u00eb e gjurmimit si nj\u00eb identifikues, duke shtuar emrin e sh\u00ebrbimit, n\u00eb m\u00ebnyr\u00eb q\u00eb k\u00ebta regjistra m\u00eb pas t\u00eb ishin t\u00eb analizuesh\u00ebm.<\/p>\n<p><img decoding=\"async\" alt=\"Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika.\" src=\"\/wp-content\/uploads\/2019\/07\/8e58c66ac134e65abe34b59939f31483.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMe ndihm\u00ebn e Filebeat ne marrim mund\u00ebsin\u00eb t\u00eb mbledhim regjistrat tan\u00eb nga <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sq\/server\/\"   title=\"server\u00ebsh\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1338\">server\u00ebsh<\/a>, pastaj t'i konvertojm\u00eb, me Kibana t\u00eb krijojm\u00eb k\u00ebrkesa n\u00eb UI dhe t\u00eb shohim se si ndodhi thirrja midis sh\u00ebrbimeve. K\u00ebt\u00eb e ndihmon shum\u00eb ID e gjurmimit.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"15\"><\/a><\/noindex><b><\/p>\n<h3>Testimi dhe debagimi i sh\u00ebrbimeve t\u00eb lidhura<\/h3>\n<p><\/b><br \/>\nN\u00eb fillim, nuk e kuptonim plot\u00ebsisht se si t\u00eb rregullonim sh\u00ebrbimet q\u00eb po zhvillonim. Me monolitin gjith\u00e7ka ishte e thjesht\u00eb, e lan\u00e7onim at\u00eb n\u00eb makin\u00ebn lokale. N\u00eb fillim, p\u00ebrpiqeshim t\u00eb b\u00ebnim t\u00eb nj\u00ebjt\u00ebn gj\u00eb me mikrosh\u00ebrbimet, por ndonj\u00ebher\u00eb p\u00ebr t\u00eb lansuar plot\u00ebsisht nj\u00eb mikrosh\u00ebrbim, duhet t\u00eb lansosh edhe disa t\u00eb tjer\u00eb, dhe kjo ishte e papraktikueshme. E kuptuam se duhej t\u00eb kalonim n\u00eb nj\u00eb model ku l\u00ebm\u00eb n\u00eb makin\u00ebn lokale vet\u00ebm sh\u00ebrbimin ose sh\u00ebrbimet q\u00eb d\u00ebshirojm\u00eb t\u00eb rregullojm\u00eb. Sh\u00ebrbimet e tjera p\u00ebrdoren nga servera q\u00eb p\u00ebrputhen me konfigurimin e prodhimit. Pas rregullimit, gjat\u00eb testimit, p\u00ebr \u00e7do detyr\u00eb n\u00eb serverin testues l\u00ebshohen vet\u00ebm sh\u00ebrbimet e ndryshuara. K\u00ebshtu, testi b\u00ebhet n\u00eb form\u00ebn q\u00eb do t\u00eb jet\u00eb n\u00eb prodhim n\u00eb t\u00eb ardhmen.<\/p>\n<p>Jan\u00eb server\u00eb ku q\u00ebndrojn\u00eb vet\u00ebm versionet e prodhimit t\u00eb sh\u00ebrbimeve. K\u00ebta server\u00eb jan\u00eb t\u00eb nevojsh\u00ebm n\u00eb rast incidentesh, p\u00ebr verifikimin e d\u00ebrgesave para shp\u00ebrndarjes dhe p\u00ebr trajnime t\u00eb brendshme.<\/p>\n<p>Ne kemi shtuar nj\u00eb proces t\u00eb testimit automatizuar duke p\u00ebrdorur bibliotek\u00ebn e njohur Specflow. Testet ekzekutohen automatikisht me NUnit menj\u00ebher\u00eb pas lan\u00e7imit nga Ansible. N\u00ebse mbulimi i detyr\u00ebs \u00ebsht\u00eb plot\u00ebsisht automatizuar, at\u00ebher\u00eb nuk ka nevoj\u00eb p\u00ebr testim manual. Megjithat\u00eb, ndonj\u00ebher\u00eb k\u00ebrkohet akoma testim manual shtes\u00eb. P\u00ebr t\u00eb p\u00ebrcaktuar se cilat teste t\u00eb ekzekutohen p\u00ebr nj\u00eb detyr\u00eb t\u00eb caktuar, ne p\u00ebrdorim etiketat n\u00eb Jira.<\/p>\n<p>Nd\u00ebrkoh\u00eb, \u00ebsht\u00eb rritur nevoja p\u00ebr testimin e ngarkes\u00ebs, i cili m\u00eb par\u00eb b\u00ebhej vet\u00ebm n\u00eb raste t\u00eb ve\u00e7anta. P\u00ebr t\u00eb ekzekutuar testet, ne p\u00ebrdorim JMeter, p\u00ebr ruajtjen e tyre \u2014 InfluxDB, dhe p\u00ebr nd\u00ebrtimin e grafik\u00ebve t\u00eb procesit \u2014 Grafana.<\/p>\n<p><b><\/p>\n<h3>\u00c7far\u00eb kemi arritur?<\/h3>\n<p><\/b><br \/>\nS\u00eb pari, ne u shliruan nga koncepti i 'l\u00ebshimit'. U zhduk\u00ebn l\u00ebshimet monstruoze dy mujore, kur kjo makineri l\u00ebshohej n\u00eb ambientin e prodhimit, duke d\u00ebmtuar p\u00ebrkoh\u00ebsisht proceset biznesore. Tani ne l\u00ebshojm\u00eb sh\u00ebrbimet n\u00eb mesatare \u00e7do 1.5 dit\u00eb, duke i grupuar ato, sepse ato dalin n\u00eb operim pas miratimit.<\/p>\n<p>N\u00eb sistemin ton\u00eb nuk ka d\u00ebshtime fatale. N\u00ebse l\u00ebshojm\u00eb nj\u00eb mikrosh\u00ebrbim me nj\u00eb gabim, at\u00ebher\u00eb funksionaliteti i lidhur do t\u00eb d\u00ebmtohet, nd\u00ebrsa t\u00eb gjitha funksionalitetet e tjera nuk do t\u00eb preken. Kjo e p\u00ebrmir\u00ebson ndjesh\u00ebm p\u00ebrvoj\u00ebn e p\u00ebrdoruesit.<\/p>\n<p>Ne mund t\u00eb menaxhojm\u00eb skem\u00ebn e shp\u00ebrndarjes. Mund t\u00eb ndahen grupe sh\u00ebrbimesh nga zgjidhja e p\u00ebrgjithshme n\u00ebse ka nevoj\u00eb.<\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, kemi reduktuar ndjesh\u00ebm problemin e radh\u00ebs s\u00eb gjat\u00eb t\u00eb p\u00ebrmir\u00ebsimeve. Kemi krijuar ekipe t\u00eb ve\u00e7anta produktesh q\u00eb punojn\u00eb me disa sh\u00ebrbime n\u00eb m\u00ebnyr\u00eb t\u00eb pavarur. Procesi Scrum i p\u00ebrshtatet plot\u00ebsisht k\u00ebtu. Nj\u00eb ekip konkret mund t\u00eb ket\u00eb nj\u00eb pronar produkti t\u00eb ve\u00e7ant\u00eb q\u00eb i jep atij detyra. <\/p>\n<p><b><\/p>\n<h3>CV<\/h3>\n<p><\/b><\/p>\n<ul>\n<li>Mikrosh\u00ebrbimet jan\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr dekompozimin e sistemeve komplekse. N\u00eb proces, fillojm\u00eb t\u00eb kuptojm\u00eb se \u00e7far\u00eb ka n\u00eb sistemin ton\u00eb, cilat jan\u00eb kufizimet, dhe ku jan\u00eb kufijt\u00eb e tyre. Kjo lejon ndarjen e rregullt t\u00eb p\u00ebrmir\u00ebsimeve midis moduleve dhe shmang nd\u00ebrlikimin e kodit. <\/li>\n<li>Mikrosh\u00ebrbimet ofrojn\u00eb p\u00ebrfitime organizative. Shpesh flitet p\u00ebr to vet\u00ebm si nj\u00eb arkitektur\u00eb, por \u00e7do arkitektur\u00eb \u00ebsht\u00eb e nevojshme p\u00ebr t\u00eb p\u00ebrmbushur nevojat e biznesit dhe jo p\u00ebr vete. Prandaj, mund t\u00eb themi se mikrosh\u00ebrbimet jan\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr zgjidhjen e detyrave nga ekipe t\u00eb vogla, duke pasur parasysh se tani \u00ebsht\u00eb shum\u00eb popullor Scrum.<\/li>\n<li>Ndarja \u00ebsht\u00eb nj\u00eb proces iterativ. Nuk mund t\u00eb merren aplikacione dhe thjesht t\u00eb ndahet n\u00eb mikrosh\u00ebrbime. Produkti i marr\u00eb v\u00ebshtir\u00eb se do t\u00eb jet\u00eb funksional. Kur ndahen mikrosh\u00ebrbimet, \u00ebsht\u00eb e dobishme t\u00eb rishkruhet kodet ekzistuese legacy, q\u00eb do t\u00eb thot\u00eb ta kthejm\u00eb at\u00eb n\u00eb kodin q\u00eb na p\u00eblqen dhe q\u00eb plot\u00ebson m\u00eb mir\u00eb nevojat e biznesit p\u00ebr funksionalitet dhe shpejt\u00ebsi.\n<p><i>Nj\u00eb paralajm\u00ebrim i vog\u00ebl:<\/i> kostot e kalimit n\u00eb mikrosh\u00ebrbime jan\u00eb mjaft t\u00eb konsiderueshme. Vet\u00ebm p\u00ebr t\u00eb zgjidhur problemin e infrastruktur\u00ebs u k\u00ebrkua shum\u00eb koh\u00eb. Prandaj, n\u00ebse keni nj\u00eb aplikacion t\u00eb vog\u00ebl q\u00eb nuk k\u00ebrkon nj\u00eb shkall\u00ebzim specifik, dhe nuk ka shum\u00eb klient\u00eb q\u00eb konkurrojn\u00eb p\u00ebr v\u00ebmendjen dhe koh\u00ebn e ekipit tuaj, ndoshta mikrosh\u00ebrbimet nuk jan\u00eb kjo q\u00eb ju nevojitet sot. Kjo \u00ebsht\u00eb mjaft e kushtueshme. N\u00ebse e filloni procesin me mikrosh\u00ebrbime, costet fillimisht do t\u00eb jen\u00eb m\u00eb t\u00eb larta se sa n\u00ebse do t\u00eb filloni t\u00eb nj\u00ebjtin projekt me zhvillimin e nj\u00eb monolite. <\/p>\n<p>P.S. Nj\u00eb tregim m\u00eb emocional (si\u00e7 duket p\u00ebr ju) \u2013 mbi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=qTNbx18DzpQ\">linkun<\/a><\/noindex>. <br \/>\nK\u00ebtu \u00ebsht\u00eb versioni i plot\u00eb i raportit.<\/li>\n<\/ul>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/raiffeisenbank\/blog\/458404\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2000. \u041f\u0435\u0440\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 Visual Basic 6. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a IDE [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26858,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35906","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.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2000.\" \/>\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\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\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\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c: \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2000.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika\" \/>\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=\"2019-10-31T19:07:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:07:29+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\udd47Kalimi nga monoliti n\u00eb mikrosh\u00ebrbime: historia dhe praktika | ProHoster","description":"N\u00eb k\u00ebt\u00eb artikull do t\u00eb flas p\u00ebr m\u00ebnyr\u00ebn se si projekti ku punoj u transformua nga nj\u00eb monolit i madh n\u00eb nj\u00eb grup mikrosh\u00ebrbimesh. Projekti e nisi historin\u00eb e tij mjaft koh\u00eb m\u00eb par\u00eb, n\u00eb fillim t\u00eb viteve 2000.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika","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\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c: \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2000.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika","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":"2019-10-31T19:07:29+00:00","article:modified_time":"2019-10-31T19:07:29+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35906","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":"2026-02-09 17:04:56","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:54:38","updated":"2026-02-09 17:04:56","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\/35906","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=35906"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35906\/revisions"}],"predecessor-version":[{"id":158582,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35906\/revisions\/158582"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/26858"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=35906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=35906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=35906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}