{"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\/hu\/blog\/administrirovanie\/bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik","title":{"rendered":"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Teh\u00e1t, te is gy\u0171jt\u00f6d a metrik\u00e1kat. Mint mi. Mi is gy\u0171jt\u00fcnk metrik\u00e1kat. Term\u00e9szetesen, amelyek fontosak az \u00fczlet sz\u00e1m\u00e1ra. Ma bemutatjuk a monitoring rendszer\u00fcnk els\u0151 elem\u00e9t - a statsd-kompatibilis aggreg\u00e1l\u00f3 szervert. <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2Noxg1M\">bioyino<\/a><\/noindex>, mi\u00e9rt \u00edrtuk meg, \u00e9s mi\u00e9rt mondtunk le a brubeckr\u0151l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor\" 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>El\u0151z\u0151 cikkeinkb\u0151l (<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>) megtudhattad, hogy egy ideig a c\u00edmk\u00e9ket a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\">brubeck<\/a><\/noindex>seg\u00edts\u00e9g\u00e9vel gy\u0171jt\u00f6tt\u00fck. C nyelven \u00edr\u00f3dott. K\u00f3d szempontj\u00e1b\u00f3l - olyan egyszer\u0171, mint egy dug\u00f3 (ez fontos, ha k\u00f6zrem\u0171k\u00f6dni szeretn\u00e9l), \u00e9s ami a legfontosabb, k\u00fcl\u00f6n\u00f6sebb probl\u00e9m\u00e1k n\u00e9lk\u00fcl kezeli a cs\u00facsid\u0151szakban a m\u00e1sodpercenk\u00e9nti 2 milli\u00f3 metrik\u00e1t (MPS). A dokument\u00e1ci\u00f3 4 milli\u00f3 MPS t\u00e1mogat\u00e1st \u00edg\u00e9r csillaggal. Ez azt jelenti, hogy ezt a sz\u00e1mot akkor \u00e9rheted el, ha helyesen \u00e1ll\u00edtod be a h\u00e1l\u00f3zatot Linuxon. (H\u00e1ny MPS-t tudn\u00e1nk el\u00e9rni, ha a h\u00e1l\u00f3zatot \u00e9rintetlen\u00fcl hagyn\u00e1nk, azt nem tudjuk). Ezeket az el\u0151ny\u00f6ket figyelembe v\u00e9ve, a brubeckkel kapcsolatban volt n\u00e9h\u00e1ny komoly kifog\u00e1sunk.<\/p>\n<p><\/p>\n<p><em>Kifog\u00e1s 1.<\/em> A projekt fejleszt\u0151je, a Github, le\u00e1ll\u00edtotta annak t\u00e1mogat\u00e1s\u00e1t: nem publik\u00e1l patch-eket \u00e9s jav\u00edt\u00e1sokat, nem fogad el a mi \u00e9s (nem csak a mi) PR-ainkat. Az utols\u00f3 h\u00f3napokban (valahol 2018 febru\u00e1rj\u00e1ban-m\u00e1rcius\u00e1ban) meg\u00fajult a tev\u00e9kenys\u00e9g, de el\u0151tte majdnem 2 \u00e9v teljes csend volt. Ezen k\u00edv\u00fcl a projektet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\/pull\/31#issuecomment-325907734\">a Gihub bels\u0151 sz\u00fcks\u00e9gleteihez<\/a><\/noindex>fejlesztett\u00e9k, ami komoly akad\u00e1lyt jelenthet az \u00faj lehet\u0151s\u00e9gek bevezet\u00e9s\u00e9ben.<\/p>\n<p><\/p>\n<p><em>Kifog\u00e1s 2.<\/em> A sz\u00e1m\u00edt\u00e1sok pontoss\u00e1ga. A Brubeck csak 65536 \u00e9rt\u00e9ket gy\u0171jt \u00f6ssze az aggreg\u00e1l\u00e1shoz. A mi eset\u00fcnkben egyes metrik\u00e1k aggreg\u00e1l\u00e1si id\u0151szak\u00e1ban (30 m\u00e1sodperc) enn\u00e9l sokkal t\u00f6bb \u00e9rt\u00e9k is \u00e9rkezhet (1 527 392 a cs\u00facson). Az ilyen mintav\u00e9telez\u00e9s eredm\u00e9nyek\u00e9nt a maximumok \u00e9s minimumok \u00e9rt\u00e9kei haszontalannak t\u0171nnek. P\u00e9ld\u00e1ul \u00edgy: <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor\" src=\"\/wp-content\/uploads\/2019\/11\/4222a1a7d1e127137220595241f5276c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Hogyan volt<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor\" src=\"\/wp-content\/uploads\/2019\/11\/c8f0025c61f708584328ea30aacf7bc0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Hogyan kellett volna lennie<\/em><\/p>\n<p><\/p>\n<p>Ugyanezen okb\u00f3l az \u00f6sszegek teljesen pontatlanul ker\u00fclnek kisz\u00e1m\u00edt\u00e1sra. Ehhez j\u00f6n m\u00e9g a 32 bites float t\u00falcsordul\u00e1s bugja, amely a l\u00e1tsz\u00f3lag \u00e1rtatlan metrika \u00e9rkez\u00e9sekor a szervert is segfaultba k\u00fcldi, \u00e9s ez m\u00e1r igaz\u00e1n nagyszer\u0171. A bugot egy\u00e9bk\u00e9nt az\u00f3ta sem jav\u00edtott\u00e1k.<\/p>\n<p><\/p>\n<p>\u00c9s v\u00e9g\u00fcl, <em>Kifog\u00e1s X<\/em>. A cikk \u00edr\u00e1sakor k\u00e9szen \u00e1llunk, hogy bemutassuk az \u00f6sszes 14 m\u0171k\u00f6d\u0151 statsd megold\u00e1st, amit siker\u00fclt megtal\u00e1lnunk. K\u00e9pzelj\u00fck el, hogy egy bizonyos infrastrukt\u00fara olyan m\u00e9rt\u00e9kben n\u0151tt, hogy a 4 milli\u00f3 MPS m\u00e1r nem elegend\u0151. Vagy tal\u00e1n m\u00e9g nem n\u0151tt meg, de a metrik\u00e1k m\u00e1r olyan fontosak, hogy a 2-3 perces grafikon-\u00f6sszeoml\u00e1sok kritikusak lehetnek, \u00e9s elker\u00fclhetetlen depresszi\u00f3t okozhatnak a menedzserek k\u00f6r\u00e9ben. Mivel a depresszi\u00f3 kezel\u00e9se h\u00e1l\u00e1tlan feladat, technikai megold\u00e1sokra van sz\u00fcks\u00e9g.<\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r is, a hibat\u0171r\u00e9s, hogy egy v\u00e1ratlan probl\u00e9ma a szerveren ne ind\u00edtson el pszichi\u00e1triai zombiapokalipszist az irod\u00e1ban. M\u00e1sodszor, a sk\u00e1l\u00e1zhat\u00f3s\u00e1g, hogy lehet\u0151s\u00e9g\u00fcnk legyen t\u00f6bb mint 4 milli\u00f3 MPS fogad\u00e1s\u00e1ra an\u00e9lk\u00fcl, hogy m\u00e9lyre \u00e1sn\u00e1nk a Linux h\u00e1l\u00f3zati verem\u00e9be, \u00e9s nyugodtan n\u00f6vekedj\u00fcnk \"sz\u00e9less\u00e9gben\" a sz\u00fcks\u00e9ges m\u00e9retig.<\/p>\n<p><\/p>\n<p>Mivel a sk\u00e1l\u00e1z\u00e1s ter\u00e9n volt n\u00e9mi tartal\u00e9kunk, \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy a hibat\u0171r\u00e9ssel kezdj\u00fck. \"\u00d3! Hibat\u0171r\u00e9s! Ez egyszer\u0171, ezt tudjuk,\" gondoltuk, \u00e9s elind\u00edtottunk 2 szervert, minden egyes brubeck p\u00e9ld\u00e1ny\u00e1val. Ehhez a forgalmat mindk\u00e9t szerverre kellett m\u00e1solni a metrik\u00e1kkal, \u00e9s m\u00e9g \u00edrni kellett hozz\u00e1 egy <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Albibek\/udpdup\">kis seg\u00e9dprogramot<\/a><\/noindex>. Ezzel a hibat\u0171r\u00e9s probl\u00e9m\u00e1j\u00e1t megoldottuk, de... nem t\u00fal j\u00f3l. Eleinte minden rendben volt: minden brubeck a saj\u00e1t aggreg\u00e1l\u00e1s\u00e1t gy\u0171jt\u00f6tte, 30 m\u00e1sodpercenk\u00e9nt \u00edrt adatokat a Graphite-ba, fel\u00fcl\u00edrva a r\u00e9gi intervallumot (ezt a Graphite v\u00e9gzi). Ha az egyik szerver le\u00e1ll, mindig van egy m\u00e1sik a saj\u00e1t aggreg\u00e1lt adataival. De itt a probl\u00e9ma: ha a szerver le\u00e1ll, a grafikonokon \"f\u0171r\u00e9szfog\" jelenik meg. Ennek oka, hogy a brubeck 30 m\u00e1sodperces intervallumai nincsenek szinkroniz\u00e1lva, \u00e9s a le\u00e1ll\u00e1s pillanat\u00e1ban az egyik nem \u00edrja fel\u00fcl mag\u00e1t. Amikor elind\u00edtjuk a m\u00e1sodik szervert, ugyanaz t\u00f6rt\u00e9nik. Teljesen elviselhet\u0151, de jobb szeretn\u00e9nk! A sk\u00e1l\u00e1zhat\u00f3s\u00e1g probl\u00e9m\u00e1ja sem t\u0171nt el. Minden metrika tov\u00e1bbra is egyetlen szerverre \"rep\u00fcl\", ez\u00e9rt ugyanazokkal a 2-4 milli\u00f3 MPS korl\u00e1tokkal vagyunk k\u00e9nytelenek szemben\u00e9zni, az alkalmazott h\u00e1l\u00f3zat teljes\u00edtm\u00e9ny\u00e9t\u0151l f\u00fcgg\u0151en.<\/p>\n<p><\/p>\n<p>Ha egy kicsit elgondolkodunk a probl\u00e9m\u00e1n, mik\u00f6zben lap\u00e1ttal \u00e1ssuk a havat, akkor egy nyilv\u00e1nval\u00f3 \u00f6tlet juthat esz\u00fcnkbe: sz\u00fcks\u00e9g van egy statsd-re, ami k\u00e9pes elosztott m\u00f3dban m\u0171k\u00f6dni. Teh\u00e1t olyanra, amelyben az id\u0151 \u00e9s a metrik\u00e1k k\u00f6z\u00f6tti szinkroniz\u00e1l\u00e1s megval\u00f3s\u00edtott. \u201eTerm\u00e9szetesen ilyen megold\u00e1s m\u00e1r biztosan l\u00e9tezik\u201d - mondtuk, \u00e9s elkezdt\u00fcnk keresni\u2026 de semmit sem tal\u00e1ltunk. K\u00fcl\u00f6nb\u00f6z\u0151 statsd-kr\u0151l sz\u00f3l\u00f3 dokument\u00e1ci\u00f3t \u00e1tn\u00e9zve (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/etsy\/statsd\/wiki#server-implementations\">https:\/\/github.com\/etsy\/statsd\/wiki#server-implementations<\/a><\/noindex> 2017.12.11-ig) egy\u00e1ltal\u00e1n nem tal\u00e1ltunk semmit. Val\u00f3sz\u00edn\u0171leg sem a fejleszt\u0151k, sem a felhaszn\u00e1l\u00f3k ezekkel a MEGANNYI metrik\u00e1val eddig m\u00e9g nem tal\u00e1lkoztak, k\u00fcl\u00f6nben biztosan kital\u00e1ltak volna valamit.<\/p>\n<p><\/p>\n<p>Ekkor esz\u00fcnkbe jutott a \u201ej\u00e1t\u00e9kszer\u0171\u201d statsd - a bioyino, amit a hackathonon \u00edrtunk csak a sz\u00f3rakoz\u00e1s kedv\u00e9\u00e9rt (a projekt nev\u00e9t a hackathon el\u0151tt gener\u00e1lta egy szkript), \u00e9s r\u00e1j\u00f6tt\u00fcnk, hogy s\u00fcrg\u0151sen sz\u00fcks\u00e9g\u00fcnk van egy saj\u00e1t statsd-re. Mi\u00e9rt?<\/p>\n<p><\/p>\n<ul>\n<li>mert a vil\u00e1gon t\u00fal kev\u00e9s a statsd kl\u00f3n,<\/li>\n<li>mert biztos\u00edtani lehet a k\u00edv\u00e1nt vagy ahhoz k\u00f6zeli hibat\u0171r\u00e9st \u00e9s sk\u00e1l\u00e1zhat\u00f3s\u00e1got (t\u00f6bbek k\u00f6z\u00f6tt a szerverek k\u00f6z\u00f6tti aggreg\u00e1lt metrik\u00e1k szinkroniz\u00e1l\u00e1s\u00e1t \u00e9s a konfliktusok megold\u00e1s\u00e1t),<\/li>\n<li>mert pontosabban lehet m\u00e9rni a metrik\u00e1kat, mint amit a brubeck csin\u00e1l,<\/li>\n<li>mert magunk is gy\u0171jthet\u00fcnk r\u00e9szletesebb statisztik\u00e1t, amit a brubeck gyakorlatilag nem adott meg,<\/li>\n<li>mert ad\u00f3dott a lehet\u0151s\u00e9g, hogy programozzuk a saj\u00e1t high-performance distributed scalable application-n\u00fcnket, ami nem fogja teljesen megism\u00e9telni egy m\u00e1sik hasonl\u00f3 high-performance\u2026 nos, bocs\u00e1nat, architekt\u00far\u00e1j\u00e1t. <\/li>\n<\/ul>\n<p><\/p>\n<p>Mire \u00edrjunk? Term\u00e9szetesen Rust-ra. Mi\u00e9rt?<\/p>\n<p><\/p>\n<ul>\n<li>mert m\u00e1r volt egy protot\u00edpusunk,<\/li>\n<li>mert a cikk \u00edr\u00f3ja abban az id\u0151ben m\u00e1r ismerte a Rust-ot \u00e9s szeretett volna rajta valamit k\u00e9sz\u00edteni a produkci\u00f3 sz\u00e1m\u00e1ra, lehet\u0151s\u00e9ggel, hogy open-source-ba kiadja,<\/li>\n<li>mert a GC-vel rendelkez\u0151 nyelvek nem megfelel\u0151ek sz\u00e1munkra a be\u00e9rkez\u0151 forgalom term\u00e9szet\u00e9t figyelembe v\u00e9ve (gyakorlatilag val\u00f3s idej\u0171) \u00e9s a GC-sz\u00fcnetek gyakorlatilag elfogadhatatlanok, <\/li>\n<li>mert maxim\u00e1lis teljes\u00edtm\u00e9nyre van sz\u00fcks\u00e9g, ami \u00f6sszehasonl\u00edthat\u00f3 a C-vel,<\/li>\n<li>mert a Rust f\u00e9lelem n\u00e9lk\u00fcli p\u00e1rhuzamoss\u00e1got k\u00edn\u00e1l nek\u00fcnk, \u00e9s ha C\/C++-ban kezdt\u00fcnk volna el \u00edrni, akkor m\u00e9g t\u00f6bb sebezhet\u0151s\u00e9get, puffer t\u00falcsordul\u00e1st, versenyhelyzetet \u00e9s egy\u00e9b sz\u00f6rny\u0171 sz\u00f3t kaptunk volna, mint a brubeck.<\/li>\n<\/ul>\n<p><\/p>\n<p>Volt egy \u00e9rv a Rust ellen. A c\u00e9gnek nem volt tapasztalata Rust alap\u00fa projektek l\u00e9trehoz\u00e1s\u00e1ban, \u00e9s most sem tervezz\u00fck, hogy f\u0151 projekt\u00fcnkben haszn\u00e1ljuk. Ez\u00e9rt komoly agg\u00e1lyaink voltak, hogy nem fog m\u0171k\u00f6dni, de \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy kock\u00e1ztatunk, \u00e9s kipr\u00f3b\u00e1ltuk.<\/p>\n<p><\/p>\n<p>Eltelt az id\u0151\u2026<\/p>\n<p><\/p>\n<p>V\u00e9g\u00fcl, n\u00e9h\u00e1ny sikertelen pr\u00f3b\u00e1lkoz\u00e1s ut\u00e1n, elk\u00e9sz\u00fclt az els\u0151 m\u0171k\u00f6d\u0151 verzi\u00f3. Mi lett bel\u0151le? Ilyen lett.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor\" src=\"\/wp-content\/uploads\/2019\/11\/322c4136ed033b80b31a89d7b5f63af8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minden node a saj\u00e1t metrik\u00e1j\u00e1nak egy saj\u00e1t k\u00e9szlet\u00e9t kapja, \u00e9s ezeket felhalmozza, nem aggreg\u00e1lva azokat a t\u00edpusokat, ahol a v\u00e9gs\u0151 aggreg\u00e1l\u00e1shoz a teljes k\u00e9szletre van sz\u00fcks\u00e9g. A node-ok egy elosztott z\u00e1r (distributed lock) protokollal vannak \u00f6sszek\u00f6tve, amely lehet\u0151v\u00e9 teszi a kiv\u00e1laszt\u00e1st az k\u00f6z\u00f6tt\u00fck l\u00e9v\u0151 egyetlen (itt s\u00edrtunk), amely m\u00e9lt\u00f3 arra, hogy a metrik\u00e1kat a Nagyhoz k\u00fcldje. Jelenleg ezt a probl\u00e9m\u00e1t <noindex><a rel=\"nofollow\" href=\"https:\/\/www.consul.io\/docs\/guides\/leader-election.html\">Consul<\/a><\/noindex>, de a j\u00f6v\u0151ben a szerz\u0151 amb\u00edci\u00f3i kiterjednek a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Albibek\/raft-consensus\">saj\u00e1t<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Albibek\/raft-tokio\">a megval\u00f3s\u00edt\u00e1sr\u00f3l<\/a><\/noindex> Raft-ra, ahol a m\u00e9lt\u00f3 persze a konszenzus vezet\u0151 node-ja lesz. A konszenzus mellett a node-ok viszonylag gyakran (alap\u00e9rtelmez\u00e9s szerint m\u00e1sodpercenk\u00e9nt egyszer) k\u00fcldenek a szomsz\u00e9daiknak azon el\u0151-agreg\u00e1lt metrik\u00e1knak a r\u00e9szeit, amelyeket az adott m\u00e1sodperc alatt siker\u00fclt felhalmozni. \u00cdgy a sk\u00e1l\u00e1zhat\u00f3s\u00e1g \u00e9s a hibat\u0171r\u00e9s megmarad \u2014 mindegyik node tov\u00e1bbra is meg\u0151rzi a teljes metrikak\u00e9szletet, de a metrik\u00e1k m\u00e1r aggreg\u00e1lva ker\u00fclnek k\u00fcld\u00e9sre, TCP-n kereszt\u00fcl \u00e9s bin\u00e1ris protokollba k\u00f3dolva, \u00edgy a duplik\u00e1ci\u00f3s k\u00f6lts\u00e9gek jelent\u0151sen cs\u00f6kkennek az UDP-hez k\u00e9pest. A viszonylag nagy sz\u00e1m\u00fa bej\u00f6v\u0151 metrika ellen\u00e9re a felhalmoz\u00e1s nagyon kev\u00e9s mem\u00f3ri\u00e1t \u00e9s m\u00e9g kevesebb CPU-t ig\u00e9nyel. J\u00f3l t\u00f6m\u00f6r\u00edthet\u0151 metrik\u00e1ink sz\u00e1m\u00e1ra ez csup\u00e1n n\u00e9h\u00e1ny tucat megab\u00e1jt adatot jelent. Tov\u00e1bbi b\u00f3nusz, hogy elker\u00fclhetj\u00fck a felesleges adatfel\u00fcl\u00edr\u00e1sokat a Graphite-ban, ahogy az a burbeck eset\u00e9ben t\u00f6rt\u00e9nt.<\/p>\n<p><\/p>\n<p>A UDP csomagok a h\u00e1l\u00f3zati berendez\u00e9seken a h\u00e1l\u00f3zati eszk\u00f6z\u00f6k k\u00f6z\u00f6tt egyszer\u0171 Round Robin m\u00f3dszerrel vannak elosztva. Mag\u00e1t\u00f3l \u00e9rtet\u0151dik, hogy a h\u00e1l\u00f3zati hardver nem elemzi a csomagok tartalm\u00e1t, \u00e9s ez\u00e9rt sokkal t\u00f6bbet k\u00e9pes kezelni, mint 4M csomag m\u00e1sodpercenk\u00e9nt, nem is besz\u00e9lve a metrik\u00e1kr\u00f3l, amelyekr\u0151l egy\u00e1ltal\u00e1n nem tud. Figyelembe v\u00e9ve, hogy a metrik\u00e1k nem egyenk\u00e9nt \u00e9rkeznek minden csomagban, nem el\u0151rel\u00e1that\u00f3 teljes\u00edtm\u00e9nyprobl\u00e9m\u00e1k ebb\u0151l a szempontb\u00f3l. Ha a szerver le\u00e1ll, a h\u00e1l\u00f3zati eszk\u00f6z gyorsan (1-2 m\u00e1sodpercen bel\u00fcl) \u00e9szleli ezt, \u00e9s elt\u00e1vol\u00edtja a le\u00e1llt szervert a rot\u00e1ci\u00f3b\u00f3l. Ennek eredm\u00e9nyek\u00e9nt a passz\u00edv (azaz nem vezet\u0151) csom\u00f3pontokat \u00fagy lehet be- \u00e9s kikapcsolni, hogy szinte \u00e9szre sem vessz\u00fck a grafikonokon a cs\u00f6kken\u00e9st. A legrosszabb, amit vesz\u00edt\u00fcnk, az az utols\u00f3 m\u00e1sodpercben \u00e9rkezett metrik\u00e1k egy r\u00e9sze. A vezet\u0151 v\u00e1ratlan elveszt\u00e9se\/kikapcsol\u00e1sa\/\u00e1tkapcsol\u00e1sa m\u00e9g mindig egy kis anom\u00e1li\u00e1t okoz (a 30 m\u00e1sodperces intervallum tov\u00e1bbra is szinkroniz\u00e1latlan), de ha van kapcsolat a csom\u00f3pontok k\u00f6z\u00f6tt, akkor ezeket a probl\u00e9m\u00e1kat minim\u00e1lisra lehet cs\u00f6kkenteni, p\u00e9ld\u00e1ul szinkroniz\u00e1l\u00f3 csomagok k\u00fcld\u00e9s\u00e9vel.<\/p>\n<p><\/p>\n<p>N\u00e9h\u00e1ny sz\u00f3 a bels\u0151 fel\u00e9p\u00edt\u00e9sr\u0151l. Az alkalmaz\u00e1s term\u00e9szetesen p\u00e1rhuzamos, de a sz\u00e1lak architekt\u00far\u00e1ja elt\u00e9r a brubeckben haszn\u00e1lt\u00f3l. A brubeckben a sz\u00e1lak azonosak - mindegyik egyszerre felel\u0151s az inform\u00e1ci\u00f3gy\u0171jt\u00e9s\u00e9rt \u00e9s az aggreg\u00e1l\u00e1s\u00e9rt. A bioyin\u00f3 munkasz\u00e1lai (workers) k\u00e9t csoportra vannak osztva: az egyik a h\u00e1l\u00f3zat\u00e9rt, a m\u00e1sik az aggreg\u00e1ci\u00f3\u00e9rt felel. Ez a feloszt\u00e1s lehet\u0151v\u00e9 teszi, hogy rugalmasabban kezelj\u00fck az alkalmaz\u00e1st a metrik\u00e1k t\u00edpusa szerint: ahol intenz\u00edv aggreg\u00e1ci\u00f3 sz\u00fcks\u00e9ges, n\u00f6velhetj\u00fck az aggreg\u00e1torok sz\u00e1m\u00e1t, ahol sok a h\u00e1l\u00f3zati forgalom - ott pedig a h\u00e1l\u00f3zati sz\u00e1lak sz\u00e1m\u00e1t n\u00f6velhetj\u00fck. Jelenleg szervereink 8 h\u00e1l\u00f3zati \u00e9s 4 aggreg\u00e1l\u00f3 sz\u00e1lon m\u0171k\u00f6dnek.<\/p>\n<p><\/p>\n<p>Az aggreg\u00e1l\u00f3 (aggreg\u00e1ci\u00f3val foglalkoz\u00f3) r\u00e9sz viszonylag unalmas. A h\u00e1l\u00f3zati sz\u00e1lak \u00e1ltal felt\u00f6lt\u00f6tt pufferek eloszt\u00e1sra ker\u00fclnek az aggreg\u00e1l\u00f3 sz\u00e1lak k\u00f6z\u00f6tt, ahol k\u00e9s\u0151bb feldolgoz\u00e1sra \u00e9s aggreg\u00e1l\u00e1sra ker\u00fclnek. A metrik\u00e1k k\u00e9r\u00e9s\u00e9re m\u00e1s csom\u00f3pontokra val\u00f3 k\u00fcld\u00e9sre ker\u00fclnek. Mindez, bele\u00e9rtve az adatk\u00fcld\u00e9st a csom\u00f3pontok k\u00f6z\u00f6tt \u00e9s a Consul-lal val\u00f3 munk\u00e1t, aszinkron m\u00f3don t\u00f6rt\u00e9nik, a keretrendszeren alapul. <noindex><a rel=\"nofollow\" href=\"https:\/\/tokio.rs\">tokio<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>A h\u00e1l\u00f3zati r\u00e9sz, amely a metrik\u00e1k fogad\u00e1s\u00e1\u00e9rt felel\u0151s, sokkal t\u00f6bb probl\u00e9m\u00e1t okozott a fejleszt\u00e9s sor\u00e1n. A h\u00e1l\u00f3zati folyamatok k\u00fcl\u00f6n entit\u00e1sokba val\u00f3 kiemel\u00e9s\u00e9nek f\u0151 c\u00e9lja az volt, hogy cs\u00f6kkentse az id\u0151t, amelyet a folyamat elt\u00f6lt <em>nem<\/em> az adatokat a socketb\u0151l val\u00f3 olvas\u00e1sra. Az aszinkron UDP \u00e9s a hagyom\u00e1nyos recvmsg haszn\u00e1lat\u00e1val kapcsolatos lehet\u0151s\u00e9gek gyorsan elbuktak: az els\u0151 t\u00fal sok user-space CPU-t ig\u00e9nyel az esem\u00e9nyek feldolgoz\u00e1s\u00e1hoz, a m\u00e1sodik pedig t\u00fal sok kontextusv\u00e1lt\u00e1st ig\u00e9nyel. Ez\u00e9rt most <noindex><a rel=\"nofollow\" href=\"https:\/\/linux.die.net\/man\/2\/recvmmsg\">recvmmsg-t<\/a><\/noindex> nagy bufferrel haszn\u00e1lunk (\u00e9s a bufferek, h\u00f6lgyeim, nem \u00e9ppen trivi\u00e1lis dolgok!). A hagyom\u00e1nyos UDP t\u00e1mogat\u00e1s\u00e1t fenntartottuk az alacsony terhel\u00e9s\u0171 esetekhez, amikor a recvmmsg nem sz\u00fcks\u00e9ges. A multimessage m\u00f3dban siker\u00fcl el\u00e9rni a f\u0151 c\u00e9lt: a h\u00e1l\u00f3zati folyamat t\u00falnyom\u00f3 t\u00f6bbs\u00e9ge az oper\u00e1ci\u00f3s rendszer sor\u00e1t takar\u00edtja el \u2014 az adatokat kiolvassa a socketb\u0151l \u00e9s \u00e1thelyezi a userspace bufferbe, csak ritk\u00e1n kapcsol\u00f3dva arra, hogy a megtelt buffert \u00e1tadja az aggreg\u00e1toroknak. A socketben a sor gyakorlatilag nem halmoz\u00f3dik fel, a kidobott csomagok sz\u00e1ma szinte nem n\u00f6vekszik. <\/p>\n<p>\n<b class=\"spoiler_title\">Megjegyz\u00e9s<\/b><\/p>\n<p>Az alap\u00e9rtelmezett be\u00e1ll\u00edt\u00e1sok szerint a buffer m\u00e9rete el\u00e9g nagyra van \u00e1ll\u00edtva. Ha esetleg \u00fagy d\u00f6nt, hogy saj\u00e1t maga kipr\u00f3b\u00e1lja a szervert, lehet, hogy belefut arra, hogy egy kis mennyis\u00e9g\u0171 metrika elk\u00fcld\u00e9se ut\u00e1n azok nem \u00e9rkeznek meg a Graphite-ba, hanem a h\u00e1l\u00f3zati folyamat buffer\u00e9ben maradnak. Kis mennyis\u00e9g\u0171 metrik\u00e1k eset\u00e9n a konfigur\u00e1ci\u00f3ban a bufsize \u00e9s task-queue-size \u00e9rt\u00e9keket kisebbre kell \u00e1ll\u00edtani.<\/p>\n<p><\/p>\n<p>V\u00e9g\u00fcl \u2014 itt van n\u00e9h\u00e1ny grafikon a grafikonok kedvel\u0151inek.<\/p>\n<p><\/p>\n<p>A bej\u00f6v\u0151 metrik\u00e1k sz\u00e1m\u00e1nak statisztik\u00e1ja minden szerverre vonatkoz\u00f3an: t\u00f6bb mint 2 milli\u00f3 MPS.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor\" src=\"\/wp-content\/uploads\/2019\/11\/c6cb1a36c267657d55ec22df518f8d03.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az egyik node le\u00e1ll\u00edt\u00e1sa \u00e9s a bej\u00f6v\u0151 metrik\u00e1k \u00fajraeloszt\u00e1sa.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor\" src=\"\/wp-content\/uploads\/2019\/11\/106af265a6bc2a8b31fe34df69e9c200.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A kimen\u0151 metrik\u00e1k statisztik\u00e1ja: mindig csak egy node k\u00fcld \u2014 a raidboss.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor\" src=\"\/wp-content\/uploads\/2019\/11\/582730b501a42bb3a371a84bf2e2394b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minden node m\u0171k\u00f6d\u00e9s\u00e9nek statisztik\u00e1i a rendszer k\u00fcl\u00f6nb\u00f6z\u0151 moduljaiban el\u0151fordul\u00f3 hib\u00e1k figyelembev\u00e9tel\u00e9vel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor\" src=\"\/wp-content\/uploads\/2019\/11\/101377281c3add8c598c6439ca25d271.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A bej\u00f6v\u0151 metrik\u00e1k r\u00e9szletez\u00e9se (a metrik\u00e1k nevei el vannak rejtve).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bioyino \u2014 elosztott, sk\u00e1l\u00e1zhat\u00f3 metrikagy\u0171jt\u0151 aggreg\u00e1tor\" src=\"\/wp-content\/uploads\/2019\/11\/6cf0b61b454b0414799460c482e03242.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mit tervezz\u00fck a j\u00f6v\u0151re n\u00e9zve? Term\u00e9szetesen k\u00f3dot \u00edrni! A projekt kezdetben open-source-nak k\u00e9sz\u00fclt, \u00e9s az is marad \u00e9lete v\u00e9g\u00e9ig. A k\u00f6zeli terveink k\u00f6z\u00f6tt szerepel a saj\u00e1t Raft verzi\u00f3ra val\u00f3 \u00e1t\u00e1ll\u00e1s, a peer-protokoll cser\u00e9je egy hordozhat\u00f3bb v\u00e1ltozatra, bels\u0151 statisztik\u00e1k hozz\u00e1ad\u00e1sa, \u00faj metrik\u00e1k bevezet\u00e9se, hibajav\u00edt\u00e1sok \u00e9s egy\u00e9b fejleszt\u00e9sek. <\/p>\n<p><\/p>\n<p>Term\u00e9szetesen \u00f6r\u00f6mmel v\u00e1runk mindenkit, aki seg\u00edtene a projekt fejl\u0151d\u00e9s\u00e9ben: k\u00e9sz\u00edtsetek PR-t, Issues-t, amennyire csak lehet, v\u00e1laszolni fogunk, finom\u00edtani fogunk stb.<\/p>\n<p><\/p>\n<p>Ezzel, ahogy mondani szokt\u00e1k, ennyi, v\u00e1s\u00e1roljatok a mi elef\u00e1ntjainkb\u00f3l!<\/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=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" 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 \/>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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 elosztott, sk\u00e1l\u00e1zhat\u00f3 m\u00e9r\u0151sz\u00e1m aggreg\u00e1tor | ProHoster","description":"Teh\u00e1t, m\u00e9r\u0151sz\u00e1mokat gy\u0171jt\u00f6t\u00f6k. Ahogyan mi is. Mi is gy\u0171jt\u00fcnk m\u00e9r\u0151sz\u00e1mokat. Term\u00e9szetesen az \u00fczlethez sz\u00fcks\u00e9geseket.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/bioyino-raspredelyonnyj-masshtabiruemyj-agregator-metrik","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/52113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=52113"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/52113\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=52113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=52113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=52113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}