{"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\u00ebzuesh\u00ebm i metrikave","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Pra, po mbledhni metrika. Ashtu si ne. Ne gjithashtu 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 \u2014 serverin e agregat\u00ebs q\u00eb \u00ebsht\u00eb n\u00eb p\u00ebrputhje me statsd <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2Noxg1M\">bioyino<\/a><\/noindex>, p\u00ebrse e shkruam at\u00eb dhe pse hoq\u00ebm dor\u00eb nga brubeck. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuesh\u00ebm 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 mbledhim etiketat duke p\u00ebrdorur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\">brubeck<\/a><\/noindex>. Ai \u00ebsht\u00eb shkruar n\u00eb C. Nga pik\u00ebpamja e kodit \u2014 i thjesht\u00eb si nj\u00eb kork (kjo \u00ebsht\u00eb e r\u00ebnd\u00ebsishme, kur d\u00ebshironi t\u00eb kontribuoni) dhe, m\u00eb e r\u00ebnd\u00ebsishmja, p\u00ebrballon pa ndonj\u00eb problem volume tona prej 2 milion metrike n\u00eb sekond\u00eb (MPS) n\u00eb kulm. Dokumentacioni deklaron mb\u00ebshtetje p\u00ebr 4 milion MPS me nj\u00eb yll. Kjo do t\u00eb thot\u00eb se numri i deklaruar do t\u00eb merrni, n\u00ebse e konfiguroni drejt rrjetin n\u00eb Linux. (Sa MPS mund t\u00eb merrni, n\u00ebse e lini rrjetin si\u00e7 \u00ebsht\u00eb, nuk e dim\u00eb). Pavar\u00ebsisht k\u00ebtyre avantazheve, ne kishim disa ankesat serioze lidhur me brubeck.<\/p>\n<p><\/p>\n<p><em>Ankesa 1.<\/em> Github \u2014 zhvilluesi i projektit \u2014 e ndali mb\u00ebshtetje at\u00eb: t\u00eb publikojm\u00eb patch-e dhe rregullime, t\u00eb pranojm\u00eb PR-t\u00eb tona dhe (jo vet\u00ebm tonat). N\u00eb muajt e fundit (diku q\u00eb nga shkurt-marsi 2018) aktiviteti rinisi, por para k\u00ebsaj kishte pothuajse 2 vjet qet\u00ebsi t\u00eb plot\u00eb. P\u00ebr m\u00eb tep\u00ebr, projekti po zhvillohet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\/pull\/31#issuecomment-325907734\">p\u00ebr nevojat e brendshme t\u00eb Github<\/a><\/noindex>, q\u00eb mund t\u00eb b\u00ebhet nj\u00eb penges\u00eb e madhe 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 shum\u00eb vlera (1 527 392 n\u00eb kulm). Si rezultat i k\u00ebtij kampioni, vlerat e maksimumeve dhe minimaleve duken t\u00eb padobishme. P\u00ebr shembull, ja k\u00ebshtu: <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuesh\u00ebm i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/4222a1a7d1e127137220595241f5276c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Si ishte<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuesh\u00ebm i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/c8f0025c61f708584328ea30aacf7bc0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Si duhej t\u00eb ishte<\/em><\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb nj\u00ebjt\u00ebn arsye, shumat llogariten krejt\u00ebsisht t\u00eb pap\u00ebrshtatshme. Shtoni k\u00ebtu nj\u00eb bug me mbushjen e float-it 32-bit, i cili d\u00ebrgon serverin n\u00eb segfault kur merr nj\u00eb metrik\u00eb q\u00eb duket e pafajshme, dhe b\u00ebhet krejt\u00ebsisht e shk\u00eblqyer. Ky bug, p\u00ebr m\u00eb tep\u00ebr, nuk \u00ebsht\u00eb rregulluar ende.<\/p>\n<p><\/p>\n<p>Dhe, n\u00eb fund, <em>Ankesa X<\/em>. N\u00eb momentin e shkruarjes s\u00eb k\u00ebtij artikulli, jemi t\u00eb gatsh\u00ebm t\u00eb paraqesim t\u00eb gjitha 14 implementimet m\u00eb shum\u00eb ose m\u00eb pak funksionale t\u00eb statsd q\u00eb arrit\u00ebm t\u00eb gjejm\u00eb. Le t\u00eb imagjinojm\u00eb se ndonj\u00eb infrastruktur\u00eb e ve\u00e7ant\u00eb \u00ebsht\u00eb rritur aq shum\u00eb sa q\u00eb pranimet prej 4 milion MPS nuk jan\u00eb m\u00eb t\u00eb mjaftueshme. Ose ndoshta nuk \u00ebsht\u00eb rritur ende, por metrikat p\u00ebr ju jan\u00eb aq t\u00eb r\u00ebnd\u00ebsishme sa q\u00eb edhe nd\u00ebrprerje t\u00eb shkurtra, 2-3 minuta n\u00eb grafik\u00eb, mund t\u00eb b\u00ebhen kritike dhe t\u00eb shkaktojn\u00eb episode t\u00eb pashmangshme depresioni te menaxher\u00ebt. Duke qen\u00eb se trajtimi i depresionit \u00ebsht\u00eb nj\u00eb pun\u00eb e falenderueshme, jan\u00eb t\u00eb nevojshme zgjidhje teknike.<\/p>\n<p><\/p>\n<p>S\u00eb pari, q\u00ebndrueshm\u00ebria p\u00ebr t\u00eb shmangur nj\u00eb problem t\u00eb papritur n\u00eb server q\u00eb t\u00eb mos shkaktoj\u00eb nj\u00eb apokalips zombi n\u00eb zyr\u00eb. S\u00eb dyti, shkall\u00ebzimi p\u00ebr t\u00eb marr\u00eb mund\u00ebsin\u00eb t\u00eb pranojm\u00eb m\u00eb shum\u00eb se 4 milion MPS, pa nxjerr\u00eb me thell\u00ebsi n\u00eb stakun e rrjetit Linux dhe duke u zgjeruar qet\u00ebsisht deri n\u00eb p\u00ebrmasat e nevojshme.<\/p>\n<p><\/p>\n<p>Duke qen\u00eb se kishte hap\u00ebsir\u00eb p\u00ebr shkall\u00ebzim, vendos\u00ebm t\u00eb fillonim me q\u00ebndrueshm\u00ebrin\u00eb. \"Oh! Q\u00ebndrueshm\u00ebria! Kjo \u00ebsht\u00eb e thjesht\u00eb, ne e dim\u00eb t\u00eb b\u00ebjm\u00eb\", menduam dhe aktivizuam 2 servera, duke ngritur n\u00eb \u00e7do server nj\u00eb kopje t\u00eb brubeck. P\u00ebr k\u00ebt\u00eb na duhej t\u00eb kopjonim trafikun me metrikat n\u00eb t\u00eb dy serverat dhe madje t\u00eb shkruanim p\u00ebr k\u00ebt\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Albibek\/udpdup\">nj\u00eb utilitare t\u00eb vog\u00ebl<\/a><\/noindex>. Problemin e q\u00ebndrueshm\u00ebris\u00eb e zgjidh\u00ebm k\u00ebshtu, por... jo shum\u00eb mir\u00eb. N\u00eb fillim, gjith\u00e7ka dukej mjaft n\u00eb rregull: \u00e7do brubeck mbledh versionin e tij t\u00eb agregimit, shkruan t\u00eb dh\u00ebnat n\u00eb Graphite \u00e7do 30 sekonda, duke riparuar intervalin e vjet\u00ebr (kjo b\u00ebhet n\u00eb an\u00ebn e Graphite). N\u00ebse ndonj\u00ebher\u00eb nj\u00eb server d\u00ebshton, ne gjithmon\u00eb kemi nj\u00eb t\u00eb dyt\u00eb me nj\u00eb kopje t\u00eb vet\u00eb t\u00eb dh\u00ebnave t\u00eb agreguara. Por ja problemi: n\u00ebse serveri d\u00ebshton, n\u00eb grafik\u00eb shfaqet \"shkalla serratuar\". Kjo ndodh sepse intervalet 30 sekond\u00ebshe t\u00eb brubeck nuk jan\u00eb t\u00eb sinkronizuara, dhe n\u00eb momentin e r\u00ebnies nj\u00eb nga ato nuk riparon. N\u00eb momentin e aktivizimit t\u00eb serverit t\u00eb dyt\u00eb ndodh e nj\u00ebjta gj\u00eb. Mjaft e p\u00ebrballueshme, por d\u00ebshirojm\u00eb m\u00eb mir\u00eb! Problemi i shkall\u00ebzueshm\u00ebris\u00eb gjithashtu nuk \u00ebsht\u00eb zhdukur. T\u00eb gjitha metrikat vazhdojn\u00eb t\u00eb \"fluturojn\u00eb\" n\u00eb nj\u00eb server t\u00eb vet\u00ebm, dhe prandaj jemi t\u00eb kufizuar n\u00eb t\u00eb nj\u00ebjtat 2-4 milion MPS var\u00ebsisht nga p\u00ebrmir\u00ebsimi i rrjetit.<\/p>\n<p><\/p>\n<p>N\u00ebse mendojm\u00eb pak p\u00ebr problemin dhe nj\u00ebkoh\u00ebsisht g\u00ebrmojm\u00eb n\u00eb bor\u00eb me nj\u00eb bajonete, na vjen n\u00eb mendje nj\u00eb ide kaq e qart\u00eb: na nevojitet nj\u00eb statsd q\u00eb punon n\u00eb nj\u00eb mod t\u00eb shp\u00ebrndar\u00eb. K\u00ebshtu, nj\u00eb q\u00eb implementon sinkronizimin midis nyjeve sipas koh\u00ebs dhe metrikeve. \"Sigurisht, nj\u00eb zgjidhje e till\u00eb padyshim q\u00eb ekziston\", tham\u00eb ne dhe shkuam t\u00eb k\u00ebrkojm\u00eb n\u00eb Google... dhe nuk gjet\u00ebm asgj\u00eb. Pas nj\u00eb shqyrtimi t\u00eb dokumentacionit p\u00ebr statsd t\u00eb ndryshme (<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 dat\u00ebn 11.12.2017), nuk gjet\u00ebm asgj\u00eb. Duket se as zhvilluesit as p\u00ebrdoruesit e k\u00ebtyre zgjidhjeve deri tani nuk jan\u00eb p\u00ebrballur me nj\u00eb KAQ shum\u00eb metrikash, ndryshe ata do t\u00eb kishin p\u00ebrcaktuar di\u00e7ka.<\/p>\n<p><\/p>\n<p>Dhe k\u00ebtu na erdh\u00ebn n\u00eb mendje statsd 'loja' - bioyino, q\u00eb e kishim shkruar n\u00eb hackathon thjesht p\u00ebr arg\u00ebtim (emri i projektit ishte gjeneruar nga nj\u00eb skript para se t\u00eb fillonte hackathon) dhe kuptuam se na nevojitet urgjentisht nj\u00eb statsd i vet. Pse?<\/p>\n<p><\/p>\n<ul>\n<li>sepse n\u00eb bot\u00eb ka shum\u00eb pak klone statsd,<\/li>\n<li>sepse mund t\u00eb sigurojm\u00eb q\u00ebndrueshm\u00ebri dhe shkall\u00ebzim t\u00eb d\u00ebshiruesh\u00ebm ose t\u00eb af\u00ebrt me t\u00eb d\u00ebshiruarin (p\u00ebrfshir\u00eb sinkronizimin 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 \u00e7far\u00eb b\u00ebn brubeck,<\/li>\n<li>sepse mund t\u00eb mbledhim vet\u00eb statistika m\u00eb t\u00eb detajuara, t\u00eb cilat brubeck nuk na i ofronte pothuajse fare,<\/li>\n<li>sepse na u dha mund\u00ebsia t\u00eb programojm\u00eb aplikacionin ton\u00eb t\u00eb shp\u00ebrndar\u00eb me performanc\u00eb t\u00eb lart\u00eb, i cili nuk do t\u00eb ishte nj\u00eb kopje e plot\u00eb e arkitektur\u00ebs s\u00eb nj\u00eb aplikacioni tjet\u00ebr t\u00eb till\u00eb hyperfor... nuviponeli. <\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00eb \u00e7far\u00eb t\u00eb 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 k\u00ebtij artikulli at\u00ebher\u00eb e dinte Rust dhe donte t\u00eb shkruante di\u00e7ka p\u00ebr prodhim me mund\u00ebsin\u00eb e publikimit 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 merrnim (praktikisht realtime) dhe pauzat e GC jan\u00eb pothuajse t\u00eb papranueshme, <\/li>\n<li>sepse na nevojitet performanc\u00eb maksimale, krahasueshme me C<\/li>\n<li>sepse Rust na ofron nj\u00eb konkurenc\u00eb pa frik\u00eb, dhe n\u00ebse do t\u00eb fillonim ta shkruanim k\u00ebt\u00eb n\u00eb C\/C++, do t\u00eb kishim m\u00eb shum\u00eb, shum\u00eb m\u00eb tep\u00ebr, si\u00e7 ishim me brubeck, dob\u00ebsi, mbushje t\u00eb buffer\u00ebve, race conditions dhe fjal\u00eb t\u00eb tjera t\u00eb frikshme.<\/li>\n<\/ul>\n<p><\/p>\n<p>I had an argument against Rust. The company lacked experience in creating projects with Rust, and we currently do not plan to use it in our main project. Therefore, there were serious concerns that it might not work out, but we decided to take the risk and give it a try.<\/p>\n<p><\/p>\n<p>Time went on\u2026<\/p>\n<p><\/p>\n<p>Finally, after several unsuccessful attempts, the first working version was ready. What did we get? We got something like this.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuesh\u00ebm i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/322c4136ed033b80b31a89d7b5f63af8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Each node receives its own set of metrics and accumulates them without aggregating metrics for those types where their complete set is required for final aggregation. The nodes are interconnected by a distributed lock protocol, which allows selecting among them the one and only (here we cried) that is worthy of sending metrics to The Great. Currently, this issue is being addressed using <noindex><a rel=\"nofollow\" href=\"https:\/\/www.consul.io\/docs\/guides\/leader-election.html\">Consul<\/a><\/noindex>, but in the future, the author's ambitions extend to <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Albibek\/raft-consensus\">their own<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Albibek\/raft-tokio\">implementation<\/a><\/noindex> Raft, where that very worthy one will undoubtedly be the consensus leader node. Besides consensus, nodes very often (by default once a second) send their neighbors the parts of the pre-aggregated metrics that managed to be gathered during that second. Thus, scalability and fault tolerance are maintained \u2014 each of the nodes still holds the complete set of metrics, but the metrics are now sent aggregated, over TCP and encoded in a binary protocol, significantly reducing the duplication costs compared to UDP. Despite a fairly large number of incoming metrics, accumulation requires very little memory and even less CPU. For our well-compressible metrics, this amounts to just a few tens of megabytes of data. An additional bonus is the absence of unnecessary data rewrites in Graphite, unlike what occurred with burbeck.<\/p>\n<p><\/p>\n<p>UDP paketet me metrike jan\u00eb disbalancuar midis nyjeve n\u00eb pajisjet rrjetit p\u00ebrmes nj\u00eb Round Robin t\u00eb thjesht\u00eb. Natyrisht, aparatet rrjetore nuk analizojn\u00eb p\u00ebrmbajtjen e paketave dhe prandaj mund t\u00eb p\u00ebrballojn\u00eb shum\u00eb m\u00eb tep\u00ebr se 4M paketa n\u00eb sekond\u00eb, p\u00ebr t\u00eb mos p\u00ebrmendur metrikat, p\u00ebr t\u00eb cilat ato nuk din\u00eb asgj\u00eb. Duke marr\u00eb parasysh se metrikat vijn\u00eb jo vet\u00ebm nj\u00eb n\u00eb \u00e7do paket\u00eb, nuk parashikojm\u00eb probleme me performanc\u00ebn k\u00ebtu. N\u00eb rast t\u00eb r\u00ebnies s\u00eb serverit, pajisja rrjetore e zbulon at\u00eb shpejt (brenda 1-2 sekondash) dhe e heq serverin q\u00eb ka r\u00ebn\u00eb nga rotacioni. Si rezultat, nyjet pasive (t.e. ato q\u00eb nuk jan\u00eb lider) mund t\u00eb aktivizohen dhe deaktivizohen pothuajse pa v\u00ebn\u00eb re r\u00ebniet n\u00eb grafik\u00eb. Maksimumi q\u00eb humbasim \u2014 \u00ebsht\u00eb nj\u00eb pjes\u00eb e metrikave q\u00eb kan\u00eb ardhur p\u00ebr sekond\u00ebn e fundit. Humbja e papritur \/ \u00e7aktivizimi \/ kalimi i liderit do t\u00eb t\u00ebrheq\u00eb gjithnj\u00eb nj\u00eb anomalie t\u00eb vog\u00ebl (intervali 30-sekond\u00ebsh \u00ebsht\u00eb ende i asinkronizuar), por n\u00ebse ka lidhje mes nyjeve, k\u00ebto probleme mund t\u00eb minimizohen, p\u00ebr shembull, duke d\u00ebrguar paketat e sinkronizimit.<\/p>\n<p><\/p>\n<p>Pak rreth struktur\u00ebs s\u00eb brendshme. Aplikacioni, natyrisht, \u00ebsht\u00eb me shum\u00eb\u7ebf\u7a0b, por arkitektura e threadave ndryshon nga ajo q\u00eb p\u00ebrdoret n\u00eb brubeck. Threadat n\u00eb brubeck jan\u00eb t\u00eb nj\u00ebjt\u00eb \u2014 \u00e7do nj\u00eb prej tyre p\u00ebrgjigjet nj\u00ebkoh\u00ebsisht p\u00ebr mbledhjen e informacionit dhe p\u00ebr agregimin. N\u00eb bioyino, threadat e pun\u00ebs (workers) jan\u00eb t\u00eb ndar\u00eb n\u00eb dy grupe: p\u00ebrgjegj\u00ebs p\u00ebr rrjetin dhe p\u00ebrgjegj\u00ebs p\u00ebr agregimin. Kjo ndarje e lejon menaxhimin m\u00eb fleksib\u00ebl t\u00eb aplikacionit n\u00eb var\u00ebsi t\u00eb llojit t\u00eb metrikave: aty ku k\u00ebrkohet nj\u00eb agregim intensiv, mund t\u00eb shtojm\u00eb agregator\u00eb, aty ku ka shum\u00eb trafik rrjeti \u2014 mund t\u00eb rrisim numrin e threadave rrjetor\u00eb. Momentalisht, n\u00eb server\u00ebt tan\u00eb po punojm\u00eb me 8 threadat rrjetor\u00eb dhe 4 threadat agregues.<\/p>\n<p><\/p>\n<p>Pjesa llogarit\u00ebse (p\u00ebrgjegj\u00ebse p\u00ebr agregimin) \u00ebsht\u00eb mjaft e m\u00ebrzitshme. Bufrat e mbushur me threadat rrjetor\u00eb shp\u00ebrndahen nd\u00ebrmjet threadave llogarit\u00ebs, ku m\u00eb pas p\u00ebrpunohen dhe agregohen. N\u00eb k\u00ebrkes\u00eb, metrikat d\u00ebrgohen p\u00ebr t'u d\u00ebrguar n\u00eb nyje t\u00eb tjera. E gjith\u00eb kjo, duke p\u00ebrfshir\u00eb d\u00ebrgimin e t\u00eb dh\u00ebnave midis nyjeve dhe pun\u00ebn me Consul, kryhet asinkronisht, duke punuar mbi frameworkun <noindex><a rel=\"nofollow\" href=\"https:\/\/tokio.rs\">tokio<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>\u00c7do problem m\u00eb t\u00eb madh gjat\u00eb zhvillimit e shkaktoi pjesa rrjetore, e cila ishte p\u00ebrgjegj\u00ebse p\u00ebr pranimin e metrikave. Q\u00ebllimi kryesor i ndarjes s\u00eb rrjedhave rrjetore n\u00eb entitete t\u00eb ve\u00e7anta ishte t\u00eb zvog\u00eblohej koha q\u00eb rrjedha shpenzon <em>jo<\/em> n\u00eb leximin e t\u00eb dh\u00ebnave nga socket. Opsionet q\u00eb p\u00ebrdorin UDP asinkron dhe recvmsg t\u00eb zakonsh\u00ebm u hodh\u00ebn 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 nd\u00ebrrime konteksti. Prandaj tani p\u00ebrdoret <noindex><a rel=\"nofollow\" href=\"https:\/\/linux.die.net\/man\/2\/recvmmsg\">recvmmsg<\/a><\/noindex> me bufe t\u00eb m\u00ebdha (dhe buferat, zot\u00ebrinj oficer\u00eb, nuk jan\u00eb \u00e7\u00ebshtje e zakont\u00eb!). Mb\u00ebshtetje p\u00ebr UDP t\u00eb zakonsh\u00ebm \u00ebsht\u00eb l\u00ebn\u00eb p\u00ebr raste t\u00eb pap\u00ebrgjegjshme, kur nuk ka nevoj\u00eb p\u00ebr recvmmsg. N\u00eb modin multimessage arrijm\u00eb t\u00eb arrihet e madhja: shumica d\u00ebrrmuese e koh\u00ebs rrjedha rrjetore pastron radh\u00ebn e OS \u2014 lexon t\u00eb dh\u00ebnat nga socket dhe i zhvendos ato n\u00eb buferin e hap\u00ebsir\u00ebs s\u00eb p\u00ebrdoruesit, vet\u00ebm ndonj\u00ebher\u00eb duke kaluar p\u00ebr t\u00eb dh\u00ebn\u00eb buferin e mbushur agregator\u00ebve. Radh\u00ebt n\u00eb socket praktikisht nuk grumbullohen, numri i paketimeve t\u00eb hedhura praktikisht nuk rritet. <\/p>\n<p>\n<b class=\"spoiler_title\">Sh\u00ebnim<\/b><\/p>\n<p>N\u00eb cil\u00ebsimet e paracaktuara, madh\u00ebsia e buferit \u00ebsht\u00eb caktuar mjaft e madhe. N\u00ebse papritur vendosni t\u00eb provoni serverin vet\u00eb, ndoshta do t\u00eb p\u00ebrballeni me faktin q\u00eb pas d\u00ebrgimit t\u00eb nj\u00eb sasie t\u00eb vog\u00ebl metrike, ato nuk do t\u00eb arrijn\u00eb n\u00eb Graphite, duke mbetur n\u00eb buferin e rrjedh\u00ebs rrjetore. P\u00ebr t\u00eb punuar me nj\u00eb num\u00ebr t\u00eb vog\u00ebl metrike, duhet t\u00eb caktohet n\u00eb konfigurim vlera m\u00eb t\u00eb vogla p\u00ebr bufsize dhe task-queue-size.<\/p>\n<p><\/p>\n<p>N\u00eb fund \u2014 disa grafika p\u00ebr ata q\u00eb i p\u00eblqejn\u00eb grafikat.<\/p>\n<p><\/p>\n<p>Statistika e numrit t\u00eb metrikave n\u00eb hyrje p\u00ebr secilin server: m\u00eb shum\u00eb se 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\u00ebzuesh\u00ebm i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/c6cb1a36c267657d55ec22df518f8d03.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c7aktivizimi i nj\u00ebrit nga nodet dhe riparimi i 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\u00ebzuesh\u00ebm i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/106af265a6bc2a8b31fe34df69e9c200.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Statistika p\u00ebr metrikat n\u00eb dalje: gjithmon\u00eb d\u00ebrgohet vet\u00ebm nj\u00eb nod \u2014 raidboss.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuesh\u00ebm 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 secilit nod duke marr\u00eb parasysh gabimet 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\u00ebzuesh\u00ebm i metrikave\" src=\"\/wp-content\/uploads\/2019\/11\/101377281c3add8c598c6439ca25d271.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Detajet e metrikave n\u00eb hyrje (emrat e metrikave jan\u00eb t\u00eb fshehur).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 nj\u00eb agregator i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuesh\u00ebm 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 duan t\u00eb ndihmojn\u00eb n\u00eb zhvillimin e projektit jan\u00eb t\u00eb mir\u00ebpritur: krijoni PR, Issues, dhe ne do t\u00eb mundohemi t\u00eb p\u00ebrgjigjemi dhe t\u00eb punojm\u00eb m\u00eb shum\u00eb kur t\u00eb jet\u00eb e mundur.<\/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.1.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.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\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 nj\u00eb agregator metrikash i shp\u00ebrndar\u00eb dhe i shkall\u00ebzuesh\u00ebm | ProHoster","description":"K\u00ebshtu, ju po mbledhni metrika. Ashtu si ne. Ne gjithashtu mbledhim metrika. Sigurisht, ato q\u00eb jan\u00eb t\u00eb nevojshme p\u00ebr biznesin.","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}]}}