{"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 at\u00eb se si projekti n\u00eb t\u00eb cilin punoj kaloi nga nj\u00eb monolit i madh n\u00eb nj\u00eb grup mikrosh\u00ebrbimesh.<\/p>\n<p>Projekti e ka nisur historin\u00eb e tij mjaft her\u00ebt, 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 e qart\u00eb se zhvillimi n\u00eb k\u00ebt\u00eb gjuh\u00eb do t\u00eb ishte i v\u00ebshtir\u00eb p\u00ebr tu mbajtur, pasi IDE dhe vet\u00eb gjuha po zhvilloheshin ngadal\u00eb. N\u00eb fund t\u00eb viteve 2000, u vendos t\u00eb kalonim n\u00eb nj\u00eb C# m\u00eb premtues. Versioni i ri u shkrua paralelisht me p\u00ebrmir\u00ebsimin e t\u00eb vjetr\u00ebs, duke u b\u00ebr\u00eb gjithnj\u00eb e m\u00eb shum\u00eb kod n\u00eb .NET. Backend-i n\u00eb C# n\u00eb fillim ishte orientuar ndaj arkitektur\u00ebs sh\u00ebrbimore, megjithat\u00eb gjat\u00eb zhvillimit u p\u00ebrdor\u00ebn biblioteka t\u00eb p\u00ebrbashk\u00ebta me logjik\u00eb, dhe sh\u00ebrbimet u nis\u00ebn n\u00eb nj\u00eb proces t\u00eb vet\u00ebm. K\u00ebshtu u krijua nj\u00eb aplikacion q\u00eb ne e quajt\u00ebm 'monolit sh\u00ebrbimi'. <\/p>\n<p>Nj\u00eb nga avantajet e pakta t\u00eb k\u00ebtij lidhjeje ishte mund\u00ebsia e sh\u00ebrbimeve p\u00ebr t\u00eb thirrur nj\u00ebra-tjetr\u00ebn p\u00ebrmes nj\u00eb API t\u00eb jasht\u00ebm. Kishte premisat e qarta p\u00ebr kalimin n\u00eb nj\u00eb arkitektur\u00eb m\u00eb t\u00eb sakt\u00eb sh\u00ebrbimi, dhe n\u00eb perspektiv\u00eb edhe n\u00eb mikrosh\u00ebrbime. <\/p>\n<p>Kemi filluar pun\u00ebn ton\u00eb p\u00ebr dekompozimin rreth vitit 2015. Akoma nuk kemi arritur nj\u00eb gjendje ideale \u2014 kan\u00eb mbetur pjes\u00eb t\u00eb projektit t\u00eb madh, t\u00eb cilat \u00ebsht\u00eb e v\u00ebshtir\u00eb t'i quash monolite, por as q\u00eb i ngjajn\u00eb mikrosherbimeve. Megjithat\u00eb, progresi \u00ebsht\u00eb dometh\u00ebn\u00ebs. <br \/>\nP\u00ebr t\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 ekzistuese<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#2\">Pritet nga mikrosherbimet<\/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 kalosh nga monoliti n\u00eb mikrosherbime<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#5\">Metoda e par\u00eb<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#6\">Metoda e dyt\u00eb<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#7\">Metoda e tret\u00eb<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#8\">Metoda 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\">Ndarja e tabelave ekzistuese<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#11\">Ndarja 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\">Regjistrimi i ndar\u00eb<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#15\">Testimi dhe debugimi 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 ekzistuese<\/h3>\n<p><\/b><br \/>\nArkitektura fillimisht dukej si m\u00eb posht\u00eb: UI \u2014 aplikacion i ve\u00e7ant\u00eb, pjesa monolite e shkruar n\u00eb Visual Basic 6, aplikacioni n\u00eb .NET p\u00ebrb\u00ebnte nj\u00eb grup sh\u00ebrbimesh t\u00eb lidhura, duke punuar me nj\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb mjaftueshme t\u00eb madhe.<\/p>\n<p><b>Disavantazhet e zgjidhjes s\u00eb m\u00ebparshme<\/b><\/p>\n<p><u>Pika unike e d\u00ebshtimit<\/u><br \/>\nNe kemi pasur nj\u00eb pik\u00eb t\u00eb vetme d\u00ebshtimi: aplikacioni n\u00eb .NET ekzekutohej n\u00eb nj\u00eb proces t\u00eb vet\u00ebm. N\u00ebse ndonj\u00eb nga modulet kishte nj\u00eb d\u00ebshtim, aplikacioni i gjith\u00eb d\u00ebshtonte dhe duhej ta rinisnim. Duke qen\u00eb se ne automatizojm\u00eb 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 koh\u00eb. Dhe n\u00eb rast t\u00eb nj\u00eb gabimi programor, rezervimi nuk ndihmonte as. <\/p>\n<p><u>Radh\u00eb p\u00ebr p\u00ebrmir\u00ebsime<\/u><br \/>\nKy disavantazh \u00ebsht\u00eb m\u00eb shum\u00eb organizativ. N\u00eb aplikacionin ton\u00eb ka shum\u00eb k\u00ebrkues, dhe t\u00eb gjith\u00eb duan q\u00eb ta p\u00ebrmir\u00ebsojn\u00eb sa m\u00eb shpejt. M\u00eb par\u00eb, kryerja e k\u00ebsaj paralelisht ishte e pamundur, dhe t\u00eb gjith\u00eb k\u00ebrkuesit q\u00ebndronin n\u00eb radh\u00eb. Ky proces shkaktonte negativitet p\u00ebr biznesin, pasi atyre u duhej t\u00eb d\u00ebshmonin se detyra e tyre kishte vler\u00eb. Ekipi zhvillues shpenzonte koh\u00eb p\u00ebr t\u00eb organizuar k\u00ebt\u00eb radh\u00eb. Kjo merrte shum\u00eb koh\u00eb dhe energji, dhe si rezultat produkti nuk mund t\u00eb ndryshonte aq shpejt sa do t\u00eb donin.<\/p>\n<p><u>P\u00ebrdorim joadekuat i burimeve<\/u><br \/>\nKur vendosni sh\u00ebrbimet n\u00eb nj\u00eb proces t\u00eb vet\u00ebm, ne gjithmon\u00eb e kopjojm\u00eb plot\u00ebsisht konfigurimin nga serveri n\u00eb server. Donim t\u00eb vendosnim sh\u00ebrbimet m\u00eb t\u00eb ngarkuara ve\u00e7mas, p\u00ebr t\u00eb mos shpenzuar burime kot\u00eb dhe p\u00ebr t\u00eb pasur nj\u00eb menaxhim m\u00eb fleksib\u00ebl t\u00eb skem\u00ebs son\u00eb t\u00eb shp\u00ebrndarjes.<\/p>\n<p><u>\u00cbsht\u00eb e v\u00ebshtir\u00eb t\u00eb integrohen teknologjit\u00eb moderne<\/u><br \/>\nNj\u00eb problem i njohur p\u00ebr t\u00eb gjith\u00eb zhvilluesit: ka d\u00ebshir\u00eb t\u00eb integrohet teknologji moderne n\u00eb projekt, por nuk ka mund\u00ebsi. N\u00eb nj\u00eb zgjidhje t\u00eb madhe monolitike, \u00e7do azhurnim i bibliotek\u00ebs ekzistuese, dhe t\u00eb themi kalimi n\u00eb t\u00eb re, b\u00ebhet nj\u00eb detyr\u00eb mjaft e nd\u00ebrlikuar. Duhet shum\u00eb koh\u00eb p\u00ebr t'i treguar liderit t\u00eb ekipit se kjo do t\u00eb sjell\u00eb m\u00eb shum\u00eb p\u00ebrfitime se sa nervat e shpenzuara. <\/p>\n<p><u>V\u00ebshtir\u00ebsit\u00eb n\u00eb l\u00ebshimin e ndryshimeve<\/u><br \/>\nKjo ishte problemi m\u00eb serioz \u2014 ne l\u00ebshonim versione \u00e7do dy muaj. <br \/>\n\u00c7do version b\u00ebhej nj\u00eb katastrof\u00eb e v\u00ebrtet\u00eb p\u00ebr bank\u00ebn, pavar\u00ebsisht testeve dhe p\u00ebrpjekjeve t\u00eb zhvilluesve. Biznesi e dinte se nj\u00eb pjes\u00eb e funksionalitetit nuk do t\u00eb punonte n\u00eb fillim t\u00eb jav\u00ebs. Dhe zhvilluesit e dinin se i priste nj\u00eb jav\u00eb e v\u00ebshtir\u00eb me incidente. <br \/>\nD\u00ebshira p\u00ebr t\u00eb ndryshuar situat\u00ebn ishte e pranishme te t\u00eb gjith\u00eb. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"2\"><\/a><\/noindex><b><\/p>\n<h3>Pritet nga mikrosherbimet<\/h3>\n<p><\/b><br \/>\n<u>Shp\u00ebrndarja e komponent\u00ebve sipas gatishm\u00ebris\u00eb. <\/u>Shp\u00ebrndarja e 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 duke punuar me nj\u00eb ekip t\u00eb madh mbi nj\u00eb monolit t\u00eb vjet\u00ebr, menaxhimi ishte i v\u00ebshtir\u00eb. Nj\u00eb ekip i till\u00eb kishte nevoj\u00eb t\u00eb punonte sipas proceseve strikte, kurse ne donim m\u00eb shum\u00eb krijimtari dhe pavar\u00ebsi. Kjo mund t\u00eb lejohej vet\u00ebm nga ekipe t\u00eb vogla.<\/p>\n<p><u>Izolimi i sh\u00ebrbimeve n\u00eb procese t\u00eb ve\u00e7anta.<\/u> Idealisht, do t\u00eb doja t\u00eb izoloja n\u00eb kontejner\u00eb, por nj\u00eb num\u00ebr i madh sh\u00ebrbimesh t\u00eb shkruara n\u00eb .NET Framework funksionon vet\u00ebm n\u00eb Windows. Tani po shfaqen sh\u00ebrbime n\u00eb .NET Core, por ato jan\u00eb ende t\u00eb pakta.<\/p>\n<p><u>Fleksibiliteti i shp\u00ebrndarjes.<\/u> Do t\u00eb doja t\u00eb kombinonte sh\u00ebrbimet ashtu si\u00e7 na nevojitet, e jo si\u00e7 e imponon 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 do t\u00eb ishte e leht\u00eb t\u00eb prishje monolitin n\u00eb mikrosh\u00ebrbime, nuk do t\u00eb ishte nevoj\u00eb t\u00eb flisnim p\u00ebr k\u00ebt\u00eb n\u00eb konferenca dhe t\u00eb shkruanin artikuj. Ka shum\u00eb pengesa n\u00eb k\u00ebt\u00eb proces, do t'i p\u00ebrshkruaj ato kryesoret q\u00eb na penguan.<\/p>\n<p><b>Problemi i par\u00eb<\/b> tipike p\u00ebr shumic\u00ebn e monoliteve: lidhshm\u00ebria e logjik\u00ebs biznesore. Kur shkruajm\u00eb nj\u00eb monolit, d\u00ebshirojm\u00eb 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: t\u00ebr\u00eb kodi \u00ebsht\u00eb mjaft i lidhur 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 t\u00eb merrni dhe ta ndani at\u00eb n\u00eb mikrosh\u00ebrbime nuk dukej e mundur.<\/p>\n<p><b>Problemi i tret\u00eb<\/b> \u2014 mungesa e infrastruktur\u00ebs s\u00eb nevojshme. N\u00eb fakt, ne merreshim me 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 kalosh nga monoliti n\u00eb mikrosherbime<\/h3>\n<p><\/b><br \/>\n<u>Shk\u00ebputja e mikrosh\u00ebrbimeve<\/u><\/p>\n<p>S\u00eb pari, ne pat\u00ebm qartazi t\u00eb p\u00ebrcaktonim se ndarja e mikrosh\u00ebrbimeve \u00ebsht\u00eb nj\u00eb proces iterativ. Na k\u00ebrkohej gjithmon\u00eb t\u00eb vazhdonim t\u00eb zhvillonim detyrat biznesore paralelisht. Si do ta realizonim at\u00eb teknikisht \u2014 ishte problemi yn\u00eb. Prandaj, ne u p\u00ebrgatit\u00ebm p\u00ebr nj\u00eb proces iterativ. Ndryshe nuk do t\u00eb ishte e mundur, n\u00ebse keni nj\u00eb aplikacion t\u00eb madh q\u00eb n\u00eb fillim nuk \u00ebsht\u00eb i gatsh\u00ebm p\u00ebr t'u rip\u0627\u0646 distuar.<\/p>\n<p>Cilat m\u00ebnyra p\u00ebrdorim p\u00ebr ndarjen e mikrosh\u00ebrbimeve?<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"5\"><\/a><\/noindex><b>Metoda e par\u00eb <\/b>\u2014 t\u00eb nxjerr\u00ebsh modul t\u00eb pranish\u00ebm si sh\u00ebrbime. N\u00eb k\u00ebt\u00eb aspekt, na ka ndihmuar fati: kishim sh\u00ebrbime t\u00eb dokumentuara q\u00eb punonin me protokollin WCF. Ato ishin shp\u00ebrndar\u00eb n\u00eb mbledhje t\u00eb ve\u00e7anta. Ne i transferuam ato p\u00ebr ve\u00e7mas, duke shtuar nj\u00eb modul t\u00eb vog\u00ebl startimi n\u00eb secil\u00ebn mbledhje. Ky modul ishte shkruar me bibliot\u00e8k\u00ebn e mrekullueshme Topshelf, e cila lejon fillimin e aplikacionit si sh\u00ebrbim dhe gjithashtu si konsol\u00eb. Kjo \u00ebsht\u00eb e p\u00ebrshtatshme p\u00ebr debugim, pasi nuk k\u00ebrkon projekte t\u00eb tjera n\u00eb zgjidhje.<\/p>\n<p>Sh\u00ebrbimet ishin t\u00eb lidhura sipas logjik\u00ebs s\u00eb biznesit, pasi p\u00ebrdornin mbledhje t\u00eb p\u00ebrbashk\u00ebta dhe punonin me nj\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb p\u00ebrbashk\u00ebt. Ishin t\u00eb v\u00ebshtira p\u00ebr t'u quajtur mikrosisteme n\u00eb form\u00ebn e tyre t\u00eb past\u00ebr. Megjithat\u00eb, ne mund t'i ofronim k\u00ebto sh\u00ebrbime ve\u00e7mas, n\u00eb procese t\u00eb ndryshme. Kjo e leht\u00ebsoi ndikimin e tyre ndaj nj\u00ebri-tjetrit, duke reduktuar problemin me zhvillimin paralel dhe pik\u00ebn e vetme t\u00eb d\u00ebshtimit.<\/p>\n<p>Nd\u00ebrtesa me hostin \u00ebsht\u00eb thjesht nj\u00eb rresht kod n\u00eb klas\u00ebn Program. Ne e fshihnim pun\u00ebn me Topshelf 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&lt;Accounts&gt;.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 mikrosistemeve:<\/b> t'i krijoni ato p\u00ebr t\u00eb zgjidhur detyra t\u00eb reja. N\u00ebse gjat\u00eb k\u00ebsaj kohe monolithi nuk rritet, kjo \u00ebsht\u00eb e shk\u00eblqyer, do t\u00eb thot\u00eb se po l\u00ebvizim n\u00eb drejtimin e duhur. P\u00ebr t\u00eb zgjidhur detyra t\u00eb reja, ne p\u00ebrpiqemi t\u00eb b\u00ebjm\u00eb sh\u00ebrbime t\u00eb ve\u00e7anta. N\u00ebse ka qen\u00eb nj\u00eb mund\u00ebsi, at\u00ebher\u00eb ne kemi krijuar sh\u00ebrbime m\u00eb \"kanonike\", t\u00eb cilat menaxhojn\u00eb plot\u00ebsisht modelin e tyre t\u00eb t\u00eb dh\u00ebnave, me nj\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb ndar\u00eb. <\/p>\n<p>Ne, si shum\u00eb t\u00eb tjer\u00eb, filluam me sh\u00ebrbime autentikimi dhe autorizimi. Ato jan\u00eb perfekte p\u00ebr k\u00ebt\u00eb q\u00ebllim. Ato jan\u00eb t\u00eb pavarura, n\u00eb p\u00ebrgjith\u00ebsi, kan\u00eb nj\u00eb model t\u00eb dh\u00ebnash t\u00eb ve\u00e7uar. Ato vet\u00eb nuk nd\u00ebrveprojn\u00eb me monolith-in, vet\u00ebm ai i drejtohet atyre p\u00ebr t\u00eb zgjidhur ndonj\u00eb detyr\u00eb. N\u00eb k\u00ebto sh\u00ebrbime mund t\u00eb filloni kalimin n\u00eb nj\u00eb arkitektur\u00eb t\u00eb re, t\u00eb shtroni infrastruktur\u00ebn, t\u00eb provoni disa qasje q\u00eb lidhen me bibliotekat rrjet dhe t\u00eb tjera. N\u00eb organizat\u00ebn ton\u00eb nuk ka ekipe q\u00eb nuk do t\u00eb ishin n\u00eb gjendje t\u00eb b\u00ebjn\u00eb nj\u00eb sh\u00ebrbim autentikimi. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"7\"><\/a><\/noindex><b>M\u00ebnyra e tret\u00eb e ndarjes s\u00eb mikrosh\u00ebrbimeve<\/b>, i cili \u00ebsht\u00eb pak specifik p\u00ebr ne. Ky \u00ebsht\u00eb izolimi i logjik\u00ebs biznesore nga sloji UI. Aplikacioni yn\u00eb kryesor i UI \u00ebsht\u00eb p\u00ebr desktop, si backend, \u00ebsht\u00eb shkruar n\u00eb C#. Zhvilluesit her\u00eb pas here gabonin dhe nxirrnin n\u00eb UI pjes\u00eb logjike q\u00eb duhej t\u00eb ekzistonin n\u00eb backend dhe t\u00eb rip\u00ebrdoroheshin. <\/p>\n<p>N\u00ebse shikojm\u00eb nj\u00eb shembull real nga kodi i pjes\u00ebs UI, shihet se nj\u00eb pjes\u00eb e madhe e k\u00ebtij zgjidhjeje p\u00ebrmban logjik\u00eb reale biznesi, e cila \u00ebsht\u00eb e dobishme n\u00eb procedura t\u00eb tjera, jo vet\u00ebm p\u00ebr nd\u00ebrtimin e formave 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 e UI atje \u00ebsht\u00eb vet\u00ebm dy rreshtat e fundit. Ne e transferuam at\u00eb n\u00eb server p\u00ebr ta b\u00ebr\u00eb t\u00eb mundur rip\u00ebrdorimin, duke e zvog\u00ebluar k\u00ebshtu UI-n\u00eb dhe duke arritur nj\u00eb arkitektur\u00eb t\u00eb sakt\u00eb.<\/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 ndarjen e mikrosh\u00ebrbjeve<\/b>, i cili lejon zvog\u00eblimin e monolitit, \u00ebsht\u00eb nxjerrja e sh\u00ebrbimeve ekzistuese me rishikim. Kur ne nxjerrim modulat ekzistuese ashtu si\u00e7 jan\u00eb, rezultati nuk i p\u00eblqen gjithmon\u00eb zhvilluesve, dhe procesi biznesor mund t\u00eb jet\u00eb b\u00ebr\u00eb i vjetruar q\u00eb nga krijimi i funksionalitetit. Fal\u00eb rishikimit t\u00eb kodit, ne mund t\u00eb mb\u00ebshtesim nj\u00eb proces t\u00eb ri biznesor, sepse k\u00ebrkesat e biznesit po ndryshojn\u00eb vazhdimisht. Ne mund t\u00eb p\u00ebrmir\u00ebsojm\u00eb kodin burimor, t\u00eb heqim defektet e njohura, t\u00eb krijojm\u00eb nj\u00eb model m\u00eb cil\u00ebsor t\u00eb t\u00eb dh\u00ebnave. Mblidhen shum\u00eb p\u00ebrfitime.<\/p>\n<p>Departamenti i sh\u00ebrbimeve me p\u00ebrpunim \u00ebsht\u00eb ngusht\u00eb i lidhur me konceptin e kontekstit t\u00eb kufizuar. Ky koncept vjen nga dizajni i orientuar drejt subjektit. Ai n\u00ebnkupton nj\u00eb pjes\u00eb t\u00eb modelit t\u00eb domainit, ku t\u00eb gjitha terma t\u00eb nj\u00eb gjuhe jan\u00eb t\u00eb p\u00ebrcaktuara qart\u00eb. Le t\u00eb shohim shembullin e konteksteve t\u00eb sigurimeve dhe faturave. Kemi nj\u00eb aplikacion monolitik 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\u00ebrtim tjet\u00ebr klas\u00ebn ekzistuese \"Fatur\u00eb\", t\u00eb b\u00ebj\u00eb referenc\u00eb ndaj saj nga klasa \"Sigurimi\", dhe do t\u00eb kemi kod n\u00eb funksion. Parimi DRY do t\u00eb respektohet, detyra do t\u00eb p\u00ebrfundohet m\u00eb shpejt duke shfryt\u00ebzuar kodin ekzistues.<\/p>\n<p>M\u00eb n\u00eb fund, rezulton se kontekstet e faturave dhe sigurimeve jan\u00eb t\u00eb lidhura. Kur t\u00eb shfaqen k\u00ebrkesa t\u00eb reja, kjo lidhje do t\u00eb pengoj\u00eb zhvillimin, duke rritur kompleksitetin e nj\u00eb logjike biznesi tashm\u00eb t\u00eb komplikuar. P\u00ebr t\u00eb zgjidhur k\u00ebt\u00eb problem, \u00ebsht\u00eb e nevojshme t\u00eb gjenden kufijt\u00eb midis konteksteve n\u00eb kod dhe t\u00eb eliminohen shkeljet e tyre. P\u00ebr shembull, p\u00ebr kontekstin e sigurimeve, mund t\u00eb mjaftoj\u00eb numri 20-shifror i fatur\u00ebs s\u00eb CB-s\u00eb dhe data e hapjes s\u00eb fatur\u00ebs. <\/p>\n<p>P\u00ebr t\u00eb ndar\u00eb k\u00ebto kontekste t\u00eb kufizuara nga nj\u00ebra-tjetra dhe p\u00ebr t\u00eb filluar procesin e ndarjes s\u00eb mikrosh\u00ebrbimeve nga nj\u00eb zgjidhje monolitike, ne p\u00ebrdor\u00ebm nj\u00eb qasje t\u00eb till\u00eb si krijimi i API-ve t\u00eb jashtme brenda aplikacionit. N\u00ebse dinim se ndonj\u00eb modul do t\u00eb b\u00ebhej nj\u00eb mikrosh\u00ebrbim, ose do t\u00eb transformohej n\u00eb kuad\u00ebr t\u00eb procesit, ne menj\u00ebher\u00eb kryenim thirrje t\u00eb logjik\u00ebs q\u00eb i p\u00ebrkiste nj\u00eb konteksti t\u00eb kufizuar tjet\u00ebr p\u00ebrmes thirrjeve t\u00eb jashtme. P\u00ebr shembull, p\u00ebrmes REST ose WCF.<\/p>\n<p>Ne vendos\u00ebm fort q\u00eb nuk do t\u00eb shmangim kodin q\u00eb do t\u00eb k\u00ebrkonte realizimin e transaksioneve t\u00eb shp\u00ebrndara. N\u00eb rastin ton\u00eb, doli t\u00eb ishte mjaft e leht\u00eb t\u00eb respektohej kjo rregull. Ende nuk kemi hasur n\u00eb situata t\u00eb tilla kur transaksionet e forta t\u00eb shp\u00ebrndara ishin v\u00ebrtet t\u00eb nevojshme \u2014 \u00ebsht\u00eb mjaft e mjaftueshme konsistenca p\u00ebrfundimtare midis moduleve.<\/p>\n<p>Le t\u00eb shqyrtojm\u00eb nj\u00eb shembull konkret. Kemi konceptin e orkestruesit \u2014 nj\u00eb linj\u00eb prodhimi q\u00eb proceson entitetin \"aplikimi\". Ai renditsh\u00ebm krijon klientin, llogarin\u00eb dhe kart\u00ebn bankare. N\u00ebse klienti dhe llogaria jan\u00eb krijuar me sukses, por krijimi i kart\u00ebs ka d\u00ebshtuar, aplikimi nuk kalon n\u00eb statusin \"i suksessh\u00ebm\" dhe mbetet n\u00eb statusin \"nuk \u00ebsht\u00eb krijuar karta\". N\u00eb t\u00eb ardhmen, aktiviteti pasiv do ta kap\u00eb at\u00eb dhe do ta p\u00ebrfundoj\u00eb. Sistemi ndodhet p\u00ebr nj\u00eb koh\u00eb n\u00eb nj\u00eb gjendje t\u00eb mosshkall\u00ebzimit, por kjo na k\u00ebnaq p\u00ebrgjith\u00ebsisht.<\/p>\n<p>N\u00eb rast se ndodh ndonj\u00ebher\u00eb nj\u00eb situat\u00eb ku do t\u00eb jet\u00eb e nevojshme t\u00eb ruajm\u00eb nj\u00eb pjes\u00eb t\u00eb t\u00eb dh\u00ebnave n\u00eb m\u00ebnyr\u00eb t\u00eb q\u00ebndrueshme, ne, me siguri, do t\u00eb shkojm\u00eb drejt konsolidimit t\u00eb sh\u00ebrbimit p\u00ebr ta procesuar k\u00ebt\u00eb n\u00eb nj\u00eb proces. <\/p>\n<p>Le t\u00eb shqyrtojm\u00eb shembullin e ndarjes s\u00eb nj\u00eb mikrosh\u00ebrbimi. Si mund ta \u00e7ojm\u00eb at\u00eb n\u00eb prodhim n\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 modulin e sh\u00ebrbimit t\u00eb pagave, nj\u00eb nga pjes\u00ebt e kodit t\u00eb cilin do t\u00eb d\u00ebshironim ta b\u00ebjm\u00eb mikrosh\u00ebrbim.<\/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 \/>\nE para s\u00eb par\u00ebs, ne krijojm\u00eb nj\u00eb mikrosh\u00ebrbim duke e ripar\u00eb kodin. P\u00ebrmir\u00ebsojm\u00eb disa aspekte q\u00eb nuk na k\u00ebnaqnin. Zhvillojm\u00eb k\u00ebrkesat e reja t\u00eb biznesit nga klienti. Shtojm\u00eb n\u00eb lidhjen midis UI dhe backend-it nj\u00eb API Gateway, i cili 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 ne l\u00ebshojm\u00eb k\u00ebt\u00eb konfigurim n\u00eb p\u00ebrdorim, por n\u00eb gjendje piloti. Shumica e p\u00ebrdoruesve tan\u00eb ende funksionojn\u00eb me proceset e vjetra t\u00eb biznesit. P\u00ebr p\u00ebrdoruesit e rinj, ne po zhvillojm\u00eb nj\u00eb version t\u00eb ri t\u00eb aplikacionit monolit, i cili nuk p\u00ebrmban m\u00eb k\u00ebt\u00eb proces. N\u00eb thelb, kemi nj\u00eb lidhje midis monolit dhe mikrosh\u00ebrbimit n\u00eb form\u00ebn e nj\u00eb piloti.<\/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 \/>\nN\u00ebse piloti \u00ebsht\u00eb i suksessh\u00ebm, ne kuptojm\u00eb se konfigurimi i ri \u00ebsht\u00eb n\u00eb t\u00eb v\u00ebrtet\u00eb funksional, mund t\u00eb heqim nga ekuacioni monolit e vjet\u00ebr dhe ta l\u00ebm\u00eb konfigurimin e ri n\u00eb vendin e 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 monolit. T\u00eb gjitha k\u00ebto na lejojn\u00eb t\u00eb zvog\u00eblojm\u00eb p\u00ebrmasat e pjes\u00ebve t\u00eb aplikacionit dhe t'i transferojm\u00eb ato n\u00eb biblioteka t\u00eb reja, duke krijuar nj\u00eb kod 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 \/>\nBD-ja ndahet m\u00eb keq se kodi burimor, pasi p\u00ebrmban jo vet\u00ebm skem\u00ebn aktuale, por edhe t\u00eb dh\u00ebna historike t\u00eb akumuluara.<\/p>\n<p>BD-ja jon\u00eb, ashtu si shum\u00eb t\u00eb tjera, kishte nj\u00eb tjet\u00ebr mang\u00ebsi t\u00eb r\u00ebnd\u00ebsishme \u2014 madh\u00ebsin\u00eb e saj t\u00eb madhe. Kjo BD u projektua sipas logjik\u00ebs s\u00eb nd\u00ebrlikuar t\u00eb biznesit t\u00eb monolit, dhe midis tabelave t\u00eb konteksteve t\u00eb ndryshme t\u00eb kufizuara u akumuluan lidhje.<\/p>\n<p>N\u00eb rastin ton\u00eb, p\u00ebrve\u00e7 t\u00eb gjitha t\u00eb k\u00ebqijave (BD e madhe, shum\u00eb lidhje, ndonj\u00ebher\u00eb kufij t\u00eb paqart\u00eb midis tabelave) u shfaq nj\u00eb problem q\u00eb haset 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 ndara. T\u00eb dh\u00ebnat merreshin nga tabelat p\u00ebrmes view-t, p\u00ebrmes replikimit dhe d\u00ebrgoheshin n\u00eb sisteme t\u00eb tjera ku nevojitej kjo replikim. Si rezultat, ne nuk mund\u00ebm t\u00eb nxirrnim 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. Ajo, si rregull, na jep nj\u00eb ide 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 e kuptojm\u00eb se cilat tabela i p\u00ebrkasin nj\u00eb konteksti t\u00eb kufizuar, dhe cilat nj\u00eb tjet\u00ebr.<\/p>\n<p>Ne we kemi aplikuar dy qasje globale p\u00ebr ndarjen e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave: ndarjen e tabelave ekzistuese dhe ndarjen me riformatim.<\/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 \u00ebsht\u00eb e pranueshme p\u00ebr t\u00eb gjith\u00eb. N\u00eb k\u00ebt\u00eb rast, ne mund t\u00eb ve\u00e7ojm\u00eb tabelat ekzistuese n\u00eb nj\u00eb skem\u00eb t\u00eb ve\u00e7ant\u00eb.<\/p>\n<p>Ndarja me riformatim \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 ndarim. Pa k\u00ebt\u00eb njohuri, nuk do t\u00eb arrijm\u00eb dot asgj\u00eb, dhe k\u00ebtu na ndihmon ndarja e konteksteve t\u00eb kufizuara n\u00eb kod. N\u00eb p\u00ebrgjith\u00ebsi, 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 supozojm\u00eb se kemi nj\u00eb zgjidhje ku dy module t\u00eb nj\u00eb monoliti nd\u00ebrveprojn\u00eb me nj\u00eb baz\u00eb t\u00eb dh\u00ebnash. Ne na nevojitet t\u00eb b\u00ebjm\u00eb q\u00eb vet\u00ebm nj\u00eb modul t\u00eb nd\u00ebrveproj\u00eb me pjes\u00ebn e tabelave t\u00eb ndara, nd\u00ebrsa tjetri t\u00eb filloj\u00eb t\u00eb lidhet me t\u00eb p\u00ebrmes API-s\u00eb. N\u00eb fillim, mjafton q\u00eb p\u00ebrmes API-s\u00eb t\u00eb kryhet vet\u00ebm shkruajta. Kjo \u00ebsht\u00eb nj\u00eb kusht i nevojsh\u00ebm p\u00ebr t\u00eb folur p\u00ebr pavar\u00ebsin\u00eb e mikrosh\u00ebrbimeve. Lidhjet p\u00ebr lexim mund t\u00eb mbeten, derisa kjo mos t\u00eb jet\u00eb nj\u00eb problem i 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 se ne tashm\u00eb mund ta izolojm\u00eb pjes\u00ebn e kodit q\u00eb punon me tabelat e ndara, duke e rip\u00ebrpunuar apo jo, 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, konteiner. Kjo do t\u00eb jet\u00eb nj\u00eb sh\u00ebrbim i ve\u00e7ant\u00eb me nj\u00eb lidhje me baz\u00ebn e t\u00eb dh\u00ebnave t\u00eb monolit dhe ato tabela q\u00eb nuk i p\u00ebrkasin direkt atij. Monoliti akoma interkonkordon 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, pra, leximi i t\u00eb dh\u00ebnave t\u00eb aplikacionit monolit nga tabelat e ndara gjithashtu do t\u00eb kaloj\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 von\u00eb, ne do t\u00eb ndajm\u00eb nga baza e dh\u00ebnash t\u00eb p\u00ebrgjithshme tabelat me t\u00eb cilat punon vet\u00ebm mikroservisi i ri. Mund t\u00eb nxjerrim tabelat n\u00eb nj\u00eb skem\u00eb t\u00eb ve\u00e7ant\u00eb ose madje n\u00eb nj\u00eb baz\u00eb t\u00eb ve\u00e7ant\u00eb fizike t\u00eb t\u00eb dh\u00ebnave. Kemi mbetur lidhjen p\u00ebr lexim midis mikroservisit dhe baz\u00ebs s\u00eb t\u00eb dh\u00ebnave t\u00eb monolit, por n\u00eb k\u00ebt\u00eb nuk ka asgj\u00eb t\u00eb keqe; n\u00eb k\u00ebt\u00eb konfigurim 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 heqim 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, ne do t\u00eb duam t\u00eb ri-p\u00ebrdorim n\u00eb disa baza disa t\u00eb dh\u00ebna q\u00eb replikohen nga sisteme t\u00eb jashtme ose referenca. 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>Shk\u00ebputje me rip\u00ebrpunim.<\/b> Ky metod\u00eb \u00ebsht\u00eb shum\u00eb e ngjashme me t\u00eb parin, vet\u00ebm se shkon n\u00eb rendin e kund\u00ebrt. Ne menj\u00ebher\u00eb kemi nj\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb re dhe nj\u00eb mikroservis t\u00eb ri, i cili bashk\u00ebvepron me monolitin p\u00ebrmes API-s\u00eb. Por, nj\u00ebkoh\u00ebsisht mbetet nj\u00eb grup tabelash n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave q\u00eb duam t'i heqim n\u00eb t\u00eb ardhmen. Ato nuk na nevojiten m\u00eb, n\u00eb modelin e ri i kemi z\u00ebvend\u00ebsuar.<\/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 \/>\nQ\u00eb kjo skem\u00eb t\u00eb funksionoj\u00eb, me siguri do t\u00eb na nevojitet nj\u00eb periudh\u00eb kaluese.<\/p>\n<p>M\u00eb pas ka dy qasje t\u00eb mundshme.<\/p>\n<p><b>I par\u00eb<\/b>: ne e kopjojm\u00eb t\u00eb gjitha t\u00eb dh\u00ebnat n\u00eb datat e reja dhe t\u00eb vjetra. N\u00eb k\u00ebt\u00eb rast, kemi tep\u00ebrsi t\u00eb dh\u00ebnash, mund t\u00eb shfaqen probleme me sinkronizimin. Por, mund t\u00eb marrim dy klient\u00eb t\u00eb ndrysh\u00ebm. Nj\u00ebri 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 kemi pasur 5 produkte q\u00eb ruhen n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave t\u00eb vjet\u00ebr. Produkti i gjasht\u00eb, n\u00eb kuad\u00ebr t\u00eb nj\u00eb detyre t\u00eb re biznesi, e vendosim n\u00eb BDB-n\u00eb e re. Por do na nevojitet nj\u00eb API Gateway q\u00eb do t\u00eb sinkronizoj\u00eb k\u00ebto t\u00eb dh\u00ebna dhe do t\u2019i tregoj\u00eb klientit se nga ku dhe \u00e7far\u00eb duhet t\u00eb marr\u00eb.<\/p>\n<p>T\u00eb dyja qasjet funksionojn\u00eb, zgjidhni n\u00eb var\u00ebsi t\u00eb situat\u00ebs.<\/p>\n<p>Pas sigurimit q\u00eb gjith\u00e7ka funksionon, nj\u00eb pjes\u00eb e monolitit q\u00eb punon me strukturat e vjetra t\u00eb BDB-s\u00eb mund t\u00eb \u00e7aktivizohet. <\/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 t\u00eb fshijm\u00eb strukturat e 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 BDB-n\u00eb: \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb punosh me t\u00eb krahasuar me kodin burimor, \u00ebsht\u00eb m\u00eb e v\u00ebshtir\u00eb t\u00eb ndahet, por mund ta b\u00ebsh dhe duhet ta b\u00ebsh. Ne kemi gjetur disa m\u00ebnyra q\u00eb e lejojn\u00eb k\u00ebt\u00eb t\u00eb b\u00ebhet mjaft n\u00eb m\u00ebnyr\u00eb t\u00eb sigurt; p\u00ebrs\u00ebri, t\u00eb b\u00ebsh gabime me t\u00eb dh\u00ebnat \u00ebsht\u00eb m\u00eb e leht\u00eb se sa 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 \/>\nKy ishte pamja e skem\u00ebs s\u00eb kodit burimor kur filluam analizimin e projektit 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 t\u00eb ndahet n\u00eb tri shtresa. Kjo \u00ebsht\u00eb shtresa e modules, plugins, sh\u00ebrbimeve dhe aktiviteteve t\u00eb ve\u00e7anta. N\u00eb thelb, k\u00ebto ishin pik\u00eb hyrjeje brenda zgjidhjes monolitike. T\u00eb gjitha ishin t\u00eb lidhura ngusht me shtres\u00ebn Common. Aty ishte logjika e biznesit q\u00eb p\u00ebrdorej s\u00eb bashku nga sh\u00ebrbimet dhe shum\u00eb lidhje. \u00c7do sh\u00ebrbim dhe plugin p\u00ebrdorte deri n\u00eb 10 m\u00eb shum\u00eb e mbledhjeve common, var\u00ebsisht nga madh\u00ebsia e tyre dhe ndershm\u00ebria e zhvilluesve.<\/p>\n<p>Na kishte b\u00ebr\u00eb fat, kishim biblioteka infrastrukturore q\u00eb mund t\u00eb p\u00ebrdoren ve\u00e7mas. <\/p>\n<p>Ndonj\u00ebher\u00eb ndodhte q\u00eb disa objekte 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>M\u00eb shum\u00eb shqet\u00ebsim shkaktuan kontekstet e kufizuara. Ndonj\u00ebher\u00eb, 3-4 kontekste p\u00ebrziheshin n\u00eb nj\u00eb nd\u00ebrtim t\u00eb zakonsh\u00ebm dhe p\u00ebrdornin nj\u00ebri-tjetrin brenda funksioneve t\u00eb biznesit. Duhej t\u00eb kuptonim se ku mund t\u00eb ndaheshin dhe cilat ishin kufijt\u00eb, dhe \u00e7far\u00eb duhet b\u00ebr\u00eb m\u00eb pas me grupimin e k\u00ebsaj ndarje n\u00eb nd\u00ebrtimet e kodit burimor.<\/p>\n<p>Kemi formuluar disa rregulla p\u00ebr procesin e ndarjes s\u00eb kodit.<\/p>\n<p><b>E para<\/b>: ne donim m\u00eb t\u00eb ndajm\u00eb logjik\u00ebn e biznesit midis sh\u00ebrbimeve, aktiviteteve dhe plugin\u00ebve. Donim q\u00eb logjika e biznesit t\u00eb ishte e pavarur brenda mikrosh\u00ebrbimeve. Nga ana tjet\u00ebr, mikrosh\u00ebrbimet, n\u00eb idealin e tyre, p\u00ebrceptohen si sh\u00ebrbime q\u00eb ekzistojn\u00eb krejt\u00ebsisht t\u00eb pavarura. Mendoj se ky qasje \u00ebsht\u00eb disi e tepruar dhe e v\u00ebshtir\u00eb p\u00ebr t'u arritur, sepse, p\u00ebr shembull, sh\u00ebrbimet n\u00eb C# do t\u00eb jen\u00eb gjithsesi t\u00eb lidhura me bibliotek\u00ebn standarde. Sistemi yn\u00eb \u00ebsht\u00eb shkruar n\u00eb C#, teknologji t\u00eb tjera akoma nuk kemi qen\u00eb t\u00eb detyruar t\u00eb p\u00ebrdorim. Prandaj, vendos\u00ebm q\u00eb mund t\u00eb lejojm\u00eb vetes t\u00eb p\u00ebrdorim nd\u00ebrtimet 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 logjikes s\u00eb biznesit. N\u00ebse keni nj\u00eb mb\u00ebshtetje t\u00eb p\u00ebrshtatshme mbi ORM-n\u00eb q\u00eb p\u00ebrdorni, at\u00ebher\u00eb kopjimi i saj nga nj\u00eb sh\u00ebrbim n\u00eb nj\u00eb tjet\u00ebr \u00ebsht\u00eb shum\u00eb i shtrenjt\u00eb.<\/p>\n<p>Ekipi yn\u00eb \u00ebsht\u00eb fans i dizajnimit t\u00eb orientuar nga objekti, prandaj \"arkitektura me qep\u00eb\" na i p\u00ebrshtatet n\u00eb m\u00ebnyr\u00eb t\u00eb shk\u00eblqyer. Baza e sh\u00ebrbimeve tona \u00ebsht\u00eb nj\u00eb grumbullim me logjik\u00ebn domain, e cila p\u00ebrmban vet\u00ebm logjik\u00ebn biznesore dhe \u00ebsht\u00eb e lir\u00eb nga lidhjet me infrastruktur\u00ebn. K\u00ebshtu, ne mund t\u00eb p\u00ebrmir\u00ebsojm\u00eb n\u00eb m\u00ebnyr\u00eb t\u00eb pavarur grumbullimin domain p\u00ebr t\u00eb zgjidhur problemet q\u00eb kan\u00eb t\u00eb b\u00ebjn\u00eb me kornizat.<\/p>\n<p>N\u00eb k\u00ebt\u00eb faz\u00eb, ne u p\u00ebrball\u00ebm me problemin e par\u00eb serioz. Sh\u00ebrbimi duhej t\u00eb referohej n\u00eb nj\u00eb nd\u00ebrtim t\u00eb vet\u00ebm t\u00eb domainit, logjika q\u00eb do t\u00eb d\u00ebshironim ta b\u00ebnim t\u00eb pavarur, dhe prinsipin DRY na pengonte shum\u00eb. Zhvilluesit d\u00ebshironin t\u00eb ridashuronin klasat nga nd\u00ebrtimet p\u00ebrreth p\u00ebr t\u00eb shmangur dyfishimin dhe si rezultat, domenet filluan p\u00ebrs\u00ebri t\u00eb lidheshin me nj\u00ebra-tjetr\u00ebn. Ne analizuam rezultatet dhe vendos\u00ebm se ndoshta problemi ishte gjithashtu n\u00eb fush\u00ebn e struktur\u00ebs s\u00eb depozit\u00ebs s\u00eb kodit burimor. Ne kishim nj\u00eb depo t\u00eb madhe, ku ishin t\u00eb gjitha kodet burimore. Zgjidhja p\u00ebr t\u00eb gjith\u00eb projektin ishte shum\u00eb e v\u00ebshtir\u00eb p\u00ebr t'u nd\u00ebrtuar n\u00eb makinat lokale. Prandaj, p\u00ebr pjes\u00ebt e projektit krijoheshin zgjidhje t\u00eb vogla ndarazi, dhe askush nuk e ndalonte t\u00eb shtonte ndonj\u00eb nd\u00ebrtim t\u00eb zakonsh\u00ebm ose t\u00eb domainit dhe t\u00eb ri-shfryt\u00ebzonte. Instrumenti i vet\u00ebm q\u00eb nuk na lejonte ta b\u00ebjm\u00eb k\u00ebt\u00eb ishte rishikimi i kodit. Por ndonj\u00ebher\u00eb, edhe ai d\u00ebshtonte.<\/p>\n<p>At\u00ebher\u00eb ne filluam t\u00eb kalonim n\u00eb nj\u00eb model me depo t\u00eb ve\u00e7anta. Logjika e biznesit nuk p\u00ebrfundoi m\u00eb nga nj\u00eb sh\u00ebrbim n\u00eb tjetrin, domenet v\u00ebrtet u b\u00ebn\u00eb t\u00eb pavarura. Kontekstet e kufizuara mb\u00ebshteten m\u00eb qart\u00eb. Si e rishfryt\u00ebzojm\u00eb bibliotekat infrastrukturore? Ne i ndam\u00eb ato n\u00eb nj\u00eb depo t\u00eb ve\u00e7ant\u00eb, at\u00ebher\u00eb i vendos\u00ebm n\u00eb paketat Nuget, t\u00eb cilat i vendos\u00ebm n\u00eb Artifactory. \u00c7do her\u00eb q\u00eb ndodhin ndryshime, 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\u00e7 b\u00ebjm\u00eb me bibliotekat e jashtme. Ne shkarkojm\u00eb bibliotekat e jashtme nga Nuget. P\u00ebr t\u00eb punuar me Artifactory, n\u00eb t\u00eb cilin vendosnim k\u00ebto paketa, p\u00ebrdor\u00ebm dy menaxher\u00eb paketash. N\u00eb depo t\u00eb vogla ne gjithashtu p\u00ebrdor\u00ebm Nuget. N\u00eb depo me disa sh\u00ebrbime ne p\u00ebrdor\u00ebm Paket, i cili siguron m\u00eb shum\u00eb konsistenc\u00eb t\u00eb versioneve 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 me kodin burimor, duke ndryshuar pak arkitektur\u00ebn dhe duke ndar\u00eb depo, ne e 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 pengesave gjat\u00eb kalimit n\u00eb mikrosh\u00ebrbime lidhet me infrastruktur\u00ebn. Ju nevojitet nj\u00eb shp\u00ebrndarje automatike, do t\u00eb nevojiten biblioteka t\u00eb reja p\u00ebr t\u00eb punuar me infrastruktur\u00ebn.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"16\"><\/a><\/noindex><b>Instalimi manual n\u00eb mjedise<\/b><\/p>\n<p>Fillimisht, ne vendosnim zgjidhjet n\u00eb mjedise manualisht. P\u00ebr t\u00eb automatizuar k\u00ebt\u00eb proces, kemi krijuar nj\u00eb pipeline CI\/CD. Zgjedhim procesin e shp\u00ebrndarjes s\u00eb vazhdueshme, sepse shp\u00ebrndarja e vazhdueshme p\u00ebr ne aktualisht nuk \u00ebsht\u00eb e pranueshme p\u00ebr sa i p\u00ebrket proceseve t\u00eb biznesit. Prandaj, d\u00ebrgimi n\u00eb prodhim b\u00ebhet me nj\u00eb buton, nd\u00ebrsa testimi \u00ebsht\u00eb automatik.<\/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 skriptet e nd\u00ebrtimit n\u00eb Cake, sepse \u00ebsht\u00eb e nj\u00ebjta si C#. Paketat e gatshme vijn\u00eb n\u00eb Artifactory, dhe Ansible automatikisht shkon 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>Regjistrimi i ndar\u00eb<\/h3>\n<p><\/b><br \/>\nN\u00eb koh\u00ebn e saj, nj\u00eb nga idet\u00eb e monolitit ishte sigurimi i regjistrimit t\u00eb p\u00ebrbashk\u00ebt. Na nevojitej gjithashtu t\u00eb kuptonim se \u00e7far\u00eb duhet t\u00eb b\u00ebjm\u00eb me regjistrimet e ve\u00e7anta q\u00eb ishin t\u00eb ruajtura n\u00eb disqe. Regjistrimet tona shkruhen n\u00eb skedar\u00eb teksti. Ne vendos\u00ebm t\u00eb p\u00ebrdorim grumbullin standard ELK. Nuk shkruam direkt n\u00eb ELK p\u00ebrmes ofruesve, por vendos\u00ebm q\u00eb t'i p\u00ebrmir\u00ebsojm\u00eb regjistrimet e tekstit dhe t'i regjistrojm\u00eb ato me ID-n\u00eb e gjurm\u00ebs n\u00eb form\u00ebn e nj\u00eb identifikuesi, duke shtuar emrin e sh\u00ebrbimit, p\u00ebr t\u00eb mund\u00ebsuar analizimin e k\u00ebtyre regjistrimeve m\u00eb von\u00eb.<\/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 kemi mund\u00ebsin\u00eb t\u00eb mbledhim regjistrimet tona nga <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sq\/server\/\"   title=\"servera\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1338\">servera<\/a>, pastaj t'i transformojm\u00eb ato, p\u00ebrmes Kibana t\u00eb nd\u00ebrtojm\u00eb k\u00ebrkesa n\u00eb UI dhe t\u00eb shohim si po shkonte thirrja midis sh\u00ebrbimeve. ID-ja e gjurm\u00ebs ndihmon shum\u00eb n\u00eb k\u00ebt\u00eb.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"15\"><\/a><\/noindex><b><\/p>\n<h3>Testimi dhe debugimi i sh\u00ebrbimeve t\u00eb lidhura<\/h3>\n<p><\/b><br \/>\nFillimisht nuk e kuptonim plot\u00ebsisht se si duhet t'i rregullonim sh\u00ebrbimet q\u00eb po zhvillonim. Me monolitin gjith\u00e7ka ishte e thjesht\u00eb, e nisim n\u00eb kompjuterin lokal. Fillimisht p\u00ebrpiqeshim t\u00eb b\u00ebnim t\u00eb nj\u00ebjt\u00ebn gj\u00eb me mikrosh\u00ebrbimet, por ndonj\u00ebher\u00eb p\u00ebr t\u00eb nisur nj\u00eb mikrosh\u00ebrbim t\u00eb plot\u00eb, duhej t\u00eb niste edhe disa t\u00eb tjer\u00eb, gj\u00eb q\u00eb ishte e pamundur. E kuptuam se ishte e nevojshme t\u00eb kalonim n\u00eb nj\u00eb model ku l\u00ebm\u00eb n\u00eb kompjuterin lokal vet\u00ebm sh\u00ebrbimin ose sh\u00ebrbimet q\u00eb duam t\u00eb rregullojm\u00eb. Sh\u00ebrbimet e tjera p\u00ebrdoren nga server\u00eb q\u00eb p\u00ebrputhen me konfigurimin e prodhimit. Pas rregullimit, gjat\u00eb testimit, p\u00ebr \u00e7do detyr\u00eb n\u00eb serverin e testimit mb\u00ebrrijn\u00eb vet\u00ebm sh\u00ebrbimet e ndryshuara. K\u00ebshtu, testohet zgjidhja n\u00eb at\u00eb form\u00eb n\u00eb t\u00eb cil\u00ebn do t\u00eb jet\u00eb n\u00eb t\u00eb ardhmen n\u00eb prodhim.<\/p>\n<p>Ka 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 p\u00ebr rastet e incidenteve, p\u00ebr kontrollimin e dor\u00ebzimit p\u00ebrpara distribuimit dhe p\u00ebr trajnime t\u00eb brendshme.<\/p>\n<p>Ne kemi shtuar nj\u00eb proces automatizimi t\u00eb testimit duke p\u00ebrdorur bibliotek\u00ebn popullore Specflow. Testet ekzekutohen automatikisht me NUnit menj\u00ebher\u00eb pas implementimit nga Ansible. N\u00ebse mbulimi i detyr\u00ebs \u00ebsht\u00eb plot\u00ebsisht automatizuar, nuk \u00ebsht\u00eb e nevojshme testimi manual. Megjithat\u00eb, ndonj\u00ebher\u00eb k\u00ebrkohet akoma testim manual shtes\u00eb. P\u00ebr t\u00eb p\u00ebrcaktuar se cilat teste duhet t\u00eb ekzekutohen p\u00ebr nj\u00eb detyr\u00eb t\u00eb caktuar, ne p\u00ebrdorim etiketa n\u00eb Jira.<\/p>\n<p>Shtuar gjithashtu nevoja p\u00ebr testim ngarkese, q\u00eb m\u00eb par\u00eb kryhej vet\u00ebm n\u00eb raste t\u00eb rralla. 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 arrit\u00ebm?<\/h3>\n<p><\/b><br \/>\nS\u00eb pari, ne u shk\u00ebput\u00ebm nga koncepti i \"l\u00ebshimit\". U zhduk\u00ebn l\u00ebshimet monstruoze dy-mujore, kur kjo makin\u00eb implementohej n\u00eb ambientin production dhe d\u00ebmtonte p\u00ebrkoh\u00ebsisht proceset biznesore. Tani ne implementojm\u00eb sh\u00ebrbimet mesatarisht \u00e7do 1.5 dit\u00eb, duke i grupuar ato, sepse ato dalin n\u00eb prodhim pas miratimit.<\/p>\n<p>N\u00eb sistemin ton\u00eb nuk ka defekte fatale. N\u00ebse ne publikojm\u00eb nj\u00eb mikrosh\u00ebrbim me gabime, funksionaliteti i lidhur do t\u00eb d\u00ebshtoj\u00eb, nd\u00ebrsa funksionalitetet e tjera nuk do t\u00eb preken. Kjo e p\u00ebrmir\u00ebsone ndjesh\u00ebm p\u00ebrvoj\u00ebn e p\u00ebrdoruesit.<\/p>\n<p>Ne mund t\u00eb menaxhojm\u00eb modelin e shp\u00ebrndarjes. Mund t\u00eb ve\u00e7ojm\u00eb grupe sh\u00ebrbimesh nga zgjidhja e p\u00ebrgjithshme, n\u00ebse \u00ebsht\u00eb e nevojshme.<\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, ne kemi reduktuar ndjesh\u00ebm problemin me radh\u00ebt e gjata t\u00eb ripunimeve. Kemi formuar ekipe t\u00eb ve\u00e7anta produktesh q\u00eb punojn\u00eb me pjes\u00ebn e sh\u00ebrbimeve n\u00eb m\u00ebnyr\u00eb t\u00eb pavarur. Procesi i Scrum-it i p\u00ebrshtatet shum\u00eb mir\u00eb k\u00ebtu. Nj\u00eb ekipi t\u00eb caktuar mund t'i ket\u00eb pronarin e vet t\u00eb produktit, i cili i p\u00ebrcakton detyrat. <\/p>\n<p><b><\/p>\n<h3>Curriculum Vitae<\/h3>\n<p><\/b><\/p>\n<ul>\n<li>Mikrosh\u00ebrbimet jan\u00eb shum\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr dekompozimin e sistemeve komplekse. Gjat\u00eb procesit, fillojm\u00eb t\u00eb kuptojm\u00eb se \u00e7far\u00eb ndodhet n\u00eb sistemin ton\u00eb, cilat jan\u00eb kontekstet e kufizuara dhe ku kalojn\u00eb kufijt\u00eb e tyre. Kjo lejon ndarjen e duhur t\u00eb ripunimeve sipas moduleve dhe parandalon konfuzionin n\u00eb kod. <\/li>\n<li>Mikroserviset ofrojn\u00eb p\u00ebrpar\u00ebsi organizative. Ato shpesh fliten vet\u00ebm si nj\u00eb arkitektur\u00eb, por \u00e7do arkitektur\u00eb i nevojitet zgjidhjes s\u00eb k\u00ebrkesave t\u00eb biznesit dhe jo si nj\u00eb q\u00ebllim vet\u00eb n\u00eb vetvete. Prandaj, mund t\u00eb themi se mikroserviset jan\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr zgjidhjen e detyrave nga ekipe t\u00eb vogla, duke marr\u00eb parasysh q\u00eb tani \u00ebsht\u00eb shum\u00eb e njohur metodologia Scrum.<\/li>\n<li>Shk\u00ebputja \u00ebsht\u00eb nj\u00eb proces iterativ. Nuk \u00ebsht\u00eb e mundur t\u00eb merrni nj\u00eb aplikacion dhe thjesht ta ndani at\u00eb n\u00eb mikroserviset. Produkti i rezultuar me siguri nuk do t\u00eb jet\u00eb funksional. Gjat\u00eb ndarjes s\u00eb mikroserviseve, \u00ebsht\u00eb e leverdisshme t\u00eb riprogramoni kodin ekzistues legacy, duke e kthyer at\u00eb n\u00eb kodin q\u00eb na p\u00eblqen dhe q\u00eb p\u00ebrmbush m\u00eb mir\u00eb k\u00ebrkesat e biznesit n\u00eb lidhje me funksionalitetin dhe shpejt\u00ebsin\u00eb.\n<p><i>Nj\u00eb p\u00ebrkushtim i vog\u00ebl:<\/i> shpenzimet p\u00ebr kalimin n\u00eb mikrosh\u00ebrbime jan\u00eb mjaft t\u00eb konsiderueshme. Vet\u00ebm zgjidhja e problemeve t\u00eb infrastruktur\u00ebs mori shum\u00eb koh\u00eb. Prandaj, n\u00ebse keni nj\u00eb aplikacion t\u00eb vog\u00ebl q\u00eb nuk k\u00ebrkon shkall\u00ebzim specifik, n\u00ebse nuk ka shum\u00eb klient\u00eb q\u00eb luftojn\u00eb p\u00ebr v\u00ebmendjen dhe koh\u00ebn e ekipit tuaj, ndoshta mikrosh\u00ebrbimet nuk jan\u00eb ajo q\u00eb ju nevojitet sot. Ato jan\u00eb mjaft t\u00eb shtrenjta. N\u00ebse e filloni procesin me mikrosh\u00ebrbime, shpenzimet n\u00eb fillim do t\u00eb jen\u00eb m\u00eb t\u00eb larta se sa n\u00ebse e nisni t\u00eb nj\u00ebjtin projekt me zhvillimin e nj\u00eb monoliti. <\/p>\n<p>P.S. Nj\u00eb tregim m\u00eb emocional (dhe sikur t\u2019ju ndodhte ju) \u2013 p\u00ebr <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=qTNbx18DzpQ\">lidhjes<\/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.0.1 - 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. \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\" \/>\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.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\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. \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\" \/>\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 se si projekti, n\u00eb t\u00eb cilin punoj, u transformua nga nj\u00eb monolit i madh n\u00eb nj\u00eb grup mikrosh\u00ebrbimesh. Projekti filloi historin\u00eb e tij mjaft her\u00ebt, n\u00eb fillim t\u00eb viteve 2000. Versionet e para ishin shkruar n\u00eb Visual Basic 6. Me kalimin e koh\u00ebs, b\u00ebri t\u00eb qart\u00eb se zhvillimi n\u00eb k\u00ebt\u00eb gjuh\u00eb do t\u00eb jet\u00eb i v\u00ebshtir\u00eb p\u00ebr t'u mbajtur n\u00eb t\u00eb ardhmen, pasi IDE","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. \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","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}]}}