{"id":80035,"date":"2020-05-02T13:42:54","date_gmt":"2020-05-02T11:42:54","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/udobnye-arhitekturnye-patterny"},"modified":"2020-05-02T13:42:54","modified_gmt":"2020-05-02T11:42:54","slug":"udobnye-arhitekturnye-patterny","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/udobnye-arhitekturnye-patterny","title":{"rendered":"Modelet arkitektonike t\u00eb p\u00ebrshtatshme","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>P\u00ebrsh\u00ebndetje, Habr!<\/p>\n<p><\/p>\n<p>N\u00eb drit\u00ebn e ngjarjeve aktuale p\u00ebr shkak t\u00eb coronavirusit, nj\u00eb s\u00ebr\u00eb sh\u00ebrbimesh interneti ka filluar t\u00eb p\u00ebrjetoj\u00eb nj\u00eb ngarkes\u00eb t\u00eb rritur. P\u00ebr shembull, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.independent.co.uk\/life-style\/gadgets-and-tech\/news\/coronavirus-ocado-down-app-website-stockpiling-food-online-delivery-a9402216.html\">nj\u00eb nga rrjetet tregtare n\u00eb Mbret\u00ebrin\u00eb e Bashkuar sapo ndali faqen e saj me porosi online<\/a><\/noindex>, pasi nuk kishte kapacitete t\u00eb mjaftueshme. Dhe nuk \u00ebsht\u00eb gjithmon\u00eb e mundur t\u00eb p\u00ebrshpejtohet serveri thjesht duke shtuar pajisje m\u00eb t\u00eb fuqishme, por duhen trajtuar k\u00ebrkesat e klient\u00ebve (ndryshe ata do t\u00eb kalojn\u00eb te konkurrent\u00ebt).<\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb artikull, do t\u00eb flas shkurtimisht p\u00ebr praktikat e njohura q\u00eb do t\u00eb lejojn\u00eb krijimin e nj\u00eb sh\u00ebrbimi t\u00eb shpejt\u00eb dhe t\u00eb besuesh\u00ebm. Megjithat\u00eb, nga skemat e mundshme t\u00eb zhvillimit, kam zgjedhur vet\u00ebm ato q\u00eb tani <strong>jan\u00eb leht\u00ebsisht t\u00eb p\u00ebrdorshme<\/strong>. P\u00ebr secil\u00ebn pik\u00eb, ju ose keni biblioteka t\u00eb gatshme, ose keni mund\u00ebsin\u00eb t\u00eb zgjidhni detyr\u00ebn p\u00ebrmes nj\u00eb platforme cloud.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"gorizontalnoe-masshtabirovanie\">Zgjerimi horizontal<\/h1>\n<p><\/p>\n<p>Pika m\u00eb e thjesht\u00eb dhe m\u00eb e njohur. N\u00eb m\u00ebnyr\u00eb t\u00eb p\u00ebrgjithshme, dy skema m\u00eb t\u00eb zakonshme t\u00eb shp\u00ebrndarjes s\u00eb ngarkes\u00ebs jan\u00eb: horizontal dhe vertikal. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D0%BE%D1%81%D1%82%D1%8C#%D0%93%D0%BE%D1%80%D0%B8%D0%B7%D0%BE%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">N\u00eb rastin e par\u00eb<\/a><\/noindex> ju lejoni sh\u00ebrbimet t\u00eb funksionojn\u00eb paralelisht, duke shp\u00ebrndar\u00eb ngarkes\u00ebn midis tyre. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D0%BE%D1%81%D1%82%D1%8C#%D0%92%D0%B5%D1%80%D1%82%D0%B8%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">N\u00eb t\u00eb dytin<\/a><\/noindex> ju porosisni server\u00eb m\u00eb t\u00eb fuqish\u00ebm ose optimizoni kodin.<\/p>\n<p><\/p>\n<p>P\u00ebr shembull, do t\u00eb marr nj\u00eb ruajtje t\u00eb paqart\u00eb cloud, pra nj\u00eb disa analogji t\u00eb OwnCloud, OneDrive dhe k\u00ebshtu me radh\u00eb.<\/p>\n<p><\/p>\n<p>Pamja standarde e nj\u00eb skeme t\u00eb till\u00eb \u00ebsht\u00eb m\u00eb posht\u00eb, megjithat\u00eb ajo thjesht demonstruar kompleksitetin e sistemit. Sepse na nevojitet t\u00eb sinkronizojm\u00eb ndonj\u00ebher\u00eb sh\u00ebrbimet. \u00c7far\u00eb do t\u00eb ndodh\u00eb n\u00ebse nj\u00eb p\u00ebrdorues ruan nj\u00eb skedar nga tableti, dhe pastaj do ta shikoj\u00eb at\u00eb nga telefoni?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelet arkitektonike t\u00eb p\u00ebrshtatshme\" src=\"\/wp-content\/uploads\/2020\/05\/7512c6d8783f5e0a38cc0861b01e54c8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDallimi midis qasjeve: n\u00eb shkall\u00ebzimin vertikal jemi t\u00eb gatsh\u00ebm t\u00eb rrisim kapacitetet e nyjeve, nd\u00ebrsa n\u00eb at\u00eb horizontal \u2014 shtojm\u00eb nyje t\u00eb reja p\u00ebr t\u00eb shp\u00ebrndar\u00eb ngarkes\u00ebn.<\/p>\n<p><\/p>\n<h1 id=\"cqrs\">CQRS<\/h1>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/bliki\/CQRS.html\">Segregimi i P\u00ebrgjegj\u00ebsive t\u00eb K\u00ebrkes\u00eb dhe K\u00ebrkes\u00ebs<\/a><\/noindex> \u00ebsht\u00eb nj\u00eb model quite i r\u00ebnd\u00ebsish\u00ebm, pasi i lejon klient\u00ebve t\u00eb ndrysh\u00ebm jo vet\u00ebm t\u00eb lidhen me sh\u00ebrbime t\u00eb ndryshme, por edhe t\u00eb marrin rrjedha ngjarjesh identike. Benefitet e tij nuk jan\u00eb aq t\u00eb dukshme p\u00ebr nj\u00eb aplikacion t\u00eb thjesht\u00eb, megjithat\u00eb ai \u00ebsht\u00eb jasht\u00ebzakonisht e r\u00ebnd\u00ebsishme (dhe e thjesht\u00eb) p\u00ebr nj\u00eb sh\u00ebrbim t\u00eb ngarkuar. Thelbi i tij: rrjedhat e dh\u00ebnave hyr\u00ebse dhe dal\u00ebse nuk duhet t\u00eb kalojn\u00eb. K\u00ebshtu, nuk mund t\u00eb d\u00ebrgoni nj\u00eb k\u00ebrkes\u00eb dhe t\u00eb prisni nj\u00eb p\u00ebrgjigje, p\u00ebrkundrazi d\u00ebrgoni nj\u00eb k\u00ebrkes\u00eb n\u00eb sh\u00ebrbimin A, megjithat\u00eb merrni p\u00ebrgjigjen n\u00eb sh\u00ebrbimin B.<\/p>\n<p><\/p>\n<p>Benefiti i par\u00eb i k\u00ebsaj qasje \u00ebsht\u00eb mund\u00ebsia e nd\u00ebrprerjes s\u00eb lidhjes (n\u00eb kuptimin e gjer\u00eb t\u00eb fjal\u00ebs) gjat\u00eb kryerjes s\u00eb nj\u00eb k\u00ebrkese t\u00eb gjat\u00eb. P\u00ebr shembull, le t\u00eb marrim nj\u00eb renditje m\u00eb se standarde:<\/p>\n<p><\/p>\n<ol>\n<li>Klienti d\u00ebrgoi nj\u00eb k\u00ebrkes\u00eb n\u00eb server.<\/li>\n<li>Serveri nisi nj\u00eb p\u00ebrpunim t\u00eb gjat\u00eb.<\/li>\n<li>Serveri iu p\u00ebrgjigj klientit me rezultatin.<\/li>\n<\/ol>\n<p><\/p>\n<p>Imagjinoni se n\u00eb pik\u00ebn 2 ndodhi nj\u00eb nd\u00ebrprerje e lidhjes (ose rrjeti u rikonektua, ose p\u00ebrdoruesi kaloi n\u00eb nj\u00eb tjet\u00ebr faqe, duke shk\u00ebputur lidhjen). N\u00eb k\u00ebt\u00eb rast serverit do t'i ishte e v\u00ebshtir\u00eb t\u00eb d\u00ebrgonte p\u00ebrgjigjen te p\u00ebrdoruesi me informacionin se \u00e7far\u00eb u p\u00ebrpunua. Duke aplikuar CQRS, renditja do t\u00eb ishte paksa ndryshe:<\/p>\n<p><\/p>\n<ol>\n<li>Klienti u abonua p\u00ebr p\u00ebrdit\u00ebsime.<\/li>\n<li>Klienti d\u00ebrgoi nj\u00eb k\u00ebrkes\u00eb n\u00eb server.<\/li>\n<li>Serveri iu p\u00ebrgjigj \"k\u00ebrkesa e pranuar\".<\/li>\n<li>Serveri iu p\u00ebrgjigj rezultatit p\u00ebrmes kanalit nga \"1\".<\/li>\n<\/ol>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelet arkitektonike t\u00eb p\u00ebrshtatshme\" src=\"\/wp-content\/uploads\/2020\/05\/8a00ea93eecc7cc0754122857c5f90d0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si\u00e7 tregohet, skema \u00ebsht\u00eb paksa m\u00eb e komplikuar. M\u00eb shum\u00eb se kaq, qasja intuitiv\u00eb e k\u00ebrkes\u00ebs dhe p\u00ebrgjigjes k\u00ebtu mungon. Megjithat\u00eb si\u00e7 duket, nd\u00ebrprerja e lidhjes gjat\u00eb p\u00ebrpunimit t\u00eb k\u00ebrkes\u00ebs nuk do t\u00eb sjell\u00eb gabim. M\u00eb tep\u00ebr, n\u00ebse p\u00ebrdoruesi n\u00eb t\u00eb v\u00ebrtet\u00eb \u00ebsht\u00eb i lidhur me sh\u00ebrbimin nga disa pajisje (p\u00ebr shembull, nga telefoni celular dhe nga tableti), \u00ebsht\u00eb e mundur q\u00eb p\u00ebrgjigja t\u00eb vij\u00eb n\u00eb t\u00eb dy pajisjet.<\/p>\n<p><\/p>\n<p>Ajo q\u00eb \u00ebsht\u00eb interesante \u00ebsht\u00eb se kodi i p\u00ebrpunimit t\u00eb mesazheve hyr\u00ebse b\u00ebhet i nj\u00ebjt\u00eb (jo 100%) si p\u00ebr ngjarjet q\u00eb ndikuan vet\u00eb klientin, ashtu edhe p\u00ebr ngjarjet e tjera, duke p\u00ebrfshir\u00eb ato nga klient\u00eb t\u00eb tjer\u00eb.<\/p>\n<p><\/p>\n<p>Megjithat\u00eb n\u00eb realitet ne marrim p\u00ebrfitime t\u00eb tjera fal\u00eb faktit se rrjedha nj\u00ebkah\u00ebshe mund t\u00eb p\u00ebrpunohet n\u00eb stilin funksional (duke p\u00ebrdorur RX dhe analog\u00eb). Dhe kjo \u00ebsht\u00eb nj\u00eb p\u00ebrfitim i r\u00ebnd\u00ebsish\u00ebm, sepse n\u00eb fakt aplikacioni mund t\u00eb b\u00ebhet krejt\u00ebsisht reaktiv, madje edhe me p\u00ebrdorimin e qasjeve funksionale. P\u00ebr aplikacione t\u00eb dhjamosura, kjo mund t\u00eb ndihmoj\u00eb ndjesh\u00ebm n\u00eb kursimin e burimeve n\u00eb zhvillim dhe mb\u00ebshtetje.<\/p>\n<p><\/p>\n<p>N\u00ebse e kombinosh k\u00ebt\u00eb qasje me shkall\u00ebzimin horizontal, at\u00ebher\u00eb si bonus ne fitojm\u00eb mund\u00ebsin\u00eb p\u00ebr t\u00eb d\u00ebrguar k\u00ebrkesa n\u00eb nj\u00eb server dhe p\u00ebr t\u00eb marr\u00eb p\u00ebrgjigje nga nj\u00eb tjet\u00ebr. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, klienti mund t\u00eb zgjedh\u00eb sh\u00ebrbimin q\u00eb i p\u00ebrshtatet m\u00eb mir\u00eb, nd\u00ebrsa sistemi brenda mund t\u00eb trajtoj\u00eb ngjarjet n\u00eb m\u00ebnyr\u00eb t\u00eb sakt\u00eb.<\/p>\n<p><\/p>\n<h1 id=\"event-sourcing\">Event Sourcing<\/h1>\n<p><\/p>\n<p>Si e dini, nj\u00eb nga tiparet kryesore t\u00eb nj\u00eb sistemi t\u00eb shp\u00ebrndar\u00eb \u00ebsht\u00eb mungesa e nj\u00eb kohe t\u00eb p\u00ebrbashk\u00ebt, nj\u00eb seksioni kritik t\u00eb p\u00ebrbashk\u00ebt. P\u00ebr nj\u00eb proces mund t\u00eb realizoni sinkronizimin (n\u00eb t\u00eb nj\u00ebjtat mutex), brenda t\u00eb cilit jeni t\u00eb sigurt se askush tjet\u00ebr nuk po e ekzekuton k\u00ebt\u00eb kod. Megjithat\u00eb, p\u00ebr nj\u00eb sistem t\u00eb shp\u00ebrndar\u00eb di\u00e7ka e till\u00eb \u00ebsht\u00eb e rrezikshme, sepse do t\u00eb k\u00ebrkonte shpenzime t\u00eb larta, si dhe do t\u00eb shkat\u00ebrronte gjith\u00eb bukurin\u00eb e shkall\u00ebzimit - megjithat\u00eb t\u00eb gjith\u00eb komponent\u00ebt do t\u00eb prisnin nj\u00ebri-tjetrin.<\/p>\n<p><\/p>\n<p>Nga kjo nxjerrim nj\u00eb fakt t\u00eb r\u00ebnd\u00ebsish\u00ebm - nj\u00eb sistem t\u00eb shp\u00ebrndar\u00eb t\u00eb shpejt\u00eb nuk mund t\u00eb sinkronizohet, sepse at\u00ebher\u00eb ne do t\u00eb reduktojm\u00eb performanc\u00ebn. N\u00eb an\u00ebn tjet\u00ebr, shpesh na nevojitet nj\u00eb koherenc\u00eb e caktuar e komponent\u00ebve. Dhe p\u00ebr k\u00ebt\u00eb mund t\u00eb p\u00ebrdorim qasjen me <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Eventual_consistency\">konsistenc\u00eb t\u00eb p\u00ebrhershme<\/a><\/noindex>, ku garanton se n\u00eb munges\u00eb t\u00eb ndryshimeve t\u00eb t\u00eb dh\u00ebnave pas nj\u00eb periudhe t\u00eb caktuar kohe pas azhurnimit t\u00eb fundit (\"fundit\") t\u00eb gjitha k\u00ebrkesat do t\u00eb kthjellin vler\u00ebn e fundit t\u00eb azhurnuar.<\/p>\n<p><\/p>\n<p>\u00cbsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb kuptohet se p\u00ebr bazat e t\u00eb dh\u00ebnave klasike shpesh aplikohet <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Consistency_model#Strict_consistency\">koherenca strikte<\/a><\/noindex>, ku \u00e7do nyje ka t\u00eb nj\u00ebjtat informacione (kjo shpesh arrihet kur nj\u00eb transaksion konsiderohet i vendosur vet\u00ebm pas p\u00ebrgjigjes nga serveri i dyt\u00eb). K\u00ebtu ka disa leht\u00ebsira p\u00ebr shkak t\u00eb niveleve t\u00eb izolimit, megjithat\u00eb thelbi mbetet i nj\u00ebjt\u00eb - mund t\u00eb jetoni n\u00eb nj\u00eb bot\u00eb t\u00eb plot\u00eb t\u00eb koherenc\u00ebs.<\/p>\n<p><\/p>\n<p>Megjithat\u00eb, le t\u00eb kthehemi te detyra e fillimit. N\u00ebse nj\u00eb pjes\u00eb e sistemit mund t\u00eb nd\u00ebrtohet me <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Eventual_consistency\">konsistenc\u00eb t\u00eb p\u00ebrhershme<\/a><\/noindex>, at\u00ebher\u00eb mund t\u00eb nd\u00ebrtohet skema e m\u00ebposhtme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelet arkitektonike t\u00eb p\u00ebrshtatshme\" src=\"\/wp-content\/uploads\/2020\/05\/33c80be6bc33bd897ca9b9e5525f9ae8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ve\u00e7orit\u00eb e r\u00ebnd\u00ebsishme t\u00eb k\u00ebsaj qasje jan\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>\u00c7do k\u00ebrkes\u00eb e ardhshme vihet n\u00eb nj\u00eb radh\u00eb.<\/li>\n<li>Gjat\u00eb procesit t\u00eb p\u00ebrpunimit t\u00eb k\u00ebrkes\u00ebs, sh\u00ebrbimi gjithashtu mund t\u00eb vendos\u00eb detyra n\u00eb radh\u00eb t\u00eb tjera.<\/li>\n<li>\u00c7do ngjarje e ardhshme ka nj\u00eb identifikues (i nevojsh\u00ebm p\u00ebr deduplifikimin).<\/li>\n<li>Radh\u00eb ideologjikisht funksionon sipas skem\u00ebs \"vet\u00ebm shto\". Nga ajo nuk mund t\u00eb hiqen elemente ose t\u00eb riorganizohen ato.<\/li>\n<li>Radh\u00eb funksionon sipas skem\u00ebs FIFO (na falni p\u00ebr tautologjin\u00eb). N\u00ebse \u00ebsht\u00eb e nevojshme t\u00eb b\u00ebhet ekzekutimi paralel, duhet t\u00eb riorganizoni objektet n\u00eb radh\u00eb t\u00eb ndryshme n\u00eb nj\u00eb nga hapat.<\/li>\n<\/ul>\n<p><\/p>\n<p>M\u00eb kujtohet se ne po shqyrtojm\u00eb rastin e nj\u00eb depo online. N\u00eb k\u00ebt\u00eb rast, sistemi do t\u00eb duket p\u00ebraf\u00ebrsisht k\u00ebshtu:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelet arkitektonike t\u00eb p\u00ebrshtatshme\" src=\"\/wp-content\/uploads\/2020\/05\/b95efb29545dcde1db9432d12d00a1b1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cbsht\u00eb e r\u00ebnd\u00ebsishme q\u00eb sh\u00ebrbimet n\u00eb diagram nuk do t\u00eb thot\u00eb domosdoshm\u00ebrisht nj\u00eb server t\u00eb ve\u00e7ant\u00eb. Edhe procesi mund t\u00eb jet\u00eb i nj\u00ebjt\u00eb. Ajo q\u00eb \u00ebsht\u00eb e r\u00ebnd\u00ebsishme \u00ebsht\u00eb: ideologjikisht k\u00ebto gj\u00ebra jan\u00eb t\u00eb ndara n\u00eb nj\u00eb m\u00ebnyr\u00eb q\u00eb mund t\u00eb aplikohet leht\u00ebsisht shkall\u00ebzimi horizontal.<\/p>\n<p><\/p>\n<p>Dhe p\u00ebr dy p\u00ebrdorues, skema do t\u00eb dukej k\u00ebshtu (sh\u00ebrbimet e destinuara p\u00ebr p\u00ebrdorues t\u00eb ndrysh\u00ebm, jan\u00eb t\u00eb sh\u00ebnuara me ngjyra t\u00eb ndryshme):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelet arkitektonike t\u00eb p\u00ebrshtatshme\" src=\"\/wp-content\/uploads\/2020\/05\/4c4aadc8b9dd505c3ad743e69fee4fae.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bonus\u00ebt nga nj\u00eb kombinim i till\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Sh\u00ebrbimet e p\u00ebrpunimit t\u00eb informacionit jan\u00eb t\u00eb ndara. Radh\u00ebt gjithashtu jan\u00eb t\u00eb ndara. N\u00ebse duhet t\u00eb rrisim kapacitetin e sistemit, ne thjesht duhet t\u00eb aktivizojm\u00eb m\u00eb shum\u00eb sh\u00ebrbime n\u00eb nj\u00eb num\u00ebr m\u00eb t\u00eb madh server\u00ebsh.<\/li>\n<li>Kur marrim informacion nga p\u00ebrdoruesi, nuk \u00ebsht\u00eb e nevojshme t\u00eb presim ruajtjen e plot\u00eb t\u00eb t\u00eb dh\u00ebnave. P\u00ebrkundrazi, mjafton t\u00eb p\u00ebrgjigjemi \"ok\", dhe pastaj t\u00eb fillojm\u00eb pun\u00ebn gradualisht. Radh\u00eb gjithashtu zbut kulmin, sepse shtimi i nj\u00eb objekti t\u00eb ri ndodh shpejt, dhe p\u00ebrdoruesi nuk duhet t\u00eb pres\u00eb p\u00ebr kalimin e plot\u00eb n\u00eb gjith\u00eb ciklin.<\/li>\n<li>Si nj\u00eb shembull, un\u00eb kam shtuar sh\u00ebrbimin e deduplifikimit, i cili p\u00ebrpiqet t\u00eb bashkoj\u00eb skedar\u00eb t\u00eb nj\u00ebjt\u00eb. N\u00ebse punon ngadal\u00eb n\u00eb 1% t\u00eb rasteve, klienti k\u00ebt\u00eb praktikisht nuk do ta v\u00ebren\u00eb (shih m\u00eb sip\u00ebr), q\u00eb \u00ebsht\u00eb nj\u00eb avantazh i madh, sepse nuk na nevojitet shpejt\u00ebsia dhe besueshm\u00ebria e 100% nga ne.<\/li>\n<\/ul>\n<p><\/p>\n<p>Megjithat\u00eb, menj\u00ebher\u00eb duken edhe disavantazhet:<\/p>\n<p><\/p>\n<ul>\n<li>Sistemi yn\u00eb ka humbur koherenc\u00ebn strikte. Kjo do t\u00eb thot\u00eb se n\u00ebse, p\u00ebr shembull, abonoheni n\u00eb sh\u00ebrbime t\u00eb ndryshme, teorikisht mund t\u00eb merrni nj\u00eb gjendje t\u00eb ndryshme (sepse nj\u00eb nga sh\u00ebrbimet mund t\u00eb mos arrij\u00eb t\u00eb marr\u00eb njoftimin nga radh\u00ebn e brendshme). Si nj\u00eb pasoj\u00eb tjet\u00ebr, sistemi tani nuk ka nj\u00eb koh\u00eb t\u00eb p\u00ebrbashk\u00ebt. K\u00ebshtu q\u00eb nuk mund t\u00eb renditni t\u00eb gjitha ngjarjet thjesht sipas koh\u00ebs s\u00eb mb\u00ebrritjes, sepse or\u00ebt midis server\u00ebve mund t\u00eb mos jen\u00eb sinkronike (madje, e nj\u00ebjta koh\u00eb n\u00eb dy server\u00eb \u00ebsht\u00eb nj\u00eb utopi).<\/li>\n<li>Asnj\u00eb ngjarje nuk mund t\u00eb kthjellohet tani thjesht (si\u00e7 do t\u00eb mund t\u00eb b\u00ebnte me nj\u00eb baz\u00eb t\u00eb dh\u00ebnash). N\u00eb vend t\u00eb k\u00ebsaj, \u00ebsht\u00eb e nevojshme t\u00eb shtoni nj\u00eb ngjarje t\u00eb re - <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/49451237\/compensating-events-on-cqrs-es-architecture\">ngjarje kompensimi<\/a><\/noindex>, e cila do t\u00eb ndryshoj\u00eb gjendjen e fundit n\u00eb at\u00eb t\u00eb nevojshme. Si nj\u00eb shembull nga nj\u00eb fush\u00eb e ngjashme: pa riparimin e historis\u00eb (\u00e7ka \u00ebsht\u00eb e keqe n\u00eb disa raste) n\u00eb git nuk mund t\u00eb kthjelloni nj\u00eb komit, megjithat\u00eb mund t\u00eb b\u00ebni nj\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/docs\/git-revert\">komit t\u00eb kthimit<\/a><\/noindex>, i cili n\u00eb thelb do t\u00eb sjell\u00eb gjendjen e vjet\u00ebr. Megjithat\u00eb, n\u00eb histori do t\u00eb ruhet si komiti i gabuar edhe komiti i kthimit.<\/li>\n<li>Skema e t\u00eb dh\u00ebnave mund t\u00eb ndryshoj\u00eb nga nj\u00eb version n\u00eb tjetrin, por tani nuk \u00ebsht\u00eb e mundur q\u00eb ngjarjet e vjetra t\u00eb p\u00ebrdit\u00ebsohen n\u00eb standardin e ri (sepse n\u00eb parim ngjarjet nuk mund t\u00eb ndryshojn\u00eb).<\/li>\n<\/ul>\n<p><\/p>\n<p>Si\u00e7 duket, Event Sourcing funksionon shk\u00eblqyer me CQRS. M\u00eb shum\u00eb, realizimi i nj\u00eb sistemi me radh\u00eb efektive dhe t\u00eb p\u00ebrshtatshme, p\u00ebrkund\u00ebr munges\u00ebs s\u00eb ndarjes s\u00eb kanaleve t\u00eb t\u00eb dh\u00ebnave, tashm\u00eb \u00ebsht\u00eb vet\u00eb nj\u00eb sfid\u00eb, sepse do t\u00eb duhet t\u00eb shtohen pika sinkronizimi q\u00eb do t\u00eb neutralizojn\u00eb t\u00eb gjith\u00eb efektin pozitiv t\u00eb radh\u00ebve. Rreth t\u00eb dyja qasjeve duke e p\u00ebrdorur at\u00eb, \u00ebsht\u00eb e nevojshme t\u00eb b\u00ebhet nj\u00eb korrigjim i vog\u00ebl n\u00eb kodin e pun\u00ebs s\u00eb programit. N\u00eb rastin ton\u00eb, kur d\u00ebrgojm\u00eb nj\u00eb sked\u00eb n\u00eb server, n\u00eb p\u00ebrgjigje merrim vet\u00ebm \u2018ok\u2019, q\u00eb do t\u00eb thot\u00eb se \u2018operacioni i shtimit t\u00eb sked\u00ebs \u00ebsht\u00eb ruajtur\u2019. Formalisht, kjo nuk do t\u00eb thot\u00eb se t\u00eb dh\u00ebnat jan\u00eb tashm\u00eb t\u00eb disponueshme n\u00eb pajisje t\u00eb tjera (p\u00ebr shembull, sh\u00ebrbimi i dedupikimit mund t\u00eb rikonstruktoj\u00eb indeksin). Megjithat\u00eb, pas nj\u00eb koh\u00eb, klienti do t\u00eb marr\u00eb nj\u00eb njoftim n\u00eb stilin \u2018skeda X \u00ebsht\u00eb ruajtur\u2019.<\/p>\n<p><\/p>\n<p>Si rezultat:<\/p>\n<p><\/p>\n<ul>\n<li>Numri i q\u00ebndrimeve t\u00eb d\u00ebrgimit t\u00eb skedave po rritet: p\u00ebrve\u00e7 \u2018skeda \u00ebsht\u00eb d\u00ebrguar\u2019, tani kemi dy: \u2018skeda \u00ebsht\u00eb shtuar n\u00eb radh\u00eb n\u00eb server\u2019 dhe \u2018skeda \u00ebsht\u00eb ruajtur n\u00eb ruajtje\u2019. E dyta do t\u00eb thot\u00eb se pajisjet e tjera tashm\u00eb mund t\u00eb fillojn\u00eb t\u00eb marrin sked\u00ebn (me rezervimin se radh\u00ebt funksionojn\u00eb me shpejt\u00ebsi t\u00eb ndryshme).<\/li>\n<li>P\u00ebr shkak se informacioni mbi d\u00ebrgimin tani vjen p\u00ebrmes kanaleve t\u00eb ndryshme, na nevojitet t\u00eb dizajnojm\u00eb zgjidhje p\u00ebr t\u00eb marr\u00eb statusin e p\u00ebrpunimit t\u00eb sked\u00ebs. Si pasoj\u00eb e k\u00ebsaj: ndryshe nga k\u00ebrkesa-klienti klasik, klienti mund t\u00eb rindez\u00eb gjat\u00eb p\u00ebrpunimit t\u00eb sked\u00ebs, mir\u00ebpo statusi i k\u00ebtij p\u00ebrpunimi do t\u00eb jet\u00eb i sakt\u00eb. Dhe ky pik\u00eb funksionon, n\u00eb parim, \u2018nga kutia\u2019. Si pasoj\u00eb: tani jemi m\u00eb tolerant\u00eb ndaj d\u00ebshtimeve.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"sharding\">Sharding<\/h1>\n<p><\/p>\n<p>Si\u00e7 \u00ebsht\u00eb p\u00ebrmendur m\u00eb lart, n\u00eb sistemet me event sourcing nuk ka nj\u00eb koherenc\u00eb t\u00eb fort\u00eb. K\u00ebshtu q\u00eb mund t\u00eb p\u00ebrdorim disa ruajtje pa ndonj\u00eb sinkronizim midis tyre. Duke iu afruar detyr\u00ebs son\u00eb, ne mundemi:<\/p>\n<p><\/p>\n<ul>\n<li>T\u00eb ndajm\u00eb skedat sipas llojeve. P\u00ebr shembull, imazhet\/videot mund t\u00eb dekodohen dhe t\u00eb zgjidhet nj\u00eb format m\u00eb efikas.<\/li>\n<li>T\u00eb ndajm\u00eb llogarit\u00eb sipas vendeve. P\u00ebr shkak t\u00eb shum\u00eb ligjeve, kjo mund t\u00eb k\u00ebrkohet, megjithat\u00eb, kjo skem\u00eb arkitekturale e ofron k\u00ebt\u00eb mund\u00ebsi automatikisht.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelet arkitektonike t\u00eb p\u00ebrshtatshme\" src=\"\/wp-content\/uploads\/2020\/05\/dd310df700bc39c014d0105a3425fece.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse d\u00ebshironi t\u00eb transferoni t\u00eb dh\u00ebna nga nj\u00eb ruajtje n\u00eb tjetr\u00ebn, at\u00ebher\u00eb k\u00ebtu nuk do t\u00eb jet\u00eb e mundur me mjete standarde. Fatkeq\u00ebsisht, n\u00eb nj\u00eb rast t\u00eb till\u00eb duhet t\u00eb ndaloni radhen, t\u00eb kryeni migrimin dhe pastaj t\u00eb rinisni at\u00eb. N\u00eb rastin m\u00eb t\u00eb p\u00ebrgjithsh\u00ebm, t\u00eb dh\u00ebnat nuk mund t\u00eb transferohen \u2018n\u00eb flak\u00eb\u2019, por, n\u00ebse radh\u00ebt e ngjarjeve ruhen plot\u00ebsisht dhe ju keni kopje t\u00eb gjendjeve t\u00eb m\u00ebparshme t\u00eb ruajtjes, mund t\u00eb riprodhoni ngjarjet n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>N\u00eb Event Source, \u00e7do ngjarje ka identifikuesin e saj (idealisht \u2014 jo n\u00eb rritje). K\u00ebshtu q\u00eb n\u00eb ruajtje mund t\u00eb shtojm\u00eb nj\u00eb fush\u00eb \u2014 id e elementit t\u00eb fundit t\u00eb p\u00ebrpunuar.<\/li>\n<li>Duplicojm\u00eb radhen, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb gjitha ngjarjet t\u00eb mund t\u00eb p\u00ebrpunohen p\u00ebr disa ruajtje t\u00eb pavarura (e para \u2014 \u00ebsht\u00eb ajo n\u00eb t\u00eb cil\u00ebn tashm\u00eb ruhen t\u00eb dh\u00ebnat, dhe e dyta \u2014 e re, por p\u00ebr momentin e zbraz\u00ebt). Radha e dyt\u00eb, natyrisht, p\u00ebr momentin nuk po p\u00ebrpunon.<\/li>\n<li>Nisemi me radhen e dyt\u00eb (dometh\u00ebn\u00eb, fillojm\u00eb riprodhimin e ngjarjeve).<\/li>\n<li>Kur radha e re t\u00eb jet\u00eb relativisht e zbraz\u00ebt (dmth. diferenca mes mesatares s\u00eb koh\u00ebs q\u00eb kalon nga shtimi i nj\u00eb elementi dhe nxjerrja e tij \u00ebsht\u00eb e pranueshme), mund t\u00eb fillojm\u00eb t\u00eb kalojm\u00eb lexuesit n\u00eb ruajtjen e re.<\/li>\n<\/ul>\n<p><\/p>\n<p>Si\u00e7 duket, n\u00eb sistemin ton\u00eb asnj\u00ebher\u00eb nuk ka qen\u00eb dhe nuk ka koherenc\u00eb t\u00eb fort\u00eb. Ka vet\u00ebm eventual consistency, dometh\u00ebn\u00eb nj\u00eb garanci se ngjarjet p\u00ebrpunohen n\u00eb rendin e nj\u00ebjt\u00eb (megjithat\u00eb, ndoshta me vonesa t\u00eb ndryshme). Dhe, duke e shfryt\u00ebzuar k\u00ebt\u00eb, ne mund t\u00eb transferojm\u00eb t\u00eb dh\u00ebnat relativisht leht\u00eb pa ndalur sistemin n\u00eb an\u00ebn tjet\u00ebr t\u00eb globit.<\/p>\n<p><\/p>\n<p>K\u00ebshtu, duke vazhduar me shembujt tan\u00eb p\u00ebr ruajtjen online t\u00eb skedave, nj\u00eb arkitektur\u00eb e till\u00eb tashm\u00eb na ofron disa avantazhe:<\/p>\n<p><\/p>\n<ul>\n<li>Ne mund t\u00eb l\u00ebvizim objektet m\u00eb af\u00ebr p\u00ebrdoruesve, duke b\u00ebr\u00eb k\u00ebt\u00eb n\u00eb m\u00ebnyr\u00eb dinamike. K\u00ebshtu mund t\u00eb p\u00ebrmir\u00ebsojm\u00eb cil\u00ebsin\u00eb e sh\u00ebrbimit. <\/li>\n<li>Ne mund t\u00eb ruajm\u00eb nj\u00eb pjes\u00eb t\u00eb t\u00eb dh\u00ebnave brenda kompanive. P\u00ebr shembull, p\u00ebrdoruesit e Enterprise shpesh k\u00ebrkojn\u00eb q\u00eb t\u00eb dh\u00ebnat e tyre t\u00eb ruhen n\u00eb qendra t\u00eb kontrolluara (p\u00ebr t\u00eb shmangur rrjedhjen e t\u00eb dh\u00ebnave). Fal\u00eb sharding, ne mund ta mb\u00ebshtesim k\u00ebt\u00eb pa ndonj\u00eb problem. Dhe detyra b\u00ebhet edhe m\u00eb e leht\u00eb n\u00ebse klienti ka nj\u00eb cloud kompatibil. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-gb\/azure-stack\/asdk\/asdk-what-is?view=azs-1910\">Azure self hosted<\/a><\/noindex>).<\/li>\n<li>Dhe gj\u00ebja m\u00eb e r\u00ebnd\u00ebsishme \u00ebsht\u00eb se ne mund ta b\u00ebjm\u00eb k\u00ebt\u00eb pa qen\u00eb t\u00eb detyruar. N\u00eb fakt, p\u00ebr fillim, na mjafton nj\u00eb depo p\u00ebr t\u00eb gjitha llogarit\u00eb (p\u00ebr t\u00eb filluar m\u00eb shpejt). Tipari ky\u00e7 i k\u00ebsaj sistemi \u00ebsht\u00eb se, ndon\u00ebse \u00ebsht\u00eb i zgjeruesh\u00ebm, n\u00eb faz\u00ebn fillestare \u00ebsht\u00eb mjaft i thjesht\u00eb. Thjesht, nuk duhen shkruar menj\u00ebher\u00eb kodet q\u00eb punojn\u00eb me miliona kuota t\u00eb pavarura etj. N\u00ebse nevojitet, kjo mund t\u00eb b\u00ebhet n\u00eb t\u00eb ardhmen.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"static-content-hosting\">Static Content Hosting<\/h1>\n<p><\/p>\n<p>Ky pik\u00eb mund t\u00eb duket krejt\u00ebsisht e qart\u00eb, megjithat\u00eb \u00ebsht\u00eb ende e nevojshme p\u00ebr nj\u00eb aplikacion t\u00eb ngarkuar m\u00eb shum\u00eb ose m\u00eb pak standard. Q\u00ebllimi i tij \u00ebsht\u00eb i thjesht\u00eb: i gjith\u00eb p\u00ebrmbajtja statike shp\u00ebrndahet jo nga serveri ku ndodhet aplikacioni, por nga server\u00eb t\u00eb ve\u00e7ant\u00eb, t\u00eb dedikuar sakt\u00ebsisht p\u00ebr k\u00ebt\u00eb pun\u00eb. Si pasoj\u00eb, k\u00ebto operacione kryhen m\u00eb shpejt (nj\u00eb nginx i zakonsh\u00ebm dor\u00ebzon skedar\u00ebt m\u00eb shpejt dhe m\u00eb lir\u00eb se nj\u00eb server Java). P\u00ebr m\u00eb tep\u00ebr, arhitektura e CDN (<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Content_delivery_network\">Content Delivery Network<\/a><\/noindex>) lejon q\u00eb skedar\u00ebt tan\u00eb t\u00eb jen\u00eb m\u00eb af\u00ebr p\u00ebrdoruesve t\u00eb fundit, q\u00eb ndikon pozitivisht n\u00eb komoditetin e pun\u00ebs me sh\u00ebrbimin.<\/p>\n<p><\/p>\n<p>Shembulli m\u00eb i thjesht\u00eb dhe standard i p\u00ebrmbajtjes statike \u00ebsht\u00eb nj\u00eb grup skriptesh dhe imazhesh p\u00ebr nj\u00eb faqe. Me to \u00ebsht\u00eb e thjesht\u00eb \u2014 ato jan\u00eb t\u00eb njohura paraprakisht, m\u00eb pas arkivi ngarkohet n\u00eb serverat e CDN, nga ku shp\u00ebrndahen p\u00ebr p\u00ebrdoruesit e fundit.<\/p>\n<p><\/p>\n<p>Megjithat\u00eb, n\u00eb realitet, p\u00ebr p\u00ebrmbajtjen statike mund t\u00eb aplikohet nj\u00eb qasje q\u00eb \u00ebsht\u00eb paksa e ngjashme me arkitektur\u00ebn lambda. Le t\u00eb kthehemi n\u00eb detyr\u00ebn ton\u00eb (depo online skedaresh), ku na nevojitet t\u00eb shp\u00ebrndajm\u00eb skedar\u00ebt p\u00ebr p\u00ebrdoruesit. Zgjidhja m\u00eb e thjesht\u00eb do t\u00eb ishte t\u00eb b\u00ebnim nj\u00eb sh\u00ebrbim, i cili p\u00ebr \u00e7do k\u00ebrkes\u00eb t\u00eb p\u00ebrdoruesit b\u00ebn t\u00eb gjitha verifikimet e nevojshme (autorizimi etj.) dhe m\u00eb pas shkarkon skedarin direkt nga depoja jon\u00eb. Mang\u00ebsia kryesore e nj\u00eb qasje t\u00eb till\u00eb \u00ebsht\u00eb se p\u00ebrmbajtja statike (dhe nj\u00eb skedar me nj\u00eb revizion t\u00eb caktuar, p\u00ebr thelb, \u00ebsht\u00eb p\u00ebrmbajtje statike) shp\u00ebrndahet nga i nj\u00ebjti server q\u00eb mban logjik\u00ebn e biznesit. N\u00eb vend t\u00eb k\u00ebsaj, mund t\u00eb kemi k\u00ebt\u00eb skem\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Serveri jep nj\u00eb URL p\u00ebr shkarkimin. Ajo mund t\u00eb ket\u00eb form\u00ebn file_id + key, ku key \u00ebsht\u00eb nj\u00eb n\u00ebnshkrim dixhital i vog\u00ebl, q\u00eb jep t\u00eb drejt\u00eb p\u00ebr akses n\u00eb burimin p\u00ebr nj\u00eb dit\u00eb t\u00eb af\u00ebrt.<\/li>\n<li>Shp\u00ebrndarja e skedar\u00ebve merret nga nj\u00eb nginx i thjesht\u00eb me opsionet e m\u00ebposhtme:\n<ul>\n<li>K\u00ebshtu, si ky sh\u00ebrbim mund t\u00eb jet\u00eb n\u00eb nj\u00eb server t\u00eb ve\u00e7ant\u00eb, ne kemi l\u00ebn\u00eb vetes hap\u00ebsir\u00eb p\u00ebr n\u00eb t\u00eb ardhmen me mund\u00ebsin\u00eb p\u00ebr t\u00eb ruajtur t\u00eb gjitha skedar\u00ebt e fundit t\u00eb shkarkuar n\u00eb disk.<\/li>\n<li>Verifikimi i \u00e7el\u00ebsit n\u00eb momentin e krijimit t\u00eb lidhjes<\/li>\n<\/ul>\n<\/li>\n<li>Opsionale: p\u00ebrpunimi i p\u00ebrmbajtjes n\u00eb rrjedh\u00eb. P\u00ebr shembull, n\u00ebse kompresojm\u00eb t\u00eb gjith\u00eb skedar\u00ebt n\u00eb sh\u00ebrbim, mund t\u00eb b\u00ebjm\u00eb dekompresimin direkt n\u00eb k\u00ebt\u00eb modul. Si pasoj\u00eb: operacionet IO b\u00ebhen aty ku kan\u00eb m\u00eb shum\u00eb vend. Nj\u00eb arkivues n\u00eb Java do t\u00eb jet\u00eb n\u00eb gjendje t\u00eb ndaj\u00eb shum\u00eb memorje t\u00eb tep\u00ebrt, megjithat\u00eb, rishkrimi i sh\u00ebrbimit me logjik\u00ebn e biznesit n\u00eb Rust\/C++ do t\u00eb dukej gjithashtu joefikas. N\u00eb rastin ton\u00eb, p\u00ebrdoren procese t\u00eb ndryshme (ose madje sh\u00ebrbime), prandaj mund t\u00eb ndajm\u00eb mjaft efektivisht logjik\u00ebn e biznesit nga operacionet IO.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelet arkitektonike t\u00eb p\u00ebrshtatshme\" src=\"\/wp-content\/uploads\/2020\/05\/4dead07d5824938e09b986192ccc8f5e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nj\u00eb skem\u00eb e till\u00eb nuk duket shum\u00eb si shp\u00ebrndarja e p\u00ebrmbajtjes statike (sepse ne nuk po ngarkojm\u00eb gjith\u00eb paket\u00ebn e statik\u00ebs diku), megjithat\u00eb, n\u00eb realitet, kjo qasje merret me shp\u00ebrndarjen e t\u00eb dh\u00ebnave t\u00eb pandryshueshme. P\u00ebr m\u00eb tep\u00ebr, kjo skem\u00eb mund t\u00eb p\u00ebrgjith\u00ebsohet p\u00ebr raste t\u00eb tjera, kur p\u00ebrmbajtja nuk \u00ebsht\u00eb vet\u00ebm statike, por mund t\u00eb paraqitet si nj\u00eb grup blokesh t\u00eb pandryshueshme dhe t\u00eb padisht\u00eb (pavar\u00ebsisht se ato mund t\u00eb shtohen).<\/p>\n<p><\/p>\n<p>Si nj\u00eb tjet\u00ebr shembull (p\u00ebr konsolidim): n\u00ebse keni punuar me Jenkins\/TeamCity, e dini se t\u00eb dy zgjidhjet jan\u00eb shkruar n\u00eb Java. T\u00eb dy ato p\u00ebrb\u00ebjn\u00eb nj\u00eb proces Java, i cili merret me orkestrimin e nd\u00ebrtimit, si dhe menaxhimin e p\u00ebrmbajtjes. N\u00eb ve\u00e7anti, t\u00eb dy kan\u00eb detyra t\u00eb tipit \"t\u00eb kalosh nj\u00eb skedar\/fond me serverin\". Si shembull: l\u00ebshimi i artefakteve, kalimi i kodit burimor (kur agjenti nuk shkarkon kodin direkt nga repozitori, por serveri e b\u00ebn k\u00ebt\u00eb), akses n\u00eb regjistrat. T\u00eb gjitha k\u00ebto detyra ndryshojn\u00eb ngarkes\u00ebn n\u00eb IO. Pra, del se serveri q\u00eb \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr logjik\u00ebn komplekse t\u00eb biznesit duhet gjithashtu t\u00eb jet\u00eb n\u00eb gjendje t\u00eb shtyj\u00eb n\u00eb m\u00ebnyr\u00eb efektive flux t\u00eb m\u00ebdhenj t\u00eb t\u00eb dh\u00ebnave. Dhe \u00e7far\u00eb \u00ebsht\u00eb m\u00eb interesante, nj\u00eb operacion t\u00eb till\u00eb mund ta delegojm\u00eb pik\u00ebrisht nginx-it n\u00eb t\u00eb nj\u00ebjt\u00ebn skem\u00eb (p\u00ebrve\u00e7se n\u00eb k\u00ebrkes\u00eb duhet shtuar \u00e7el\u00ebsi i t\u00eb dh\u00ebnave).<\/p>\n<p><\/p>\n<p>Megjithat\u00eb, p\u00ebr t\u00eb kthyer n\u00eb sistemin ton\u00eb, del nj\u00eb skem\u00eb e till\u00eb:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Modelet arkitektonike t\u00eb p\u00ebrshtatshme\" src=\"\/wp-content\/uploads\/2020\/05\/97cfbf5daaa6678a9eecc3169692f0fc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si\u00e7 duket, sistemi \u00ebsht\u00eb komplikuar ndjesh\u00ebm. Tani nuk \u00ebsht\u00eb thjesht nj\u00eb mini-proces q\u00eb ruan skedar\u00ebt lokalisht. Tani nevojitet nj\u00eb mb\u00ebshtetje jo e thjesht\u00eb, kontrolli i versioneve t\u00eb API-s\u00eb etj. Prandaj, pasi t\u00eb gjitha diagramet t\u00eb jen\u00eb vizatuar, \u00ebsht\u00eb m\u00eb e mira t\u00eb vler\u00ebsohet n\u00eb detaje n\u00ebse ia vlen zgjerimi i kostove t\u00eb tilla. Megjithat\u00eb, n\u00ebse d\u00ebshironi t\u00eb keni mund\u00ebsi zgjerimi t\u00eb sistemit (p\u00ebrfshir\u00eb n\u00eb pun\u00ebn me nj\u00eb num\u00ebr t\u00eb madh p\u00ebrdoruesish), do t\u00eb duhet t\u00eb pranoni zgjidhje t\u00eb tilla. Por si rezultat, sistemi \u00ebsht\u00eb arkitektur\u00ebrisht i gatsh\u00ebm p\u00ebr rritjen e ngarkes\u00ebs (praktikisht \u00e7do komponent mund t\u00eb klonohet p\u00ebr skalim horizontal). Sistemi mund t\u00eb p\u00ebrmir\u00ebsohet pa u ndalur (thjesht disa operacione do t\u00eb ngadal\u00ebsohen paksa).<\/p>\n<p><\/p>\n<p>Si\u00e7 e thash\u00eb q\u00eb n\u00eb fillim, tani nj\u00eb s\u00ebr\u00eb sh\u00ebrbimesh interneti ka filluar t\u00eb p\u00ebrballet me ngarkesa n\u00eb rritje. Dhe disa prej tyre thjesht kan\u00eb filluar t\u00eb ndalojn\u00eb s\u00eb funksionuari si\u00e7 duhet. N\u00eb thelb, sistemet d\u00ebshtuan pik\u00ebrisht n\u00eb momentin kur biznesi duhet t\u00eb b\u00ebnte para. Dometh\u00ebn\u00eb, n\u00eb vend t\u00eb dor\u00ebzimit t\u00eb vonuar, n\u00eb vend t\u00eb ofrimit t\u00eb klient\u00ebve 'planifikoni dor\u00ebzimin p\u00ebr muajt e ardhsh\u00ebm', sistemi thjesht tha 'shkoni te konkurent\u00ebt'. Kjo \u00ebsht\u00eb \u00e7mimi i performanc\u00ebs t\u00eb ul\u00ebt: humbjet ndodhin pik\u00ebrisht n\u00eb at\u00eb moment kur fitimi do t\u00eb ishte m\u00eb i lart\u00eb.<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">P\u00ebrfundimi<\/h1>\n<p><\/p>\n<p>T\u00eb gjith\u00eb k\u00ebto qasje ishin t\u00eb njohura m\u00eb par\u00eb. Po ashtu VK ka p\u00ebrdorur prej koh\u00ebsh iden\u00eb e Static Content Hosting p\u00ebr t\u00eb shp\u00ebrndar\u00eb imazhe. Nj\u00eb s\u00ebr\u00eb loj\u00ebrash online p\u00ebrdorin skem\u00ebn e Sharding p\u00ebr ndarjen e lojtar\u00ebve sipas rajoneve ose p\u00ebr ndarjen e lokacioneve t\u00eb loj\u00ebs (n\u00ebse bota vet\u00eb \u00ebsht\u00eb e nj\u00ebjt\u00eb). Qasja Event Sourcing p\u00ebrdoret gjer\u00ebsisht n\u00eb post\u00ebn elektronike. Shumica e aplikacioneve t\u00eb tregtar\u00ebve, ku t\u00eb dh\u00ebnat vijn\u00eb vazhdimisht, jan\u00eb n\u00eb t\u00eb v\u00ebrtet\u00eb t\u00eb nd\u00ebrtuara sipas qasjes CQRS, p\u00ebr t\u00eb pasur mund\u00ebsi t\u00eb filtrohen t\u00eb dh\u00ebnat e marra. Po ashtu, skalimi horizontal \u00ebsht\u00eb aplikuar prej koh\u00ebsh n\u00eb shum\u00eb sh\u00ebrbime.<\/p>\n<p><\/p>\n<p>Megjithat\u00eb, ajo q\u00eb \u00ebsht\u00eb m\u00eb e r\u00ebnd\u00ebsishme, t\u00eb gjith\u00eb k\u00ebto modele jan\u00eb b\u00ebr\u00eb shum\u00eb t\u00eb lehta p\u00ebr t'u aplikuar n\u00eb aplikacionet moderne (n\u00ebse jan\u00eb t\u00eb vendosura si\u00e7 duhet, natyrisht). Reformat ofrojn\u00eb Sharding dhe skalim horizontal menj\u00ebher\u00eb, gj\u00eb q\u00eb \u00ebsht\u00eb shum\u00eb m\u00eb e leht\u00eb sesa t\u00eb porositni servera t\u00eb dedikuar n\u00eb qendra t\u00eb ndryshme t\u00eb t\u00eb dh\u00ebnave vet\u00eb. CQRS \u00ebsht\u00eb b\u00ebr\u00eb shum\u00eb m\u00eb e leht\u00eb, t\u00eb pakt\u00ebn p\u00ebr shkak t\u00eb zhvillimit t\u00eb librarive si RX. Dhjet\u00eb vjet m\u00eb par\u00eb, nj\u00eb faqe web-i e zakonshme do t\u00eb ishte e p\u00ebrballueshme ta mb\u00ebshteste k\u00ebt\u00eb. Event Sourcing gjithashtu konfigurohet jasht\u00ebzakonisht leht\u00eb fal\u00eb konteiner\u00ebve t\u00eb gatsh\u00ebm me Apache Kafka. Dhjet\u00eb vjet m\u00eb par\u00eb kjo do t\u00eb ishte nj\u00eb novacion, tani \u00ebsht\u00eb di\u00e7ka e zakonshme. Nj\u00ebsoj ndodh edhe me Static Content Hosting: p\u00ebr shkak t\u00eb teknologjive m\u00eb t\u00eb p\u00ebrshtatshme (duke p\u00ebrfshir\u00eb edhe dokumentacionin e detajuar dhe nj\u00eb baz\u00eb t\u00eb madhe p\u00ebr p\u00ebrgjigje), qasja ka b\u00ebr\u00eb akoma m\u00eb t\u00eb leht\u00eb.<\/p>\n<p><\/p>\n<p>Si p\u00ebrfundim, implementimi i disa modele t\u00eb nd\u00ebrlikuara arkitekturore tani \u00ebsht\u00eb b\u00ebr\u00eb shum\u00eb m\u00eb i leht\u00eb, prandaj \u00ebsht\u00eb m\u00eb mir\u00eb t'i kushtojm\u00eb v\u00ebmendje q\u00eb n\u00eb fillim. N\u00ebse n\u00eb nj\u00eb aplikacion nj\u00eb dekad\u00eb m\u00eb par\u00eb u hoq nj\u00eb nga zgjidhjet e m\u00ebsip\u00ebrme p\u00ebr shkak t\u00eb kostove t\u00eb larta t\u00eb implementimit dhe mir\u00ebmbajtjes, tani, n\u00eb aplikacionin e ri, ose pas nj\u00eb refaktorizimi, mund t\u00eb nd\u00ebrtohet nj\u00eb sh\u00ebrbim q\u00eb arkitekturally do t\u00eb jet\u00eb si i zgjeruesh\u00ebm (nga perspektiva e performanc\u00ebs), ashtu dhe i gatsh\u00ebm p\u00ebr k\u00ebrkesat e reja nga klient\u00ebt (p.sh., p\u00ebr lokalizimin e t\u00eb dh\u00ebnave personale).<\/p>\n<p><\/p>\n<p>Dhe m\u00eb e r\u00ebnd\u00ebsishmja: ju lutemi, mos i p\u00ebrdorni k\u00ebto qasje n\u00ebse keni nj\u00eb aplikacion t\u00eb thjesht\u00eb. Po, ato jan\u00eb t\u00eb bukura dhe interesante, megjithat\u00eb p\u00ebr nj\u00eb faqe t\u00eb vizit\u00ebs maksimale prej 100 njer\u00ebzish shpesh mund t\u00eb mjaftohemi me nj\u00eb monolit klasik (t\u00eb pakt\u00ebn nga jasht\u00eb, brenda gjith\u00e7ka mund t\u00eb ndahet n\u00eb modulet etj.).<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dbtc\/blog\/499758\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u0441\u0432\u0435\u0442\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u0437-\u0437\u0430 \u043a\u043e\u0440\u043e\u043d\u0430\u0432\u0438\u0440\u0443\u0441\u0430 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441\u0442\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0434\u043d\u0430 \u0438\u0437 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u0432 \u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430 \u0441\u0430\u0439\u0442 \u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u0437\u0430\u043a\u0430\u0437\u0430\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u0418 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u043e\u0434\u043d\u0430\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043e (\u0438\u043b\u0438 \u043e\u043d\u0438 \u0443\u0439\u0434\u0443\u0442 \u043a \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u0430\u043c). \u0412 \u044d\u0442\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80036,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80035","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=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u0441\u0432\u0435\u0442\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u0437-\u0437\u0430 \u043a\u043e\u0440\u043e\u043d\u0430\u0432\u0438\u0440\u0443\u0441\u0430 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441\u0442\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/udobnye-arhitekturnye-patterny\" \/>\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\u0423\u0434\u043e\u0431\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u0441\u0432\u0435\u0442\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u0437-\u0437\u0430 \u043a\u043e\u0440\u043e\u043d\u0430\u0432\u0438\u0440\u0443\u0441\u0430 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441\u0442\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/udobnye-arhitekturnye-patterny\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-02T11:42:54+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-02T11:42:54+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\udd47Modelet e reja arkitektonike | ProHoster","description":"P\u00ebrsh\u00ebndetje, Habr! N\u00eb drit\u00ebn e ngjarjeve aktuale p\u00ebr shkak t\u00eb coronavirusit, disa sh\u00ebrbime interneti kan\u00eb filluar t\u00eb p\u00ebrjetojn\u00eb nj\u00eb rritje t\u00eb ngarkes\u00ebs.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/udobnye-arhitekturnye-patterny","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\u0423\u0434\u043e\u0431\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u0441\u0432\u0435\u0442\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u0437-\u0437\u0430 \u043a\u043e\u0440\u043e\u043d\u0430\u0432\u0438\u0440\u0443\u0441\u0430 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441\u0442\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/udobnye-arhitekturnye-patterny","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-02T11:42:54+00:00","article:modified_time":"2020-05-02T11:42:54+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80035","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:26:40","updated":"2022-09-28 01:38:29","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\/80035","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=80035"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/80035\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/80036"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=80035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=80035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=80035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}