{"id":52113,"date":"2019-11-01T00:00:00","date_gmt":"2019-10-31T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik"},"modified":"2020-02-18T13:59:47","modified_gmt":"2020-02-18T10:59:47","slug":"bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik","title":{"rendered":"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Pra ndaj, po mbledhni metrika. Ashtu si ne. Edhe ne mbledhim metrika. Sigurisht, ato t\u00eb nevojshme p\u00ebr biznesin. Sot do t\u00eb flasim p\u00ebr lidhjen e par\u00eb t\u00eb sistemit ton\u00eb t\u00eb monitorimit - nj\u00eb server agregimi i p\u00ebrputhsh\u00ebm me statsd. <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2Noxg1M\">bioyino<\/a><\/noindex>, p\u00ebrse e shkruam dhe pse u t\u00ebrhoq\u00ebm nga brubeck. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/312c9a706828acc65f638a6a8abfc5b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Nga artikujt tan\u00eb t\u00eb m\u00ebparsh\u00ebm (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/avito\/blog\/335410\/\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/avito\/blog\/343928\/\">2<\/a><\/noindex>) mund t\u00eb m\u00ebsoni se deri n\u00eb nj\u00eb moment t\u00eb caktuar ne i mbledhim etiketat p\u00ebrmes <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\">brubeck<\/a><\/noindex>. Ai \u00ebsht\u00eb shkruar n\u00eb C. N\u00eb aspektin e kodit - \u00ebsht\u00eb aq i thjesht\u00eb sa nj\u00eb korke (kjo \u00ebsht\u00eb e r\u00ebnd\u00ebsishme kur doni t\u00eb kontribuoni) dhe, m\u00eb e r\u00ebnd\u00ebsishmja, p\u00ebrballon pa ndonj\u00eb problem volumin ton\u00eb deri n\u00eb 2 milion metrika n\u00eb sekond\u00eb (MPS) n\u00eb pik\u00eb. Dokumentacioni pret 4 milion MPS me yll. Kjo do t\u00eb thot\u00eb se do t\u00eb merrni numrin e deklaruar, n\u00ebse e konfiguroni n\u00eb m\u00ebnyr\u00eb t\u00eb duhur rrjetin n\u00eb Linux. (Sa MPS mund t\u00eb merrni, n\u00ebse e l\u00eb ne web si\u00e7 \u00ebsht\u00eb, nuk e dim\u00eb). Pavar\u00ebsisht k\u00ebtyre avantazheve, kishim disa ankesat serioze p\u00ebr brubeck.<\/p>\n<p><\/p>\n<p><em>Ankesa 1.<\/em> Github - zhvilluesi i projektit - ka ndaluar mb\u00ebshtetje: nuk publikojn\u00eb patches e fiksimeve, nuk pranojn\u00eb PR-t\u00eb tona (e as t\u00eb tjer\u00ebve). N\u00eb muajt e fundit (diku q\u00eb nga shkurti-marsi 2018) aktiviteti u rikthye, por para k\u00ebsaj kishte pothuajse 2 vjet qet\u00ebsi totale. P\u00ebr m\u00eb tep\u00ebr, projekti \u00ebsht\u00eb zhvilluar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\/pull\/31#issuecomment-325907734\">p\u00ebr nevojat e brendshme t\u00eb GitHub-it<\/a><\/noindex>, q\u00eb mund t\u00eb b\u00ebhet nj\u00eb penges\u00eb serioze p\u00ebr implementimin e mund\u00ebsive t\u00eb reja.<\/p>\n<p><\/p>\n<p><em>Ankesa 2.<\/em> Sakt\u00ebsia e llogaritjeve. Brubeck mbledh vet\u00ebm 65536 vlera p\u00ebr agregim. N\u00eb rastin ton\u00eb, p\u00ebr disa metrika gjat\u00eb periudh\u00ebs s\u00eb agregimit (30 sekonda) mund t\u00eb vijn\u00eb shum\u00eb m\u00eb tep\u00ebr vlera (1,527,392 n\u00eb pik\u00eb). Si rezultat i k\u00ebtij sampling, vlerat e maksimumeve dhe minimumeve duken t\u00eb pa dobishme. P\u00ebr shembull, ashtu si kjo: <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/4222a1a7d1e127137220595241f5276c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Si\u00e7 ishte<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/c8f0025c61f708584328ea30aacf7bc0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Si duhet t\u00eb ishte<\/em><\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb nj\u00ebjtat arsye, shumat gjithashtu llogariten n\u00eb m\u00ebnyr\u00eb t\u00eb pasakt\u00eb. Shtoni k\u00ebtu nj\u00eb bug me mbingarkes\u00ebn e float-it 32-bit, q\u00eb e \u00e7on serverin n\u00eb segfault kur merr nj\u00eb metrik\u00eb q\u00eb duket harbuar, dhe b\u00ebhet shum\u00eb mir\u00eb. Bug-u, p\u00ebr m\u00eb tep\u00ebr, nuk \u00ebsht\u00eb rregulluar ende.<\/p>\n<p><\/p>\n<p>Dhe, p\u00ebrfundimisht, <em>Ankesa X<\/em>. N\u00eb momentin e shkruar t\u00eb artikullit, jemi t\u00eb gatsh\u00ebm ta paraqesim at\u00eb t\u00eb gjith\u00eb 14 implementimeve m\u00eb se pak funksionale t\u00eb statsd, q\u00eb kemi arritur t\u00eb gjejm\u00eb. Le t\u00eb supozojm\u00eb se nj\u00eb infrastruktur\u00eb e ve\u00e7ant\u00eb \u00ebsht\u00eb rritur aq shum\u00eb, sa t\u00eb pranoj\u00eb 4 milion MPS tashm\u00eb nuk \u00ebsht\u00eb e mjaftueshme. Ose le t\u00eb themi se ende nuk \u00ebsht\u00eb rritur, por metrikat p\u00ebr ju jan\u00eb aq t\u00eb r\u00ebnd\u00ebsishme saq\u00eb madje edhe humbjet e shkurtra, 2-3 minuta, n\u00eb grafikun tuaj mund t\u00eb b\u00ebhen kritike dhe t\u00eb shkaktojn\u00eb episode t\u00eb pa kontrolluara depresioni nd\u00ebr menaxher\u00eb. Duke ditur se trajtimi i depresionit \u00ebsht\u00eb nj\u00eb pun\u00eb e par\u00ebnd\u00ebsishme, nevojiten zgjidhje teknike.<\/p>\n<p><\/p>\n<p>S\u00eb pari, q\u00ebndrueshm\u00ebria, q\u00eb ndonj\u00eb problem i papritur n\u00eb server t\u00eb mos shkaktoj\u00eb nj\u00eb apokalips t\u00eb zombi psikiatrik n\u00eb zyr\u00eb. S\u00eb dyti, shkall\u00ebzimi, p\u00ebr t\u00eb pasur mund\u00ebsi t\u00eb pranojm\u00eb m\u00eb shum\u00eb se 4 milion MPS, pa nxjerr\u00eb n\u00eb pah thell\u00ebsit\u00eb e shtresave t\u00eb rrjetit n\u00eb Linux dhe duke u rritur pa stres \"n\u00eb gjer\u00ebsi\" deri n\u00eb p\u00ebrmasat e nevojshme.<\/p>\n<p><\/p>\n<p>Duke pasur parasysh se kishim rezerva p\u00ebr shkall\u00ebzim, vendos\u00ebm t\u00eb fillojm\u00eb nga q\u00ebndrueshm\u00ebria. \"O! Q\u00ebndrueshm\u00ebria! Kjo \u00ebsht\u00eb e thjesht\u00eb, ne e dim\u00eb k\u00ebt\u00eb,\" menduam ne dhe ngrit\u00ebm 2 server\u00eb, duke ngjitur n\u00eb secilin nj\u00eb kopje t\u00eb brubeck. P\u00ebr k\u00ebt\u00eb, na duhej t\u00eb kopjonim trafikun me metrika n\u00eb t\u00eb dy server\u00ebt dhe madje t\u00eb shkruajm\u00eb p\u00ebr k\u00ebt\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Albibek\/udpdup\">nj\u00eb utilitar t\u00eb vog\u00ebl<\/a><\/noindex>. Problemin e q\u00ebndrueshm\u00ebris\u00eb e zgjidh\u00ebm, por... jo shum\u00eb mir\u00eb. Fillimisht gjith\u00e7ka dukej mjaft mir\u00eb: \u00e7do brubeck mbledh versionin e tij t\u00eb agregimit, shkruan t\u00eb dh\u00ebnat n\u00eb Graphite \u00e7do 30 sekonda, duke rip\u00ebrs\u00ebritur intervalin e vjet\u00ebr (kjo b\u00ebhet n\u00eb an\u00ebn e Graphite). N\u00ebse ndonj\u00ebher\u00eb nj\u00eb server d\u00ebshtoi, gjithmon\u00eb kemi nj\u00eb t\u00eb dyt\u00eb me nj\u00eb kopje t\u00eb dh\u00ebnash t\u00eb agreguara. Por problemi \u00ebsht\u00eb: n\u00ebse serveri d\u00ebshton, grafiku merr \"saw\". Kjo \u00ebsht\u00eb e lidhur me faktin se intervalet 30-sekond\u00ebshe n\u00eb brubeck nuk jan\u00eb t\u00eb sinkronizuara, dhe n\u00eb momentin e r\u00ebnies, nj\u00ebra prej tyre nuk rip\u00ebrs\u00ebritet. N\u00eb momentin e nisjes s\u00eb serverit t\u00eb dyt\u00eb ndodh po e nj\u00ebjta gj\u00eb. Plot\u00ebsisht e tolerueshme, por d\u00ebshirojm\u00eb m\u00eb mir\u00eb! Problemi i shkall\u00ebzimit gjithashtu nuk ka zhdukur. T\u00eb gjitha metrikat p\u00ebrs\u00ebri \"fluturojn\u00eb\" n\u00eb nj\u00eb server t\u00eb vet\u00ebm, dhe k\u00ebshtu ne jemi t\u00eb kufizuar nga ato t\u00eb nj\u00ebjtat 2-4 milion MPS n\u00eb var\u00ebsi t\u00eb kapacitetit t\u00eb rrjetit.<\/p>\n<p><\/p>\n<p>N\u00ebse mendoni pak rreth problemit dhe nj\u00ebkoh\u00ebsisht koponi pak bor\u00ebn me lopat\u00eb, nj\u00eb ide e till\u00eb duket e qart\u00eb: na nevojitet nj\u00eb statsd q\u00eb di t\u00eb punoj\u00eb n\u00eb m\u00ebnyr\u00eb t\u00eb shp\u00ebrndar\u00eb. Dometh\u00ebn\u00eb, nj\u00eb q\u00eb implementon sinkronizimin midis node-ve sipas koh\u00ebs dhe metrikave. \"Sigurisht, nj\u00eb zgjidhje e till\u00eb ekziston\" - tham\u00eb ne dhe filluam t\u00eb k\u00ebrkojm\u00eb... Dhe nuk gjet\u00ebm asgj\u00eb. Duke shqyrtuar dokumentacionin p\u00ebr statsd t\u00eb ndrysh\u00ebm (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etsy\/statsd\/wiki#server-implementations\">https:\/\/github.com\/etsy\/statsd\/wiki#server-implementations<\/a><\/noindex> N\u00eb momentin 11.12.2017, ne nuk gjet\u00ebm asgj\u00eb. M\u00eb duket se as zhvilluesit, as p\u00ebrdoruesit e k\u00ebtyre zgjidhjeve me KAQ shum\u00eb metrika nuk kan\u00eb p\u00ebrballuar akoma, p\u00ebrndryshe do t\u00eb kishin shpikur ndonj\u00eb gj\u00eb.<\/p>\n<p><\/p>\n<p>Dhe k\u00ebtu na kujtohet statsd-i \"lojtari\" \u2014 bioyino, i cili u shkrua n\u00eb hackathon vet\u00ebm p\u00ebr arg\u00ebtim (emri i projektit u gjenerua nga nj\u00eb skenar para fillimit t\u00eb hackathon-it) dhe e kuptuam se na duhej nj\u00eb statsd i vet. Pse?<\/p>\n<p><\/p>\n<ul>\n<li>sepse n\u00eb bot\u00eb ka shum\u00eb pak klon\u00eb t\u00eb statsd,<\/li>\n<li>sepse mund t\u00eb sigurojm\u00eb disponueshm\u00ebri dhe shkall\u00ebzim t\u00eb d\u00ebshiruar ose t\u00eb ngjash\u00ebm (p\u00ebrfshir\u00eb sinqronizimin e metrikave t\u00eb agreguara midis server\u00ebve dhe zgjidhjen e problemeve t\u00eb konflikteve gjat\u00eb d\u00ebrgimit),<\/li>\n<li>sepse mund t\u00eb llogarisim metrikat m\u00eb sakt\u00eb se sa e b\u00ebn brubeck,<\/li>\n<li>sepse mund t\u00eb mbledhim statistika m\u00eb t\u00eb detajuara, t\u00eb cilat brubeck nuk na i siguronte pothuajse fare,<\/li>\n<li>sepse na u dha mund\u00ebsia t\u00eb programojm\u00eb aplikacionin ton\u00eb t\u00eb hiperperformanc\u00ebs, i cili nuk do t\u00eb p\u00ebrs\u00ebris\u00eb plot\u00ebsisht arkitektur\u00ebn e nj\u00eb aplikacioni tjet\u00ebr t\u00eb till\u00eb t\u00eb hiperperformanc\u00ebs. <\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00eb \u00e7far\u00eb duhet ta shkruajm\u00eb? Sigurisht n\u00eb Rust. Pse?<\/p>\n<p><\/p>\n<ul>\n<li>sepse tashm\u00eb kishte nj\u00eb prototip zgjidhjeje,<\/li>\n<li>sepse autori i artikullit n\u00eb at\u00eb koh\u00eb tashm\u00eb dinte Rust dhe donte t\u00eb shkruante di\u00e7ka p\u00ebr prodhim me mund\u00ebsin\u00eb p\u00ebr ta publikuar at\u00eb n\u00eb open-source,<\/li>\n<li>sepse gjuh\u00ebt me GC nuk na p\u00ebrshtaten p\u00ebr shkak t\u00eb natyr\u00ebs s\u00eb trafikut q\u00eb marrim (praktiisht realtime) dhe pauzat e GC jan\u00eb praktikisht t\u00eb papranueshme, <\/li>\n<li>sepse na nevojitet performanc\u00eb maksimale, t\u00eb krahasueshme me C<\/li>\n<li>sepse Rust na ofron koncurrenc\u00eb pa frik\u00eb, dhe n\u00ebse do t\u2019i fillonim ta shkruanim k\u00ebt\u00eb n\u00eb C\/C++, do t\u00eb p\u00ebrballeshim me edhe m\u00eb shum\u00eb, sesa me brubeck, dob\u00ebsi, mbingarkime bufer\u00ebsh, kushte garancie dhe fjal\u00eb t\u00eb tjera t\u00eb frikshme.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ishte gjithashtu nj\u00eb argument kund\u00ebr Rust. Kompania nuk kishte p\u00ebrvoj\u00eb n\u00eb krijimin e projekteve n\u00eb Rust, dhe tani ne gjithashtu nuk planifikojm\u00eb ta p\u00ebrdorim at\u00eb n\u00eb projektin ton\u00eb kryesor. Prandaj, kishte shqet\u00ebsime t\u00eb konsiderueshme se nuk do t\u00eb arrinim asgj\u00eb, por vendos\u00ebm t\u00eb rrezikojm\u00eb dhe t\u00eb provojm\u00eb.<\/p>\n<p><\/p>\n<p>Kalonin dit\u00ebt...<\/p>\n<p><\/p>\n<p>M\u00eb n\u00eb fund, pas disa p\u00ebrpjekjeve t\u00eb d\u00ebshtuara, versione e para funksionale ishte gati. \u00c7far\u00eb dol\u00ebn? Doli k\u00ebshtu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/322c4136ed033b80b31a89d7b5f63af8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c7do nod merr grupin e tij t\u00eb metrikave dhe i akumulon ato, pa i agreguar metrikat p\u00ebr ato lloje ku p\u00ebr agregimin p\u00ebrfundimtar k\u00ebrkohet grupi i plot\u00eb. Nodat jan\u00eb t\u00eb lidhur mes tyre me nj\u00eb protokoll ndarjeje t\u00eb shp\u00ebrndar\u00eb q\u00eb i lejon t\u00eb zgjedhin at\u00eb t\u00eb vetmen (k\u00ebt\u00eb her\u00eb qamit) q\u00eb \u00ebsht\u00eb e denj\u00eb p\u00ebr t\u00eb d\u00ebrguar metrikat e Madhe. Aktualisht ky problem zgjidhet me mjete, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.consul.io\/docs\/guides\/leader-election.html\">Consul<\/a><\/noindex>por n\u00eb t\u00eb ardhmen ambicjet e autorit shtrihen deri n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Albibek\/raft-consensus\">s\u00eb vetme<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Albibek\/raft-tokio\">realizimit<\/a><\/noindex> Raft, ku ajo e denj\u00eb do t\u00eb jet\u00eb, sigurisht, nodi-lider i konsensusit. P\u00ebrve\u00e7 konsensusit, nodat shpesh (me default nj\u00eb her\u00eb n\u00eb sekond\u00eb) d\u00ebrgojn\u00eb fqinj\u00ebve t\u00eb tyre ato pjes\u00eb t\u00eb metrikave t\u00eb paragreguara, t\u00eb cilat arrit\u00ebn t\u00eb akumulojn\u00eb n\u00eb at\u00eb sekond\u00eb. K\u00ebshtu, shkall\u00ebzimi dhe disponueshm\u00ebria mbeten \u2014 \u00e7do nod p\u00ebrmban akoma grupin e plot\u00eb t\u00eb metrikave, por metrikat tani d\u00ebrgohen t\u00eb agreguara, p\u00ebrmes TCP dhe me kodim n\u00eb nj\u00eb protokoll binar, k\u00ebshtu q\u00eb kostot p\u00ebr kopjimin krahasuar me UDP reduktohen ndjesh\u00ebm. Pavar\u00ebsisht numrit t\u00eb madh t\u00eb metrikave hyr\u00ebse, akumulimi k\u00ebrkon shum\u00eb pak memorie dhe akoma m\u00eb pak CPU. P\u00ebr metrikan ton\u00eb q\u00eb comprimon mir\u00eb, kjo \u00ebsht\u00eb vet\u00ebm disa dhjet\u00ebra megabajt t\u00eb dh\u00ebnash. Nj\u00eb bonus shtes\u00eb p\u00ebrfitojm\u00eb munges\u00ebn e ripers\u00ebritjeve t\u00eb panevojshme t\u00eb t\u00eb dh\u00ebnave n\u00eb Graphite, si\u00e7 ndodhi me burbeck.<\/p>\n<p><\/p>\n<p>Paketa UDP me metrika jan\u00eb t\u00eb shp\u00ebrndara midis nodave n\u00eb pajisjen rrjet\u00ebse p\u00ebrmes nj\u00eb Round Robin t\u00eb thjesht\u00eb. Natyrisht, pajisja rrjet\u00ebsore nuk analizon p\u00ebrmbajtjen e paketimeve dhe prandaj mund t\u00eb p\u00ebrballoj\u00eb shum\u00eb m\u00eb tep\u00ebr se 4M paketa n\u00eb sekond\u00eb, e nuk flasim p\u00ebr metrikat, p\u00ebr t\u00eb cilat ajo nuk di asgj\u00eb. N\u00ebse merret parasysh se metrikat nuk vijn\u00eb nj\u00eb nga nj\u00eb n\u00eb \u00e7do paket\u00eb, at\u00ebher\u00eb nuk parashikojm\u00eb probleme me performanc\u00ebn n\u00eb k\u00ebt\u00eb pik\u00eb. N\u00eb rast t\u00eb r\u00ebnies s\u00eb serverit pajisja rrjet\u00ebsore e zbulohet shpejt (brenda 1-2 sekondash) dhe e heq serverin e r\u00ebn\u00eb nga rotacioni. Si rezultat, nodat pasive (dmth. q\u00eb nuk jan\u00eb lider), mund t\u00eb fik\u00ebn dhe ndizet duke mos e v\u00ebrejtur pothuajse r\u00ebnien n\u00eb grafike. Maksimumi q\u00eb humbasim \u2014 \u00ebsht\u00eb nj\u00eb pjes\u00eb e metrikave q\u00eb erdh\u00ebn n\u00eb sekond\u00ebn e fundit. Humbja\/ndalimi\/ribashkimi i papritur i liderit do t\u00eb pikturojn\u00eb akoma nj\u00eb anomali t\u00eb vog\u00ebl (mbi nj\u00eb interval 30-sekond\u00ebsh, akoma \u00ebsht\u00eb jasht\u00eb sinkronizimit), por n\u00ebse ka lidhje midis nodave mund t\u00eb minimizohen edhe k\u00ebto probleme, p\u00ebr shembull, duke d\u00ebrguar paketa sinkronizuese.<\/p>\n<p><\/p>\n<p>Pak m\u00eb shum\u00eb n\u00eb lidhje me struktur\u00ebn e brendshme. Aplikacioni, sigurisht, \u00ebsht\u00eb multithread, por arkitektura e rrjedhave ndryshon nga ajo e p\u00ebrdorur n\u00eb brubeck. Rrjedhat n\u00eb brubeck jan\u00eb t\u00eb nj\u00ebjta \u2014 secila prej tyre p\u00ebrgjigjet nj\u00ebkoh\u00ebsisht p\u00ebr mbledhjen e informacionit dhe p\u00ebr agregimin. N\u00eb bioyino, rrjedhat e pun\u00ebs (workers) jan\u00eb t\u00eb ndara n\u00eb dy grupe: ato p\u00ebrgjegj\u00ebse p\u00ebr rrjetin dhe ato p\u00ebrgjegj\u00ebse p\u00ebr agregimin. Kjo ndarje lejon menaxhim m\u00eb fleksib\u00ebl t\u00eb aplikacionit n\u00eb var\u00ebsi t\u00eb llojit t\u00eb metrikave: aty ku k\u00ebrkohet agregim intensiv, mund t\u00eb shtohen agregator\u00ebt, nd\u00ebrsa aty ku ka shum\u00eb trafik rrjeti \u2014 t\u00eb shtohet numri i rrjedhave rrjet. Momentalisht, n\u00eb serverat tan\u00eb punojm\u00eb me 8 rrjedha rrjeti dhe 4 agreguese.<\/p>\n<p><\/p>\n<p>Pjesa llogarit\u00ebse (p\u00ebrgjegj\u00ebse p\u00ebr agregimin) \u00ebsht\u00eb mjaft e m\u00ebrzitshme. Buffers e mbushura me rrjedha rrjeti shp\u00ebrndahen midis rrjedhave llogarit\u00ebse, ku m\u00eb pas paraqiten dhe agregohen. Metrikat k\u00ebrkohen p\u00ebr t'u dor\u00ebzuar n\u00eb node t\u00eb tjera. T\u00eb gjitha k\u00ebto, p\u00ebrfshir\u00eb d\u00ebrgimin e t\u00eb dh\u00ebnave midis node-ve dhe pun\u00ebn me Consul, kryhen n\u00eb m\u00ebnyr\u00eb asinkrone, duke punuar mbi frameworkun <noindex><a rel=\"nofollow\" href=\"https:\/\/tokio.rs\">tokio<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Shum\u00eb m\u00eb shum\u00eb probleme n\u00eb zhvillim ka shkaktuar pjesa rrjetore, p\u00ebrgjegj\u00ebse p\u00ebr marrjen e metrikave. Q\u00ebllimi kryesor i ndarjes s\u00eb rrjedhave rrjetore n\u00eb entitete t\u00eb ve\u00e7anta ishte p\u00ebrpjekja p\u00ebr t\u00eb reduktuar koh\u00ebn q\u00eb rrjedha shpenzon <em>nuk<\/em> n\u00eb leximin e t\u00eb dh\u00ebnave nga socket. Opcioni p\u00ebr p\u00ebrdorimin e UDP asinkron dhe recvmsg u hodh posht\u00eb shpejt: e para konsumon shum\u00eb CPU n\u00eb hap\u00ebsir\u00ebn e p\u00ebrdoruesit p\u00ebr p\u00ebrpunimin e ngjarjeve, e dyta \u2014 shum\u00eb shk\u00ebputje konteksti. Prandaj tani po p\u00ebrdoret <noindex><a rel=\"nofollow\" href=\"https:\/\/linux.die.net\/man\/2\/recvmmsg\">recvmmsg<\/a><\/noindex> me buffers t\u00eb m\u00ebdhenj (dhe buffers, zot\u00ebrinj oficer\u00eb, nuk jan\u00eb thjesht ndonj\u00eb gj\u00eb!). Mb\u00ebshtetje p\u00ebr UDP-n\u00eb tradicionale \u00ebsht\u00eb l\u00ebn\u00eb p\u00ebr raste t\u00eb papregatitura, kur nuk ka nevoj\u00eb p\u00ebr recvmmsg. N\u00eb modin multimessage arrihet q\u00ebllimi kryesor: shumica d\u00ebrrmuese e koh\u00ebs, rrjedha rrjet shkarkon radh\u00ebn e OS \u2014 lexon t\u00eb dh\u00ebnat nga socket dhe i kalon ato n\u00eb buffer-in e hap\u00ebsir\u00ebs s\u00eb p\u00ebrdoruesit, duke kaluar vet\u00ebm hera-her\u00ebs p\u00ebr t\u00eb dor\u00ebzuar buffer-in e mbushur tek agregator\u00ebt. Radh\u00ebt n\u00eb socket praktikisht nuk grumbullohen, numri i paketave t\u00eb p\u00ebrjashtuara rritet praktikisht jo. <\/p>\n<p>\n<b class=\"spoiler_title\">Sh\u00ebnim<\/b><\/p>\n<p>N\u00eb konfigurimin e paracaktuar, madh\u00ebsia e buffer-it \u00ebsht\u00eb vendosur mjaft e madhe. N\u00ebse ndonj\u00ebher\u00eb vendosni ta provoni serverin vet\u00eb, ndoshta do t\u00eb p\u00ebrballeni me faktin se pas d\u00ebrgimit t\u00eb nj\u00eb sasi t\u00eb vog\u00ebl metrikash, ato nuk do t\u00eb arrijn\u00eb n\u00eb Graphite, duke mbetur n\u00eb buffer-in e rrjedh\u00ebs rrjetore. P\u00ebr pun\u00ebn me nj\u00eb num\u00ebr t\u00eb vog\u00ebl metrikash, duhet t\u00eb vendosni n\u00eb konfigurimin e bufsize dhe task-queue-size vlera m\u00eb t\u00eb vogla.<\/p>\n<p><\/p>\n<p>P\u00ebr fund \u2014 disa grafika p\u00ebr adhuruesit e grafik\u00ebve.<\/p>\n<p><\/p>\n<p>Statistika e numrit t\u00eb metrikave n\u00eb hyrje p\u00ebr secilin server: mbi 2 milion MPS.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/c6cb1a36c267657d55ec22df518f8d03.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c7ky\u00e7ja e nj\u00eb nga node-ve dhe shp\u00ebrndarja e metrikave n\u00eb hyrje.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/106af265a6bc2a8b31fe34df69e9c200.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Statistika e metrikave n\u00eb dalje: gjithmon\u00eb d\u00ebrgon vet\u00ebm nj\u00eb node \u2014 raidboss.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/582730b501a42bb3a371a84bf2e2394b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Statistika e pun\u00ebs s\u00eb secil\u00ebs node me p\u00ebrllogaritjen e gabimeve n\u00eb modulet e ndryshme t\u00eb sistemit.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/101377281c3add8c598c6439ca25d271.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Detajimi i metrikave n\u00eb hyrje (emrat e metrikave jan\u00eb t\u00eb fshira).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuar i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/6cf0b61b454b0414799460c482e03242.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0427\u0442\u043e \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0441 \u044d\u0442\u0438\u043c \u0432\u0441\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435? \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u0431\u043b&#8230;! \u041f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043a open-source \u0438 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u0432\u0441\u044e \u0435\u0433\u043e \u0436\u0438\u0437\u043d\u044c. \u0412 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043f\u043b\u0430\u043d\u0430\u0445 \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Raft, \u0441\u043c\u0435\u043d\u0430 peer-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u044b\u0439, \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u043d\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043c\u0435\u0442\u0440\u0438\u043a, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f. <\/p>\n<p><\/p>\n<p>Sigurisht, t\u00eb gjith\u00eb ata q\u00eb d\u00ebshirojn\u00eb t\u00eb ndihmojn\u00eb n\u00eb zhvillimin e projektit jan\u00eb t\u00eb mir\u00ebpritur: krijoni PR, Issues, n\u00ebse \u00ebsht\u00eb e mundur do t\u00eb p\u00ebrgjigjemi, do t\u00eb punojm\u00eb dhe etj.<\/p>\n<p><\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, that&#8217;s all folks, \u043f\u043e\u043a\u0443\u043f\u0430\u0439\u0442\u0435 \u043d\u0430\u0448\u0438\u0445 \u0441\u043b\u043e\u043d\u043e\u0432!<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"siCiIyg4ZZY\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/siCiIyg4ZZY\/hqdefault.jpg\" alt=\"Luaj videon\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/354714\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u0442\u0430\u043a, \u0432\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u0430\u043a \u0438 \u043c\u044b. \u041c\u044b \u0442\u043e\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u0441\u0430\u043c\u043e\u043c \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0432\u0435\u043d\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u2014 statsd-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438 bioyino, \u0437\u0430\u0447\u0435\u043c \u043c\u044b \u0435\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043e\u0442 brubeck. \u0418\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043d\u0430\u0448\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 (1, 2) \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0442\u043a\u0438 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52113","post","type-post","status-publish","format-standard","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=\"\u0418\u0442\u0430\u043a, \u0432\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u0430\u043a \u0438 \u043c\u044b. \u041c\u044b \u0442\u043e\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430.\" \/>\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\/bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik\" \/>\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\udd47Bioyino \u2014 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440 \u043c\u0435\u0442\u0440\u0438\u043a | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u0442\u0430\u043a, \u0432\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u0430\u043a \u0438 \u043c\u044b. \u041c\u044b \u0442\u043e\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik\" \/>\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-31T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:59:47+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\udd47Bioyino \u2014 agregatori i metrikave t\u00eb shp\u00ebrndara dhe t\u00eb shkall\u00ebzuesh\u00ebm | ProHoster","description":"\u0418\u0442\u0430\u043a, \u0432\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u0430\u043a \u0438 \u043c\u044b. \u041c\u044b \u0442\u043e\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik","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\udd47Bioyino \u2014 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440 \u043c\u0435\u0442\u0440\u0438\u043a | ProHoster","og:description":"\u0418\u0442\u0430\u043a, \u0432\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u0430\u043a \u0438 \u043c\u044b. \u041c\u044b \u0442\u043e\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik","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-31T21:00:00+00:00","article:modified_time":"2020-02-18T10:59:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52113","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-24 02:30:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:49:49","updated":"2026-01-24 02:30:22","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\/52113","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=52113"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/52113\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=52113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=52113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=52113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}