{"id":31124,"date":"2019-10-31T21:39:36","date_gmt":"2019-10-31T18:39:36","guid":{"rendered":"https:\/\/prohoster.info\/blog\/stroitelnye-bloki-raspredelennyh-prilozhenij-vtoroe-priblizhenie\/"},"modified":"2019-10-31T21:39:36","modified_gmt":"2019-10-31T18:39:36","slug":"stroitelnye-bloki-raspredelennyh-prilozhenij-vtoroe-priblizhenie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-vtoroe-priblizhenie","title":{"rendered":"Blloqet e nd\u00ebrtimit t\u00eb aplikacioneve t\u00eb shp\u00ebrndara. Qasja e dyt\u00eb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Njoftim<\/strong><\/p>\n<p><\/p>\n<p><em>T\u00eb dashur koleg\u00eb, n\u00eb mesin e ver\u00ebs planifikoj t\u00eb publikoj nj\u00eb cik\u00ebl tjet\u00ebr artikujsh mbi projektimin e sistemeve t\u00eb sh\u00ebrbimit masiv: \u201cEksperiment VTrade\u201d \u2014 nj\u00eb p\u00ebrpjekje p\u00ebr t\u00eb shkruar nj\u00eb korniz\u00eb p\u00ebr sistemet tregtare. N\u00eb k\u00ebt\u00eb cik\u00ebl do t\u00eb shqyrtohet teoria dhe praktika e nd\u00ebrtimit t\u00eb nj\u00eb tregu, ankandi dhe dyqani. N\u00eb fund t\u00eb artikullit, ju ftoj t\u00eb votoni p\u00ebr temat m\u00eb t\u00eb interesuara p\u00ebr ju.<br \/>\n<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Blloqet e nd\u00ebrtimit t\u00eb aplikacioneve t\u00eb shp\u00ebrndara. Qasja e dyt\u00eb\" src=\"\/wp-content\/uploads\/2019\/04\/358996733e805327b587176f4f992aea.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ky \u00ebsht\u00eb artikulli p\u00ebrfundimtar i ciklit p\u00ebr aplikacione reaktive t\u00eb shp\u00ebrndara n\u00eb Erlang\/Elixir. N\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446028\/\">artikullin e par\u00eb<\/a><\/noindex> mund t\u00eb gjeni bazat teorike t\u00eb arkitektur\u00ebs reaktive. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446108\/\">Artikulli i dyt\u00eb<\/a><\/noindex> ilustron modelet dhe mekanizmat kryesor\u00eb t\u00eb nd\u00ebrtimit t\u00eb sistemeve t\u00eb tilla.<\/p>\n<p><\/p>\n<p>Sot do t\u00eb diskutojm\u00eb p\u00ebr zhvillimin e kodit baz\u00eb dhe projekteve n\u00eb p\u00ebrgjith\u00ebsi. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"organizaciya-servisov\">Organizimi i sh\u00ebrbimeve<\/h2>\n<p><\/p>\n<p>N\u00eb jet\u00ebn reale, gjat\u00eb zhvillimit t\u00eb nj\u00eb sh\u00ebrbimi, shpesh duhet t\u00eb bashkohen disa modele nd\u00ebrveprimi n\u00eb nj\u00eb kontrollues. P\u00ebr shembull, sh\u00ebrbimi users, i cili zgjidh problemet e menaxhimit t\u00eb profileve t\u00eb p\u00ebrdoruesve t\u00eb projektit, duhet t\u00eb p\u00ebrgjigjet n\u00eb k\u00ebrkesat req-resp dhe t\u00eb raportoj\u00eb p\u00ebr p\u00ebrdit\u00ebsimet e profileve p\u00ebrmes pub-sub. Ky rast \u00ebsht\u00eb mjaft i thjesht\u00eb: p\u00ebr messaging q\u00ebndron nj\u00eb kontrollues, i cili implementon logjik\u00ebn e sh\u00ebrbimit dhe publikon p\u00ebrdit\u00ebsime.<\/p>\n<p><\/p>\n<p>Situata komplikohet kur na nevojitet t\u00eb implementojm\u00eb nj\u00eb sh\u00ebrbim t\u00eb shp\u00ebrndar\u00eb rezistent ndaj d\u00ebshtimeve. Le t\u00eb imagjinojm\u00eb se k\u00ebrkesat p\u00ebr users jan\u00eb ndryshuar: <\/p>\n<p><\/p>\n<ol>\n<li>tani sh\u00ebrbimi duhet t\u00eb p\u00ebrpunoj\u00eb k\u00ebrkesat n\u00eb 5 nyje t\u00eb klasterit, <\/li>\n<li>t\u00eb ket\u00eb mund\u00ebsin\u00eb e ekzekutimit t\u00eb detyrave t\u00eb prapame, <\/li>\n<li>si dhe t\u00eb din\u00eb t\u00eb menaxhojn\u00eb dinamikisht listat e abonimit p\u00ebr p\u00ebrdit\u00ebsimet e profileve.<\/li>\n<\/ol>\n<p><\/p>\n<p><em>Sh\u00ebnim:<\/em> Ne nuk e shqyrtojm\u00eb \u00e7\u00ebshtjen e ruajtjes konsistente dhe replikimit t\u00eb t\u00eb dh\u00ebnave. Supozojm\u00eb se k\u00ebto \u00e7\u00ebshtje jan\u00eb zgjidhur m\u00eb par\u00eb dhe n\u00eb sistem tashm\u00eb ekziston nj\u00eb shtres\u00eb e besueshme dhe e shkall\u00ebzueshme e ruajtjes, dhe p\u00ebrpunuesit kan\u00eb mekanizma nd\u00ebrveprimi me t\u00eb.<\/p>\n<p><\/p>\n<p>P\u00ebrshkrimi formal i sh\u00ebrbimit users \u00ebsht\u00eb komplikuar. Nga k\u00ebndv\u00ebshtrimi i programuesit, fal\u00eb p\u00ebrdorimit t\u00eb messaging-ut, ndryshimet jan\u00eb minime. P\u00ebr t\u00eb p\u00ebrmbushur k\u00ebrkes\u00ebn e par\u00eb, na nevojitet t\u00eb konfigurojm\u00eb balancimin n\u00eb pik\u00ebn e ndarjes req-resp. <\/p>\n<p><\/p>\n<p>K\u00ebrkesa p\u00ebr p\u00ebrcaktimin e detyrave n\u00eb sfond ndodh shpesh. N\u00eb p\u00ebrdoruesit kjo mund t\u00eb jet\u00eb verifikimi i dokumenteve t\u00eb p\u00ebrdoruesve, p\u00ebrpunimi i multimediave t\u00eb ngarkuara, ose sinkronizimi i t\u00eb dh\u00ebnave me rrjetet sociale. K\u00ebto detyra duhet ndar\u00eb ndonj\u00ebfar\u00eb m\u00ebnyre brenda klasterit dhe t\u00eb kontrollohet progresi i ekzekutimit. Prandaj kemi dy mund\u00ebsi zgjidhjeje: ose t\u00eb p\u00ebrdorim modelin e shp\u00ebrndarjes s\u00eb detyrave nga Artikulli i kaluar, ose, n\u00ebse ai nuk \u00ebsht\u00eb i p\u00ebrshtatsh\u00ebm, t\u00eb shkruajm\u00eb nj\u00eb planifikues t\u00eb personalizuar t\u00eb detyrave q\u00eb do t\u00eb menaxhoj\u00eb pool-in e p\u00ebrpunuesve ashtu si\u00e7 na nevojitet. <\/p>\n<p><\/p>\n<p>Pika 3 k\u00ebrkon zgjerimin e modelit pub-sub. Dhe p\u00ebr ta realizuar, pas krijimit t\u00eb pik\u00ebs s\u00eb k\u00ebmbimit pub-sub, na nevojitet t\u00eb aktivizojm\u00eb nj\u00eb kontrollues t\u00eb k\u00ebsaj pike brenda sh\u00ebrbimit ton\u00eb. K\u00ebshtu, duket sikur e heqim logjik\u00ebn e p\u00ebrpunimit t\u00eb abonimeve dhe shk\u00ebputjeve nga sipari messaging n\u00eb implementimin e p\u00ebrdoruesve.<\/p>\n<p><\/p>\n<p>Si rezultat, dekompozimi i detyr\u00ebs tregoi se p\u00ebr t\u00eb p\u00ebrmbushur k\u00ebrkesat, na nevojitet t\u00eb aktivizojm\u00eb n\u00eb nyje t\u00eb ndryshme 5 kopje t\u00eb sh\u00ebrbimit dhe t\u00eb krijojm\u00eb nj\u00eb entitet shtes\u00eb \u2013 kontrolluesin pub-sub, p\u00ebrgjegj\u00ebs p\u00ebr abonimin.<br \/>\nP\u00ebr t\u00eb aktivizuar 5 p\u00ebrpunuesit, nuk k\u00ebrkohet t\u00eb ndryshojm\u00eb kodin e sh\u00ebrbimit. Veprimi i vet\u00ebm shtes\u00eb \u00ebsht\u00eb konfigurimi i rregullave t\u00eb balancimit n\u00eb pik\u00ebn e k\u00ebmbimit, p\u00ebr t\u00eb cilin do t\u00eb flasim pak m\u00eb von\u00eb.<br \/>\nGjithashtu ka nj\u00eb kompleksitet shtes\u00eb: kontrolluesi pub-sub dhe planifikuesi i personalizuar i detyrave duhet t\u00eb punojn\u00eb n\u00eb nj\u00eb kopje t\u00eb vetme. Po ashtu, sh\u00ebrbimi messaging, si nj\u00eb themelor, duhet t\u00eb ofroj\u00eb nj\u00eb mekaniz\u00ebm p\u00ebr zgjedhjen e liderit.<\/p>\n<p><\/p>\n<h3 id=\"vybor-lidera\">Zgjedhja e liderit<\/h3>\n<p><\/p>\n<p>N\u00eb sistemet e shp\u00ebrndara, zgjedhja e liderit \u00ebsht\u00eb nj\u00eb procedur\u00eb p\u00ebr em\u00ebrimin e nj\u00eb procesi t\u00eb vet\u00ebm, p\u00ebrgjegj\u00ebs p\u00ebr planifikimin e p\u00ebrpunimit t\u00eb shp\u00ebrndar\u00eb t\u00eb ndonj\u00eb ngarkese. <\/p>\n<p><\/p>\n<p>N\u00eb sistemet q\u00eb nuk e preferojn\u00eb centralizimin, p\u00ebrdoren algoritme universale dhe algoritme t\u00eb bazuara n\u00eb konsensus, si\u00e7 jan\u00eb paxos ose raft.<br \/>\nDhe meq\u00eb messaging \u00ebsht\u00eb nj\u00eb broker dhe element qendror, ai di p\u00ebr t\u00eb gjith\u00eb kontrolluesit e sh\u00ebrbimit \u2013 kandidat\u00ebt p\u00ebr lider\u00eb. Messaging mund t\u00eb em\u00ebroj\u00eb nj\u00eb lider pa organizuar votim.<\/p>\n<p><\/p>\n<p>T\u00eb gjitha sh\u00ebrbimet pas fillimit dhe lidhjes me pik\u00ebn e k\u00ebmbimit marrin nj\u00eb mesazh sistemik <code>#'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}<\/code>. N\u00eb rast se <code>LeaderPid<\/code> p\u00ebrputhet me <code>pid<\/code> e procesit aktual, ai em\u00ebrohet lider, dhe lista <code>Servers<\/code> p\u00ebrfshin t\u00eb gjitha nyjet dhe parametrat e tyre.<br \/>\nN\u00eb momentin e shfaqjes s\u00eb nj\u00eb nyjeje t\u00eb re dhe \u00e7aktivizimit t\u00eb nj\u00eb nyjeje funksionale t\u00eb klasterit, t\u00eb gjitha kontrolluesit e sh\u00ebrbimit marrin <code>#'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts}<\/code> \u0438 <code>#'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts}<\/code> p\u00ebrkat\u00ebsisht.<\/p>\n<p><\/p>\n<p>K\u00ebshtu, t\u00eb gjitha komponent\u00ebt e din\u00eb p\u00ebr t\u00eb gjitha ndryshimet, dhe n\u00eb klaster n\u00eb \u00e7do moment \u00ebsht\u00eb garantuar nj\u00eb lider.<\/p>\n<p><\/p>\n<h2 id=\"posredniki\">M\u00ebnyra t\u00eb nd\u00ebrmjetme<\/h2>\n<p><\/p>\n<p>P\u00ebr realizimin e proceseve t\u00eb ndar\u00eb t\u00eb p\u00ebrpunimit t\u00eb informacionit, si dhe n\u00eb detyrat e optimizimit t\u00eb arkitektur\u00ebs ekzistuese, \u00ebsht\u00eb e leht\u00eb t\u00eb aplikohen nd\u00ebrmjet\u00ebs.<br \/>\nP\u00ebr t\u00eb mos ndryshuar kodin e sh\u00ebrbimeve dhe p\u00ebr t\u00eb zgjidhur, p\u00ebr shembull, problemet e p\u00ebrpunimit shtes\u00eb, ruterizimit ose regjistrimit t\u00eb mesazheve, para sh\u00ebrbimit mund t\u00eb aktivizohet nj\u00eb p\u00ebrpunues proxy, i cili do t\u00eb b\u00ebj\u00eb t\u00eb gjith\u00eb pun\u00ebn shtes\u00eb.<\/p>\n<p><\/p>\n<p>Nj\u00eb shembull klasik i optimizimit pub-sub \u00ebsht\u00eb nj\u00eb aplikacion i shp\u00ebrndar\u00eb me b\u00ebrtham\u00ebn e biznesit, q\u00eb gjeneron ngjarje t\u00eb p\u00ebrdit\u00ebsimeve, p\u00ebr shembull ndryshimin e \u00e7mimit n\u00eb treg, dhe shtresa e aksesit \u2014 N server\u00eb q\u00eb ofrojn\u00eb API websocket p\u00ebr klient\u00ebt web.<br \/>\nN\u00ebse e zgjidhim \u2018ashtu si\u00e7 \u00ebsht\u00eb\u2019, sh\u00ebrbimi p\u00ebr klientin duket k\u00ebshtu:<\/p>\n<p><\/p>\n<ul>\n<li>klienti krijon lidhje me platform\u00ebn. N\u00eb an\u00ebn e serverit, q\u00eb terminon trafikun, fillon nj\u00eb proces q\u00eb sh\u00ebrben k\u00ebt\u00eb lidhje.<\/li>\n<li>n\u00eb kontekstin e procesit sh\u00ebrbyes ndodhin autorizimi dhe regjistrimi p\u00ebr p\u00ebrdit\u00ebsime. Procesi th\u00ebrret metod\u00ebn subscribe p\u00ebr temat.<\/li>\n<li>pasi gjenerohet nj\u00eb ngjarje n\u00eb b\u00ebrthama, ajo d\u00ebrgohet n\u00eb proceset q\u00eb sh\u00ebrbejn\u00eb lidhjet.<\/li>\n<\/ul>\n<p><\/p>\n<p>Le t\u00eb supozojm\u00eb se kemi 50000 abone n\u00eb tem\u00ebn \u201cnews\u201d. Abonuesit jan\u00eb shp\u00ebrndar\u00eb n\u00eb 5 servera n\u00eb m\u00ebnyr\u00eb t\u00eb barabart\u00eb. Si rezultat, \u00e7do p\u00ebrdit\u00ebsim, duke ardhur n\u00eb pik\u00ebn e shk\u00ebmbimit, do t\u00eb riprodhohet 50000 her\u00eb: 10000 her\u00eb n\u00eb secilin server, sipas numrit t\u00eb abonuesve n\u00eb t\u00eb. Nuk \u00ebsht\u00eb nj\u00eb skem\u00eb shum\u00eb efikase, apo jo?<br \/>\nP\u00ebr t\u00eb p\u00ebrmir\u00ebsuar situat\u00ebn, le t\u00eb futim nj\u00eb proxy, q\u00eb ka t\u00eb nj\u00ebjtin em\u00ebr me pik\u00ebn e shk\u00ebmbimit. Regjistruesi i emrave global duhet t\u00eb dij\u00eb t\u00eb kthej\u00eb procesin m\u00eb t\u00eb af\u00ebrt sipas emrit, kjo \u00ebsht\u00eb e r\u00ebnd\u00ebsishme.<\/p>\n<p><\/p>\n<p>T\u00eb nisim k\u00ebt\u00eb proxy n\u00eb serverat e shtres\u00ebs s\u00eb aksesit, dhe t\u00eb gjith\u00eb proceset tona q\u00eb sh\u00ebrbejn\u00eb API websocket do t\u00eb regjistrohen tek ai, dhe jo n\u00eb pik\u00ebn origjinale pub-sub t\u00eb shk\u00ebmbimit n\u00eb b\u00ebrthama. Proxy regjistrohet n\u00eb b\u00ebrthame vet\u00ebm n\u00eb rastin e regjistrimit unik dhe riprodhon mesazhin e pranuar p\u00ebr t\u00eb gjith\u00eb abonuesit e tij.<br \/>\nSi rezultat, midis b\u00ebrtham\u00ebs dhe serverave t\u00eb aksesit do t\u00eb d\u00ebrgohen 5 mesazhe, n\u00eb vend t\u00eb 50000.<\/p>\n<p><\/p>\n<h2 id=\"marshrutizaciya-i-balansirovka\">Ruterizimi dhe balancimi<\/h2>\n<p><\/p>\n<h3 id=\"req-resp\">Req-Resp<\/h3>\n<p><\/p>\n<p>N\u00eb realizimin aktual t\u00eb mesazgjerimit ekzistojn\u00eb 7 strategji t\u00eb shp\u00ebrndarjes s\u00eb k\u00ebrkesave:<\/p>\n<p><\/p>\n<ul>\n<li><code>default<\/code>. K\u00ebrkesa d\u00ebrgohet t\u00eb gjith\u00eb kontrollor\u00ebve.<\/li>\n<li><code>round-robin<\/code>. P\u00ebrdoret nj\u00eb cik\u00ebl dhe shp\u00ebrndarja e k\u00ebrkesave b\u00ebhet n\u00eb m\u00ebnyr\u00eb ciklike midis kontrollor\u00ebve.<\/li>\n<li><code>konsens<\/code>. Kontrollor\u00ebt q\u00eb sh\u00ebrbejn\u00eb sh\u00ebrbimin ndahen n\u00eb lider dhe ndihm\u00ebs. K\u00ebrkesat d\u00ebrgohen vet\u00ebm te lideri.<\/li>\n<li><code>konsens &amp; rreth-rrotull<\/code>. N\u00eb grup ka nj\u00eb lider, por k\u00ebrkesat shp\u00ebrndahen midis t\u00eb gjith\u00eb an\u00ebtar\u00ebve.<\/li>\n<li><code>ngjitur<\/code>. Llogaritet funksioni hash dhe lidhet me nj\u00eb trajtues t\u00eb caktuar. K\u00ebrkesat q\u00eb vijn\u00eb me k\u00ebt\u00eb n\u00ebnshkrim kalojn\u00eb te ky trajtues.<\/li>\n<li><code>ngjitur-fun<\/code>. Gjat\u00eb inicializimit t\u00eb pik\u00ebs s\u00eb shk\u00ebmbimit, jepet gjithashtu nj\u00eb funksion p\u00ebr llogaritjen e hashes p\u00ebr <code>ngjitur<\/code> . balancimin.<\/li>\n<li><code>fun<\/code>. I ngjash\u00ebm me ngjitur-fun, por gjithashtu mund t\u00eb p\u00ebrshkruaj\u00eb, refuzoj\u00eb ose p\u00ebrpunoj\u00eb paraprakisht at\u00eb. <\/li>\n<\/ul>\n<p><\/p>\n<p>Strategjia e shp\u00ebrndarjes p\u00ebrcaktohet gjat\u00eb inicializimit t\u00eb pik\u00ebs s\u00eb shk\u00ebmbimit.<\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 balancimit, messaging lejon t\u00eb etiketoni entitetet. Le t\u00eb shqyrtojm\u00eb llojet e etiketimeve n\u00eb sistem:<\/p>\n<p><\/p>\n<ul>\n<li>Etiketa e lidhjes. Lejon t\u00eb kuptohet se p\u00ebrmes cil\u00ebs lidhjeje erdh\u00ebn ngjarjet. P\u00ebrdoret kur procesi i kontrollor\u00ebve lidhet me nj\u00eb pik\u00eb shk\u00ebmbimi, por me \u00e7el\u00ebsa t\u00eb ndrysh\u00ebm t\u00eb rrug\u00ebve. <\/li>\n<li>Etiketa e sh\u00ebrbimit. Lejon q\u00eb p\u00ebr nj\u00eb sh\u00ebrbim t\u00eb bashkoj\u00eb n\u00eb grupe trajtuesit dhe t\u00eb zgjas\u00eb mund\u00ebsit\u00eb e rrug\u00ebs dhe balancimit. P\u00ebr modelin req-resp, rrug\u00ebtimi \u00ebsht\u00eb linear. Ne d\u00ebrgojm\u00eb nj\u00eb k\u00ebrkes\u00eb te pika e shk\u00ebmbimit, m\u00eb pas ajo e kalon te sh\u00ebrbimi. Por n\u00ebse duam t'i ndajm\u00eb trajtuesit n\u00eb grupe logjike, ndarja b\u00ebhet me ndihm\u00ebn e etiketimeve. Me caktimin e etiketes, k\u00ebrkesa do t\u00eb drejtohet te nj\u00eb grup specifik kontrollor\u00ebsh.<\/li>\n<li>Etiketa e k\u00ebrkes\u00ebs. Lejon t\u00eb dalloni p\u00ebrgjigjet. Duke qen\u00eb se sistemi yn\u00eb \u00ebsht\u00eb asinkron, p\u00ebr p\u00ebrpunimin e p\u00ebrgjigjeve t\u00eb sh\u00ebrbimit duhet t\u00eb kemi mund\u00ebsin\u00eb t\u00eb caktuar RequestTag gjat\u00eb d\u00ebrgimit t\u00eb k\u00ebrkes\u00ebs. P\u00ebrmes saj do t\u00eb mund t\u00eb kuptojm\u00eb se e cila p\u00ebrgjigje p\u00ebr k\u00ebrkes\u00ebn na ka ardhur.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"pub-sub\">Pub-sub<\/h3>\n<p><\/p>\n<p>P\u00ebr pub-sub, gj\u00ebrat jan\u00eb pak m\u00eb t\u00eb thjeshta. Ne kemi nj\u00eb pik\u00eb shk\u00ebmbimi ku publikohen mesazhet. Pika e shk\u00ebmbimit shp\u00ebrndan mesazhet midis abonent\u00ebve, t\u00eb cil\u00ebt jan\u00eb abonuar n\u00eb \u00e7el\u00ebsat e nevojsh\u00ebm t\u00eb rrug\u00ebtimit (mund ta quajm\u00eb se \u00ebsht\u00eb analog i temave).<\/p>\n<p><\/p>\n<h2 id=\"masshtabiruemost-i-otkazoustoychivost\">Shkall\u00ebzimi dhe q\u00ebndrueshm\u00ebria<\/h2>\n<p><\/p>\n<p>Shkall\u00ebzimi i sistemit n\u00eb t\u00ebr\u00ebsi varet nga shkalla e shkall\u00ebzimit t\u00eb shtresave dhe komponent\u00ebve t\u00eb sistemit:<\/p>\n<p><\/p>\n<ul>\n<li>Sh\u00ebrbimet shkall\u00ebzohen duke shtuar n\u00eb kluster nyje shtes\u00eb me menaxher\u00eb t\u00eb k\u00ebtij sh\u00ebrbimi. Gjat\u00eb operimeve praktike, mund t\u00eb zgjidhni politik\u00ebn optimale t\u00eb balancimit.<\/li>\n<li>Sh\u00ebrbimi messaging brenda nj\u00eb klusteri t\u00eb ve\u00e7ant\u00eb zakonisht shkall\u00ebzohet ose duke shp\u00ebrndar\u00eb pikat e shk\u00ebmbimit t\u00eb ngarkes\u00ebs s\u00eb lart\u00eb n\u00eb nyje t\u00eb ve\u00e7anta t\u00eb klusterit, ose duke shtuar procese proxy n\u00eb zonat e ngarkes\u00ebs s\u00eb lart\u00eb t\u00eb klusterit.<\/li>\n<li>Shkall\u00ebzimi i t\u00ebr\u00eb sistemit si nj\u00eb karakteristik\u00eb varet nga fleksibiliteti i arkitektur\u00ebs dhe mund\u00ebsia p\u00ebr t\u00eb bashkuar kluster t\u00eb ve\u00e7ant\u00eb n\u00eb nj\u00eb entitet logjik t\u00eb p\u00ebrgjithsh\u00ebm.<\/li>\n<\/ul>\n<p><\/p>\n<p>Thjesht\u00ebsia dhe shpejt\u00ebsia e shkall\u00ebzimit shpesh p\u00ebrcaktojn\u00eb suksesin e projektit. Messaging n\u00eb aktualitet rritet s\u00eb bashku me aplikacionin. Edhe n\u00ebse na mungojn\u00eb klusteret me 50-60 makina, mund t\u00eb p\u00ebrdorim federimin. Fatkeq\u00ebsisht, tema e federimit del jasht\u00eb kuadrit t\u00eb k\u00ebtij artikulli.<\/p>\n<p><\/p>\n<h2 id=\"rezervirovanie\">Rezervimi<\/h2>\n<p><\/p>\n<p>Kur diskutuam p\u00ebr balancimin e ngarkes\u00ebs, ne tashm\u00eb diskutuam p\u00ebr rezervimin e kontrollor\u00ebve t\u00eb sh\u00ebrbimeve. Megjithat\u00eb, messaging gjithashtu duhet t\u00eb jet\u00eb i rezervuar. N\u00eb rast t\u00eb r\u00ebnies s\u00eb nj\u00eb nyjeje ose makina, messaging duhet t\u00eb rikuperohet automatikisht, dhe p\u00ebr m\u00eb shum\u00eb, n\u00eb koh\u00ebn m\u00eb t\u00eb shkurt\u00ebr t\u00eb mundshme.<\/p>\n<p><\/p>\n<p>N\u00eb projektet e mia p\u00ebrdor nyje shtes\u00eb, t\u00eb cilat kapin ngarkes\u00ebn n\u00eb rast r\u00ebnjeje. N\u00eb Erlang ekziston nj\u00eb implementim standard i modit t\u00eb shp\u00ebrndar\u00eb p\u00ebr aplikacionet OTP. Mod i shp\u00ebrndar\u00eb pik\u00ebrisht realizon rikuperimin n\u00eb rast d\u00ebshtimi duke nisur aplikacionin e r\u00ebn\u00eb n\u00eb nj\u00eb nyje tjet\u00ebr t\u00eb nisur m\u00eb par\u00eb. Procesi \u00ebsht\u00eb transparent, pasi aplikacioni kalon automatikisht te nyja e rezervuar. P\u00ebr t\u00eb lexuar m\u00eb shum\u00eb rreth k\u00ebtij funksionaliteti mund t\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/design_principles\/distributed_applications.html\">k\u00ebtu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h2 id=\"proizvoditelnost\">Performanca<\/h2>\n<p><\/p>\n<p>T\u00eb p\u00ebrpiqemi t\u00eb krahasojm\u00eb me t\u00eb pakt\u00ebn nj\u00eb af\u00ebrsisht performanc\u00ebn e rabbitmq dhe messaging ton\u00eb t\u00eb personalizuar.<br \/>\nE kam gjetur <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/developer\/performance-docs\/test_results\/mq\/rabbitmq\/cmsm\/index.html\">rezultatet zyrtare<\/a><\/noindex> e testimit t\u00eb rabbitmq nga ekipi openstack.<\/p>\n<p><\/p>\n<p>N\u00eb pik\u00ebn 6.14.1.2.1.2.2. t\u00eb dokumentit origjinal paraqitet rezultati RPC CAST:<br \/>\n<img decoding=\"async\" alt=\"Blloqet e nd\u00ebrtimit t\u00eb aplikacioneve t\u00eb shp\u00ebrndara. Qasja e dyt\u00eb\" src=\"\/wp-content\/uploads\/2019\/04\/95f615d241d70a4523fe3c400179b8e6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebrpara, nuk do t\u00eb b\u00ebjm\u00eb asnj\u00eb konfigurim t\u00eb m\u00ebtejsh\u00ebm n\u00eb b\u00ebrtham\u00ebn e OS-it ose n\u00eb erlang VM. Kushtet p\u00ebr testim:<\/p>\n<p><\/p>\n<ul>\n<li>erl opts: +A1 +sbtu.<\/li>\n<li>Testi brenda nj\u00eb nyjeje erlang nis n\u00eb nj\u00eb laptop me nj\u00eb i7 t\u00eb vjet\u00ebr n\u00eb form\u00ebn mobile.<\/li>\n<li>Testet klusteri kalojn\u00eb n\u00eb server\u00eb me rrjet 10G.<\/li>\n<li>Kodi funksionon n\u00eb kontejner\u00eb docker. Rrjeti n\u00eb modalitet NAT.<\/li>\n<\/ul>\n<p><\/p>\n<p>Kodi i testit:<\/p>\n<p><\/p>\n<pre><code class=\"erlang\">req_resp_bench(_) -&gt;\n  W = perftest:comprehensive(10000,\n    fun() -&gt;\n      messaging:request(?EXCHANGE, default, ping, self()),\n      receive\n        #'$msg'{message = pong} -&gt; ok\n      after 5000 -&gt;\n        throw(timeout)\n      end\n    end\n  ),\n  true = lists:any(fun(E) -&gt; E &gt;= 30000 end, W),\n  ok.<\/code><\/pre>\n<p><\/p>\n<p><em>Scenari 1:<\/em> Testi ekzekutohet n\u00eb nj\u00eb laptop me nj\u00eb i7 mobil t\u00eb vjet\u00ebr. Testi, mesazhet dhe sh\u00ebrbimi ekzekutohen n\u00eb nj\u00eb nyje brenda nj\u00eb kontejneri docker:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Ciklet sekuenciale 10000 n\u00eb ~0 sekonda (26987 cikle\/s)\nCiklet sekuenciale 20000 n\u00eb ~1 sekond\u00eb (26915 cikle\/s)\nCiklet sekuenciale 100000 n\u00eb ~4 sekonda (26957 cikle\/s)\nParalele 2 100000 cikle n\u00eb ~2 sekonda (44240 cikle\/s)\nParalele 4 100000 cikle n\u00eb ~2 sekonda (53459 cikle\/s)\nParalele 10 100000 cikle n\u00eb ~2 sekonda (52283 cikle\/s)\nParalele 100 100000 cikle n\u00eb ~3 sekonda (49317 cikle\/s)<\/code><\/pre>\n<p><\/p>\n<p><em>Scenari 2<\/em>: 3 nyje t\u00eb nisura n\u00eb makina t\u00eb ndryshme n\u00ebn docker (NAT).<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Ciklet sekuenciale 10000 n\u00eb ~1 sekond\u00eb (8684 cikle\/s)\nCiklet sekuenciale 20000 n\u00eb ~2 sekonda (8424 cikle\/s)\nCiklet sekuenciale 100000 n\u00eb ~12 sekonda (8655 cikle\/s)\nParalele 2 100000 cikle n\u00eb ~7 sekonda (15160 cikle\/s)\nParalele 4 100000 cikle n\u00eb ~5 sekonda (19133 cikle\/s)\nParalele 10 100000 cikle n\u00eb ~4 sekonda (24399 cikle\/s)\nParalele 100 100000 cikle n\u00eb ~3 sekonda (34517 cikle\/s)<\/code><\/pre>\n<p><\/p>\n<p>N\u00eb t\u00eb gjitha rastet, utilizimi i CPU nuk kaloi 250%<\/p>\n<p><\/p>\n<h2 id=\"itogi\">P\u00ebrfundime<\/h2>\n<p><\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0434\u0430\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442, \u043a\u0430\u043a \u0434\u0430\u043c\u043f \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u0438 \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u0440\u0438\u043d\u0435\u0441\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u0443 \u043a\u0430\u043a \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0442\u0430\u043a \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0443\u0442\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0431\u0438\u0437\u043d\u0435\u0441-\u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u043c \u0441\u043c\u043e\u0442\u0440\u044f\u0442 \u043d\u0430 Erlang\/Elixir, \u043d\u043e \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u043e\u0438\u0442 \u043b\u0438&#8230;<\/p>\n<p><\/p>\n<p>Foto <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/Q4bmoSPJM18\">@chuttersnap<\/a><\/noindex><\/p>\n<p class=\"for_users_only_msg\">Vet\u00ebm p\u00ebrdoruesit e regjistruar mund t\u00eb marrin pjes\u00eb n\u00eb anket\u00eb. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Hyni<\/a><\/noindex>, ju lutem.<\/p>\n<h2 class=\"default-block__polling-title\">Cilat tema duhet t\u00eb trajtoj m\u00eb n\u00eb detaje n\u00eb kuad\u00ebr t\u00eb ciklit \"Eksperimenti VTrade\"?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Teoria: Tregjet, urdh\u00ebrat dhe koha e tyre e vlefshm\u00ebris\u00eb: DAY, GTD, GTC, IOC, FOK, MOO, MOC, LOO, LOC<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Libri i urdhrave. Teoria dhe praktika e realizimit t\u00eb librit me grumbullime<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Vizualizimi i tregtis\u00eb: Tik\u00eb, bara, rezoluta. Si t\u00eb ruajm\u00eb dhe si t\u00eb bashk\u00ebndajm\u00eb<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    B\u00ebkoofisi. Planifikimi dhe zhvillimi. Kontrolli i punonj\u00ebsve dhe hetimi i incidenteve<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    API. Po studiojm\u00eb se cilat nd\u00ebrfaqe na nevojiten dhe si t'i realizojm\u00eb ato<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ruajtja e informacionit: PostgreSQL, Timescale, Tarantool n\u00eb sistemet e tregtis\u00eb<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Reagimi n\u00eb sistemet e tregtis\u00eb<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    T\u00eb tjera. Do t\u00eb shkruaj n\u00eb komentet<\/p>\n<\/li>\n<\/ul>\n<p>    6 p\u00ebrdorues votuan. 4 p\u00ebrdorues u abstenuan.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446344\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0410\u043d\u043e\u043d\u0441 \u041a\u043e\u043b\u043b\u0435\u0433\u0438, \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043b\u0435\u0442\u0430 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f: \u201c\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 VTrade\u201d \u2014 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0412 \u0446\u0438\u043a\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u0430 \u0442\u0435\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0431\u0438\u0440\u0436\u0438, \u0430\u0443\u043a\u0446\u0438\u043e\u043d\u0430 \u0438 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u0442\u044c \u0437\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u0430\u043c \u0442\u0435\u043c\u044b. \u042d\u0442\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0446\u0438\u043a\u043b\u0430 \u043f\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23092,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31124","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0410\u043d\u043e\u043d\u0441 \u041a\u043e\u043b\u043b\u0435\u0433\u0438, \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043b\u0435\u0442\u0430 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f: \u201c\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 VTrade\u201d \u2014 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445.\" \/>\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\/stroitelnye-bloki-raspredelennyh-prilozhenij-vtoroe-priblizhenie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.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\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0412\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0410\u043d\u043e\u043d\u0441 \u041a\u043e\u043b\u043b\u0435\u0433\u0438, \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043b\u0435\u0442\u0430 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f: \u201c\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 VTrade\u201d \u2014 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-vtoroe-priblizhenie\" \/>\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-31T18:39:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:39:36+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\udd47Blloqet e nd\u00ebrtimit t\u00eb aplikacioneve t\u00eb shp\u00ebrndara. Afrohuni e dyt\u00eb | ProHoster","description":"Njoftim Shok\u00eb, n\u00eb mes t\u00eb ver\u00ebs planifikoj t\u00eb publikoj nj\u00eb cik\u00ebl tjet\u00ebr artikujsh mbi projektimin e sistemeve t\u00eb sh\u00ebrbimeve masive: \"Eksperimenti VTrade\" \u2014 nj\u00eb p\u00ebrpjekje p\u00ebr t\u00eb shkruar nj\u00eb korniz\u00eb p\u00ebr tregtin\u00eb.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-vtoroe-priblizhenie","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\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0412\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 | ProHoster","og:description":"\u0410\u043d\u043e\u043d\u0441 \u041a\u043e\u043b\u043b\u0435\u0433\u0438, \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043b\u0435\u0442\u0430 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f: \u201c\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 VTrade\u201d \u2014 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-vtoroe-priblizhenie","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-31T18:39:36+00:00","article:modified_time":"2019-10-31T18:39:36+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31124","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-01-21 04:39:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:22:34","updated":"2026-01-21 04:39:19","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\/31124","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=31124"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/31124\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/23092"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=31124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=31124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=31124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}