{"id":87372,"date":"2020-07-07T13:42:34","date_gmt":"2020-07-07T11:42:34","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye"},"modified":"2020-07-07T13:42:34","modified_gmt":"2020-07-07T11:42:34","slug":"walking-in-my-shoes-stop-a-oni-markirovannye","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye","title":{"rendered":"\"Walking in my shoes\" \u2014 ndal, por a jan\u00eb t\u00eb markuara ato?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Q\u00eb nga viti 2019, nj\u00eb ligj p\u00ebr etiketime t\u00eb detyrueshme \u00ebsht\u00eb n\u00eb fuqi n\u00eb Rusi. Ky ligj nuk zbatohet p\u00ebr t\u00eb gjitha grupet e Produkteve, dhe afatet p\u00ebr fillimin e etiketimeve t\u00eb detyrueshme p\u00ebr grupe t\u00eb ndryshme produktesh jan\u00eb t\u00eb ndryshme. T\u00eb par\u00ebt q\u00eb do t\u00eb p\u00ebrfshihen n\u00eb etiketim jan\u00eb duhani, k\u00ebpuc\u00ebt, ila\u00e7et, nd\u00ebrsa m\u00eb von\u00eb do t\u00eb shtohen edhe produkte t\u00eb tjera si parfumi, tekstili dhe qum\u00ebshti. Ky ndryshim ligjor ka nxitur zhvillimin e zgjidhjeve t\u00eb reja IT q\u00eb do t\u00eb mund\u00ebsojn\u00eb ndjekjen e gjith\u00eb zinxhirit t\u00eb jet\u00ebs s\u00eb produktit nga prodhimi deri te bler\u00ebsi p\u00ebrfundimtar, p\u00ebr t\u00eb gjith\u00eb pjes\u00ebmarr\u00ebsit e procesit: si vet\u00eb shteti, ashtu edhe t\u00eb gjitha organizatat q\u00eb shesin produkte me etiketim t\u00eb detyruesh\u00ebm.<\/p>\n<p>N\u00eb H5, sistemi q\u00eb do t\u00eb ndjek\u00eb produktet me etiketim dhe do t\u00eb shk\u00ebmbej\u00eb t\u00eb dh\u00ebna me shtetin dhe furnizuesit, u quajt \"Markus\". Do t\u00eb flasim rreth saj p\u00ebr rendin se si dhe kush e zhvilloi, \u00e7far\u00eb \u00ebsht\u00eb stack-u i saj teknologjik dhe pse kemi p\u00ebr t\u00eb qen\u00eb krenar\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"&quot;Walking in my shoes&quot; \u2014 ndal, por a jan\u00eb t\u00eb markuara ato?\" src=\"\/wp-content\/uploads\/2020\/07\/522382bab9b8d133f3657baea6175357.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>HighLoad i v\u00ebrtet\u00eb<\/h3>\n<p>\n\"Markus\" zgjidh shum\u00eb probleme, m\u00eb kryesorja \u00ebsht\u00eb nd\u00ebrveprimi integrues midis sistemeve informative t\u00eb H5 dhe sistemit informativ shtet\u00ebror p\u00ebr produktet e etiketuar (GIS MP) p\u00ebr ndjekjen e l\u00ebvizjes s\u00eb produkteve t\u00eb etiketuar. Gjithashtu, platforma ruan t\u00eb gjitha kodet e etiketimeve q\u00eb na kan\u00eb mb\u00ebrritur dhe gjith\u00eb historin\u00eb e l\u00ebvizjes s\u00eb k\u00ebtyre kodit p\u00ebr objekte, ndihmon n\u00eb eliminimin e gabimeve n\u00eb ndarjen e produkteve t\u00eb etiketuar. P\u00ebr shembull, p\u00ebr produktet e duhanit, t\u00eb cilat ishin n\u00eb grupet e para t\u00eb produkteve t\u00eb etiketuar, vet\u00ebm nj\u00eb kamion me cigare p\u00ebrmban rreth 600,000 pako, secila prej t\u00eb cilave ka kodin e saj unik. Dhe detyra e sistemit ton\u00eb \u00ebsht\u00eb t\u00eb ndjek\u00eb dhe t\u00eb verifikoj\u00eb ligjshm\u00ebrin\u00eb e l\u00ebvizjeve t\u00eb secil\u00ebs pako t\u00eb till\u00eb midis depo dhe dyqaneve, dhe p\u00ebrfundimisht t\u00eb verifikoj\u00eb lejueshm\u00ebrin\u00eb e shitjes s\u00eb tyre p\u00ebr bler\u00ebsin p\u00ebrfundimtar. Ne regjistrojm\u00eb rreth 125,000 operacione n\u00eb or\u00eb dhe gjithashtu duhet t\u00eb regjistrojm\u00eb si \u00e7do pako e till\u00eb ka mb\u00ebrritur n\u00eb dyqan. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, duke marr\u00eb parasysh t\u00eb gjitha l\u00ebvizjet midis objekteve, ne presim dhjet\u00ebra miliarda regjistrimesh n\u00eb vit.<\/p>\n<h3>Ekipa M<\/h3>\n<p>\nMegjith\u00ebse \"Markusi\" konsiderohet nj\u00eb projekt i H5, ai realizohet sipas nj\u00eb qasje produkti. Ekipi punon sipas metodologjis\u00eb Scrum. Projekti filloi ver\u00ebn e vitit t\u00eb kaluar, por rezultatet e para erdh\u00ebn vet\u00ebm n\u00eb tetor \u2014 u formua plot\u00ebsisht ekipi yn\u00eb, u zhvillua arkitektura e sistemit dhe u ble nj\u00eb pajisje. Tani ekipi p\u00ebrb\u00ebhet nga 16 persona, gjasht\u00eb prej t\u00eb cil\u00ebve punojn\u00eb n\u00eb zhvillimin backend dhe frontend, tre n\u00eb analiz\u00ebn sistematike. Testimin manual, ngarkes\u00ebn, testimin automatizuar dhe mb\u00ebshtetje produkti e kryejn\u00eb edhe gjasht\u00eb persona t\u00eb tjer\u00eb. P\u00ebrve\u00e7 k\u00ebsaj, kemi nj\u00eb specialist SRE. <\/p>\n<p>Kodi n\u00eb ekipin ton\u00eb nuk shkruhet vet\u00ebm nga zhvillues, pothuajse t\u00eb gjith\u00eb djemt\u00eb din\u00eb t\u00eb programojn\u00eb dhe shkruajn\u00eb teste automatike, skenare ngarkese dhe skenare automatizimi. Ne i kushtojm\u00eb shum\u00eb r\u00ebnd\u00ebsi k\u00ebsaj, pasi edhe mb\u00ebshtetje e produktit k\u00ebrkon nj\u00eb nivel t\u00eb lart\u00eb automatizimi. Koleg\u00ebt, t\u00eb cil\u00ebt nuk kan\u00eb programuar m\u00eb par\u00eb, gjithmon\u00eb p\u00ebrpiqemi t'u japim ndihm\u00eb dhe t'i mb\u00ebshtesim, duke u dh\u00ebn\u00eb disa detyra t\u00eb vogla.<\/p>\n<p>P\u00ebr shkak t\u00eb pandemis\u00eb s\u00eb infeksionit me koronavirus, ne e kemi kaluar t\u00eb gjith\u00eb ekipin n\u00eb pun\u00eb t\u00eb larg\u00ebt, disponimi i t\u00eb gjitha mjeteve p\u00ebr menaxhimin e zhvillimit, struktura e pun\u00ebs e nd\u00ebrtuar n\u00eb Jira dhe GitLab na lejuan t\u00eb kalojm\u00eb leht\u00ebsisht k\u00ebt\u00eb faz\u00eb. Muaj t\u00eb kaluar n\u00eb pun\u00eb t\u00eb larg\u00ebt treguan se produktiviteti i ekipit nuk u prek, p\u00ebr shum\u00eb nga ta komoditeti n\u00eb pun\u00eb u rrit, e vetmja gj\u00eb, na mungon komunikimi i drejtp\u00ebrdrejt\u00eb.<\/p>\n<h3>Takimi i ekipit para pun\u00ebs n\u00eb distanc\u00eb<\/h3>\n<p>\n<img decoding=\"async\" alt=\"&quot;Walking in my shoes&quot; \u2014 ndal, por a jan\u00eb t\u00eb markuara ato?\" src=\"\/wp-content\/uploads\/2020\/07\/c1095316fd5e3dcc147b3dd968013152.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Takimet gjat\u00eb pun\u00ebs n\u00eb distanc\u00eb<\/h3>\n<p>\n<img decoding=\"async\" alt=\"&quot;Walking in my shoes&quot; \u2014 ndal, por a jan\u00eb t\u00eb markuara ato?\" src=\"\/wp-content\/uploads\/2020\/07\/0c705ebbe28afbecd439c0ce2fcf04cb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Stoku teknologjik i zgjidhjes<\/h3>\n<p>\nRepo standard dhe mjeti CI\/CD p\u00ebr H5 \u00ebsht\u00eb GitLab. Ne e p\u00ebrdorim p\u00ebr ruajtjen e kodit, testimin e vazhduesh\u00ebm, dhe shp\u00ebrndarjen n\u00eb server\u00ebt testues dhe n\u00eb ata produktiv\u00eb. Po ashtu, ne p\u00ebrdorim praktik\u00ebn e review-it t\u00eb kodit, ku t\u00eb pakt\u00ebn dy koleg\u00eb duhet t\u00eb miratojn\u00eb ndryshimet q\u00eb zhvilluesi b\u00ebn n\u00eb kod. Analizuesit statik\u00eb t\u00eb kodit SonarQube dhe JaCoCo na ndihmojn\u00eb t\u00eb mbajm\u00eb kodin t\u00eb past\u00ebr dhe t\u00eb sigurojm\u00eb nivelin e k\u00ebrkuar t\u00eb mbulimit me teste unitare. T\u00eb gjitha ndryshimet n\u00eb kodin duhet t\u00eb kalojn\u00eb p\u00ebrmes k\u00ebtyre kontrollimeve. T\u00eb gjitha skenar\u00ebt e testeve, t\u00eb cil\u00ebt ekzekutohen manualisht, m\u00eb von\u00eb automatizohen.<\/p>\n<p>P\u00ebr t\u00eb realizuar me sukses proceset e biznesit me \"Markusin\", na u desh t\u00eb zgjidhnim nj\u00eb s\u00ebr\u00eb problemesh teknologjike, p\u00ebr secil\u00ebn nga t\u00eb cilat do t\u00eb flasim me radh\u00eb. <\/p>\n<p><b>Detyra 1. Nevoja p\u00ebr zgjerimin horizontal t\u00eb sistemit<\/b><\/p>\n<p>P\u00ebr t\u00eb zgjidhur k\u00ebt\u00eb detyr\u00eb, ne zgjodh\u00ebm qasjen mikrosherbimeve n\u00eb arkitektur\u00eb. N\u00eb k\u00ebt\u00eb kuad\u00ebr, ishte shum\u00eb e r\u00ebnd\u00ebsishme t\u00eb kuptohet fushat e p\u00ebrgjegj\u00ebsis\u00eb s\u00eb sh\u00ebrbimeve. Ne u p\u00ebrpoq\u00ebm t'i ndajm\u00eb ato sipas operacioneve t\u00eb biznesit duke marr\u00eb parasysh karakteristikat e proceseve. P\u00ebr shembull, pranimi n\u00eb magazin\u00eb \u00ebsht\u00eb nj\u00eb operacion jo shum\u00eb i shpesht\u00eb, por shum\u00eb i voluminsh\u00ebm, gjat\u00eb t\u00eb cilit duhet t\u00eb marrim sa m\u00eb shpejt informacionin nga autoriteti shtet\u00ebror p\u00ebr nj\u00ebsi t\u00eb pranuara t\u00eb mallrave, numri i t\u00eb cilave n\u00eb nj\u00eb d\u00ebrges\u00eb arrin deri n\u00eb 600,000, t\u00eb kontrollojm\u00eb lejueshm\u00ebrin\u00eb e pranimit t\u00eb k\u00ebtij malli n\u00eb magazin\u00eb dhe t\u00eb d\u00ebrgojm\u00eb t\u00eb gjitha informacionet e nevojshme n\u00eb sistemin e automatizimit t\u00eb magazin\u00ebs. Nd\u00ebrsa, d\u00ebrgesa nga magazinat ka nj\u00eb intensitet shum\u00eb m\u00eb t\u00eb madh, por operon me t\u00eb dh\u00ebna m\u00eb t\u00eb vogla. <\/p>\n<p>T\u00eb gjith\u00eb sh\u00ebrbimet i realizojm\u00eb sipas parimit stateless dhe madje p\u00ebrpiqemi t\u00eb ndajm\u00eb operacionet e brendshme n\u00eb hapa, duke p\u00ebrdorur, si\u00e7 i quajm\u00eb ne, self-temat Kafka. Kjo \u00ebsht\u00eb kur mikrosherbimi d\u00ebrgon nj\u00eb mesazh vetes, gj\u00eb q\u00eb lejon balancimin e ngarkes\u00ebs mbi operacionet m\u00eb burim\u00ebvne dhe thjesht\u00ebson mir\u00ebmbajtjen e produktit, por p\u00ebr k\u00ebt\u00eb m\u00eb von\u00eb. <\/p>\n<p>Ne vendos\u00ebm t'i ndajm\u00eb n\u00eb sh\u00ebrbime t\u00eb ve\u00e7anta modulet e nd\u00ebrveprimit me sistemet e jashtme. Kjo ndihmoi n\u00eb zgjidhjen e problemit t\u00eb API-ve t\u00eb jashtme q\u00eb shpesh ndryshojn\u00eb, pa ndonj\u00eb ndikim n\u00eb sh\u00ebrbimet me funksionalitetin e biznesit.<\/p>\n<p><img decoding=\"async\" alt=\"&quot;Walking in my shoes&quot; \u2014 ndal, por a jan\u00eb t\u00eb markuara ato?\" src=\"\/wp-content\/uploads\/2020\/07\/da1dc58791fa28e89e289528e0fd2550.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00eb gjith\u00eb mikrosherbimet zhvillohen n\u00eb klasterin OpenShift, i cili zgjidh si problemin e zgjerimit t\u00eb \u00e7do mikrosherbimi, ashtu edhe na lejon t\u00eb mos p\u00ebrdorim mjete t\u00eb jashtme t\u00eb Zbulimit t\u00eb Sh\u00ebrbimeve.<\/p>\n<p><b>Detyra 2. Nevoja p\u00ebr t\u00eb mbajtur nj\u00eb ngarkes\u00eb t\u00eb lart\u00eb dhe shk\u00ebmbim shum\u00eb intensiv t\u00eb t\u00eb dh\u00ebnave midis sh\u00ebrbimeve t\u00eb platform\u00ebs:<\/b> vet\u00ebm n\u00eb faz\u00ebn e nisjes s\u00eb projektit, kryhen rreth 600 operacione n\u00eb sekond\u00eb. Ne presim q\u00eb kjo vler\u00eb t\u00eb rritet deri n\u00eb 5000 op\/sec nd\u00ebrsa lidhim objektet tregtare me platform\u00ebn ton\u00eb.<\/p>\n<p>Kjo detyr\u00eb u zgjidh duke shp\u00ebrndar\u00eb nj\u00eb klaster Kafka dhe duke u hequr praktikisht nga nd\u00ebrveprimi sinkron mes mikrosh\u00ebrbimeve t\u00eb platform\u00ebs. Kjo k\u00ebrkon nj\u00eb analiz\u00eb shum\u00eb t\u00eb kujdesshme t\u00eb k\u00ebrkesave p\u00ebr sistemin, sepse jo t\u00eb gjitha operacionet mund t\u00eb jen\u00eb asinkrone. N\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, ne jo vet\u00ebm q\u00eb transferojm\u00eb ngjarje p\u00ebrmes brokerit, por gjithashtu transferojm\u00eb n\u00eb mesazh t\u00eb gjitha informacionet e nevojshme biznesore. Si rezultat, madh\u00ebsia e mesazhit mund t\u00eb arrij\u00eb deri n\u00eb disa qindra kilobajt. Kufizimi i madh\u00ebsis\u00eb s\u00eb mesazheve n\u00eb Kafka k\u00ebrkon q\u00eb ne t\u00eb parashikojm\u00eb sakt\u00ebsisht madh\u00ebsin\u00eb e mesazheve, dhe, n\u00ebse \u00ebsht\u00eb e nevojshme, i ndajm\u00eb ato, por ndarja \u00ebsht\u00eb logjike, e lidhur me operacionet e biznesit. <br \/>\nP\u00ebr shembull, produktin q\u00eb ka ardhur me makin\u00eb, ne e ndajm\u00eb sipas kutive. P\u00ebr operacionet sinkrone jan\u00eb rezervuar mikrosh\u00ebrbise t\u00eb ve\u00e7anta dhe b\u00ebhet testim i kujdessh\u00ebm i ngarkes\u00ebs. P\u00ebrdorimi i Kafka na vendosi p\u00ebrball\u00eb nj\u00eb sfide tjet\u00ebr - verifikimi i funksionimit t\u00eb sh\u00ebrbimit ton\u00eb me p\u00ebrfshirjen e Kafka b\u00ebn q\u00eb t\u00eb gjitha testet tona unit t\u00eb jen\u00eb asinkrone. K\u00ebt\u00eb detyr\u00eb e zgjidh\u00ebm duke shkruar metoda t\u00eb p\u00ebrdorura vet\u00eb me p\u00ebrdorimin e Embedded Kafka Broker. Kjo nuk p\u00ebrjashton nevoj\u00ebn p\u00ebr t\u00eb shkruar teste unit p\u00ebr metoda t\u00eb ve\u00e7anta, por ne preferojm\u00eb t\u00eb testojm\u00eb rastet e komplikuara duke p\u00ebrdorur Kafka.<\/p>\n<p>Kemi kushtuar shum\u00eb v\u00ebmendje gjurmimit t\u00eb log-ve, n\u00eb m\u00ebnyr\u00eb q\u00eb TraceId e tyre t\u00eb mos humbasin gjat\u00eb shfaqjes s\u00eb p\u00ebrjashtimeve gjat\u00eb pun\u00ebs s\u00eb sh\u00ebrbimeve ose gjat\u00eb pun\u00ebs me Kafka batch. Dhe n\u00ebse me rastin e par\u00eb nuk kishte ndonj\u00eb pyetje t\u00eb ve\u00e7ant\u00eb, p\u00ebr rastin e dyt\u00eb na nevojitet t\u00eb regjistrojm\u00eb n\u00eb log t\u00eb gjitha TraceId q\u00eb kan\u00eb ardhur me batch-in dhe t\u00eb zgjedhim nj\u00eb p\u00ebr t\u00eb vazhduar gjurmimin. At\u00ebher\u00eb, kur k\u00ebrkon me TraceId fillestar, p\u00ebrdoruesi do t\u00eb zbuloj\u00eb leht\u00ebsisht me cilin ka vazhduar gjurmimi.<\/p>\n<p><b>Detyra 3. Nevoja p\u00ebr t\u00eb ruajtur nj\u00eb sasi t\u00eb madhe t\u00eb t\u00eb dh\u00ebnave: <\/b> m\u00eb shum\u00eb se 1 miliard etiketash n\u00eb vit vet\u00ebm p\u00ebr duhanin arrijn\u00eb n\u00eb X5. K\u00ebto k\u00ebrkojn\u00eb akses t\u00eb vazhduesh\u00ebm dhe t\u00eb shpejt\u00eb. P\u00ebrgjith\u00ebsisht sistemi duhet t\u00eb p\u00ebrpunoj\u00eb rreth 10 miliard\u00eb regjistrime p\u00ebr historin\u00eb e l\u00ebvizjes s\u00eb t\u00eb dh\u00ebnave t\u00eb produkteve t\u00eb etiketuar.<\/p>\n<p>P\u00ebr zgjidhjen e detyr\u00ebs s\u00eb tret\u00eb u zgjodh databaza NoSQL MongoDB. Ne kemi nd\u00ebrtuar nj\u00eb shard prej 5 nodash dhe n\u00eb \u00e7do nod ka nj\u00eb Replica Set prej 3 server\u00ebsh. Kjo lejon q\u00eb sistemi t\u00eb shkallzohet horizontalisht, duke shtuar <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sq\/server\/\"   title=\"servera t\u00eb rinj\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"781\">servera t\u00eb rinj<\/a> n\u00eb grupin, dhe t\u00eb siguroj\u00eb q\u00eb ajo t\u00eb jet\u00eb e q\u00ebndrueshme. K\u00ebtu u p\u00ebrball\u00ebm me nj\u00eb problem tjet\u00ebr \u2014 sigurimin e transaksionit n\u00eb grupin mongo, duke marr\u00eb parasysh p\u00ebrdorimin e mikros\u00ebrvices horizontalisht t\u00eb shkall\u00ebzuar. P\u00ebr shembull, nj\u00eb nga detyrat e sistemit ton\u00eb \u00ebsht\u00eb t\u00eb identifikoj\u00eb p\u00ebrpjekjet e rip\u00ebrs\u00ebritjes s\u00eb shitjes s\u00eb artikujve me kode t\u00eb nj\u00ebjta markimi. K\u00ebtu shfaqen ngat\u00ebrrime me skanime t\u00eb gabuara ose me veprime t\u00eb gabuara nga kas\u00ebtar\u00ebt. Zbuluam se k\u00ebto dublika mund t\u00eb lindin si brenda nj\u00eb batch t\u00eb p\u00ebrpunuar nga Kafka, ashtu edhe brenda dy batch-eve q\u00eb p\u00ebrpunohen paralelisht. K\u00ebshtu q\u00eb kontrolli p\u00ebr shfaqjen e dublikeve p\u00ebrmes k\u00ebrkes\u00ebs n\u00eb baz\u00eb nuk jepte asnj\u00eb rezultat. P\u00ebr secilin nga mikros\u00ebrvices, ne e zgjidh\u00ebm problemin ve\u00e7mas, duke u bazuar n\u00eb logjik\u00ebn e biznesit t\u00eb k\u00ebtij sh\u00ebrbimi. P\u00ebr shembuj, p\u00ebr \u00e7ek\u00ebt shtuam nj\u00eb kontroll brenda batch dhe nj\u00eb p\u00ebrpunim t\u00eb ve\u00e7ant\u00eb p\u00ebr shfaqjen e dublikeve gjat\u00eb inserimit. <\/p>\n<p>P\u00ebr t\u00eb siguruar q\u00eb puna e p\u00ebrdoruesve me historin\u00eb e operacioneve t\u00eb mos ndikonte n\u00eb m\u00eb t\u00eb r\u00ebnd\u00ebsishmen \u2014 funksionimin e proceseve tona biznesore, t\u00eb gjitha t\u00eb dh\u00ebnat historike i kemi dedikuar nj\u00eb sh\u00ebrbimi t\u00eb ve\u00e7ant\u00eb me nj\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb ve\u00e7ant\u00eb, e cila gjithashtu merr informacion p\u00ebrmes Kafka. K\u00ebshtu, p\u00ebrdoruesit punojn\u00eb me nj\u00eb sh\u00ebrbim t\u00eb izoluar, pa ndikuar n\u00eb sh\u00ebrbimet q\u00eb p\u00ebrpunojn\u00eb t\u00eb dh\u00ebnat p\u00ebr operacionet aktuale.<\/p>\n<p><b>Detyra 4. Riprocesimi i radh\u00ebve dhe monitorimi:<\/b><\/p>\n<p>N\u00eb sistemet e shp\u00ebrndara, problemet dhe gabimet e disponueshm\u00ebris\u00eb s\u00eb bazave t\u00eb t\u00eb dh\u00ebnave, radh\u00ebve dhe burimeve t\u00eb jashtme t\u00eb t\u00eb dh\u00ebnave jan\u00eb t\u00eb pashmangshme. N\u00eb rastin e 'Markus', burimi i k\u00ebtyre gabimeve \u00ebsht\u00eb integrimi me sistemet e jashtme. Duhej t\u00eb gjenim nj\u00eb zgjidhje q\u00eb t\u00eb lejonte kryerjen e k\u00ebrkesave t\u00eb rip\u00ebrs\u00ebritura p\u00ebr p\u00ebrgjigje t\u00eb gabuar me nj\u00eb periudh\u00eb t\u00eb caktuar kohore, por pa ndalur p\u00ebrpunimin e k\u00ebrkesave t\u00eb suksesshme n\u00eb radh\u00ebn kryesore. P\u00ebr k\u00ebt\u00eb, u zgjodh koncepti i quajtur \u201criprocesimi i bazuar n\u00eb tema\u201d. P\u00ebr secil\u00ebn tem\u00eb kryesore krijohet nj\u00eb ose disa tema rytrye, n\u00eb t\u00eb cilat d\u00ebrgohen mesazhet e gabuar dhe p\u00ebr k\u00ebt\u00eb arsye p\u00ebrjashtohet vonesa n\u00eb p\u00ebrpunimin e mesazheve nga tema kryesore. Schemi i nd\u00ebrveprimit \u2014 <\/p>\n<p><img decoding=\"async\" alt=\"&quot;Walking in my shoes&quot; \u2014 ndal, por a jan\u00eb t\u00eb markuara ato?\" src=\"\/wp-content\/uploads\/2020\/07\/922b3107d183312312713c213488fbe1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00ebr realizimin e nj\u00eb skeme t\u00eb till\u00eb na duhej t\u00eb integrojm\u00eb k\u00ebt\u00eb zgjidhje me Spring dhe t\u00eb shmangim riprodhimin e kodit. N\u00eb hap\u00ebsir\u00ebn e internetit ne u ndesh\u00ebm me nj\u00eb zgjidhje t\u00eb ngjashme, t\u00eb bazuar n\u00eb Spring BeanPostProcessor, por na dukej tejet e nd\u00ebrlikuar. Ekipi yn\u00eb zhvilloi nj\u00eb zgjidhje m\u00eb t\u00eb thjesht\u00eb, q\u00eb lejon t\u00eb integrohet n\u00eb ciklin Spring p\u00ebr krijimin e konsumator\u00ebve dhe p\u00ebr t\u00eb shtuar konsumator\u00eb me Retry. Prototipi i zgjidhjes son\u00eb u propozua ekipit t\u00eb Spring, dhe mund t\u00eb shihet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spring-projects\/spring-kafka\/issues\/1229\">k\u00ebtu<\/a><\/noindex>. Numri i konsumator\u00ebve me Retry dhe numri i p\u00ebrpjekjeve t\u00eb \u00e7do konsumatori konfigurohen p\u00ebrmes paramet\u00ebrve, n\u00eb var\u00ebsi t\u00eb nevojave t\u00eb procesit t\u00eb biznesit, dhe, q\u00eb gjith\u00e7ka t\u00eb funksionoj\u00eb, mbetet vet\u00ebm t\u00eb vendoset annotacioni i njohur p\u00ebr t\u00eb gjith\u00eb zhvilluesit e Spring: org.springframework.kafka.annotation.KafkaListener.<\/p>\n<p>N\u00eb rast se mesazhi nuk mund t\u00eb p\u00ebrpunohet pas t\u00eb gjitha p\u00ebrpjekjeve p\u00ebr riprovim, ai kalon n\u00eb DLT (dead letter topic) me ndihm\u00ebn e Spring DeadLetterPublishingRecoverer. N\u00eb k\u00ebrkes\u00ebn e mb\u00ebshtetjes, ne e zgjeruam k\u00ebt\u00eb funksionalitet dhe zhvilluam nj\u00eb sh\u00ebrbim t\u00eb ve\u00e7ant\u00eb q\u00eb lejon t\u00eb shikohen mesazhet q\u00eb kan\u00eb p\u00ebrfunduar n\u00eb DLT, stackTrace, traceId dhe informacione t\u00eb tjera t\u00eb dobishme p\u00ebr to. P\u00ebrve\u00e7 k\u00ebsaj, u shtuan monitorime dhe alarme p\u00ebr t\u00eb gjitha temat DLT, dhe tani, n\u00eb thelb, shfaqja e nj\u00eb mesazhi n\u00eb tem\u00ebn DLT \u00ebsht\u00eb nj\u00eb shkak p\u00ebr hetim dhe krijimin e nj\u00eb defekti. Kjo \u00ebsht\u00eb shum\u00eb e p\u00ebrshtatshme - nga emri i tem\u00ebs ne menj\u00ebher\u00eb kuptojm\u00eb se n\u00eb cilin hap t\u00eb procesit ka ndodhur problemi, q\u00eb e p\u00ebrshpejton ndjesh\u00ebm gjetjen e shkakut t\u00eb saj rr\u00ebnj\u00ebsor.<\/p>\n<p><img decoding=\"async\" alt=\"&quot;Walking in my shoes&quot; \u2014 ndal, por a jan\u00eb t\u00eb markuara ato?\" src=\"\/wp-content\/uploads\/2020\/07\/ba1110bf1c93249c73dd76c490f1d7aa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPak koh\u00eb m\u00eb par\u00eb ne realizuam nj\u00eb nd\u00ebrfaqe q\u00eb lejon t\u00eb d\u00ebrgohen p\u00ebrs\u00ebri mesazhet nga mb\u00ebshtetja jon\u00eb, pas zgjidhjes s\u00eb shkakut t\u00eb tyre (p\u00ebr shembull, rikthimi i funksionimit t\u00eb sistemit t\u00eb jasht\u00ebm) dhe, sigurisht, krijimin e nj\u00eb defekti p\u00ebr analiz\u00eb. K\u00ebtu na erdh\u00ebn n\u00eb ndihm\u00eb self-temat tona, p\u00ebr t\u00eb mos e rifilluar nj\u00eb varg t\u00eb gjat\u00eb procesimi, mund t\u00eb rifillojm\u00eb nga hapi i k\u00ebrkuar. <\/p>\n<p><img decoding=\"async\" alt=\"&quot;Walking in my shoes&quot; \u2014 ndal, por a jan\u00eb t\u00eb markuara ato?\" src=\"\/wp-content\/uploads\/2020\/07\/78c7831131808732b74b27f055b60d54.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Ekspluatimi i platform\u00ebs<\/h3>\n<p>\nPlani tashm\u00eb \u00ebsht\u00eb n\u00eb p\u00ebrdorim produktiv, \u00e7do dit\u00eb ne realizojm\u00eb d\u00ebrgesa dhe shp\u00ebrndarje, lidhim qendra t\u00eb reja shp\u00ebrndarjeje dhe dyqane. N\u00eb kuad\u00ebr t\u00eb pilotit, sistemi punon me grupe produktesh 'T\u00ebnd' dhe 'K\u00ebpuc\u00eb'. <\/p>\n<p>E gjith\u00eb ekipi yn\u00eb merr pjes\u00eb n\u00eb realizimin e pilot\u00ebve, analizon problemet q\u00eb lindin dhe propozon p\u00ebrmir\u00ebsime p\u00ebr produktin ton\u00eb nga p\u00ebrmir\u00ebsimi i logeve deri te ndryshimet n\u00eb procese. <\/p>\n<p>P\u00ebr t\u00eb shmangur p\u00ebrs\u00ebritjen e gabimeve t\u00eb mia, t\u00eb gjitha rastet e gjetura gjat\u00eb pilotit pasqyrohen n\u00eb testet e automatizuara. Prania e nj\u00eb numri t\u00eb madh t\u00eb testeve automatike dhe testeve t\u00eb nj\u00ebsi lejon kryerjen e testimeve regresive dhe vendosjen e hotfix-eve n\u00eb vet\u00ebm disa or\u00eb.<\/p>\n<p>Aktualisht ne po vazhdojm\u00eb t\u00eb zhvillojm\u00eb dhe p\u00ebrmir\u00ebsojm\u00eb platform\u00ebn ton\u00eb dhe p\u00ebrballemi vazhdimisht me sfida t\u00eb reja. N\u00ebse jeni t\u00eb interesuar, ne do t\u00eb flasim p\u00ebr zgjidhjet tona n\u00eb artikujt e ardhsh\u00ebm.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/509714\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421 2019 \u0433\u043e\u0434\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u043a\u043e\u043d \u043e\u0431 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0435. \u0417\u0430\u043a\u043e\u043d \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u0438 \u0441\u0440\u043e\u043a\u0438 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u043b\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u043e\u0432\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0440\u0430\u0437\u043d\u044b\u0435. \u041f\u0435\u0440\u0432\u044b\u043c\u0438 \u043f\u043e\u0434 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0442\u0430\u0431\u0430\u043a, \u043e\u0431\u0443\u0432\u044c, \u043b\u0435\u043a\u0430\u0440\u0441\u0442\u0432\u0430, \u043f\u043e\u0437\u0434\u043d\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0443\u0445\u0438, \u0442\u0435\u043a\u0441\u0442\u0438\u043b\u044c, \u043c\u043e\u043b\u043e\u043a\u043e. \u042d\u0442\u043e \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0431\u0443\u0434\u0438\u043b\u043e \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u043e\u0432\u044b\u0445 \u0418\u0422-\u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87373,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87372","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421 2019 \u0433\u043e\u0434\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u043a\u043e\u043d \u043e\u0431 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0435. \u0417\u0430\u043a\u043e\u043d \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u0438 \u0441\u0440\u043e\u043a\u0438 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u043b\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u043e\u0432\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0440\u0430\u0437\u043d\u044b\u0435.\" \/>\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\/walking-in-my-shoes-stop-a-oni-markirovannye\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u00abWalking in my shoes\u00bb \u2014 \u0441\u0442\u043e\u043f, \u0430 \u043e\u043d\u0438 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421 2019 \u0433\u043e\u0434\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u043a\u043e\u043d \u043e\u0431 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0435. \u0417\u0430\u043a\u043e\u043d \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u0438 \u0441\u0440\u043e\u043a\u0438 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u043b\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u043e\u0432\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0440\u0430\u0437\u043d\u044b\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye\" \/>\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-07-07T11:42:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-07T11:42:34+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\udd47\u00abDuke ecur n\u00eb k\u00ebpuc\u00ebt e mia\u00bb \u2014 ndal, a jan\u00eb ato t\u00eb markuara? | ProHoster","description":"Q\u00eb nga viti 2019, n\u00eb Rusi \u00ebsht\u00eb n\u00eb fuqi ligji p\u00ebr markimin e obliguesh\u00ebm. Ligji nuk zbaton p\u00ebr t\u00eb gjitha grupet e mallrave dhe afatet e hyrjes n\u00eb fuqi t\u00eb markimit t\u00eb obliguesh\u00ebm p\u00ebr grupe t\u00eb ndryshme mallrash jan\u00eb t\u00eb ndryshme.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye","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\u00abWalking in my shoes\u00bb \u2014 \u0441\u0442\u043e\u043f, \u0430 \u043e\u043d\u0438 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435? | ProHoster","og:description":"\u0421 2019 \u0433\u043e\u0434\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u043a\u043e\u043d \u043e\u0431 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0435. \u0417\u0430\u043a\u043e\u043d \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u0438 \u0441\u0440\u043e\u043a\u0438 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u043b\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u043e\u0432\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0440\u0430\u0437\u043d\u044b\u0435.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye","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-07-07T11:42:34+00:00","article:modified_time":"2020-07-07T11:42:34+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87372","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 13:52:22","updated":"2026-02-08 20:33:48","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\/87372","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=87372"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/87372\/revisions"}],"predecessor-version":[{"id":157972,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/87372\/revisions\/157972"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/87373"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=87372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=87372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=87372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}