{"id":73949,"date":"2020-03-13T02:42:07","date_gmt":"2020-03-12T23:42:07","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-my-v-sportmastere-vybirali-sistemu-keshirovaniya-chast-1"},"modified":"2020-03-13T02:42:07","modified_gmt":"2020-03-12T23:42:07","slug":"kak-my-v-sportmastere-vybirali-sistemu-keshirovaniya-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-my-v-sportmastere-vybirali-sistemu-keshirovaniya-chast-1","title":{"rendered":"Hogyan v\u00e1lasztottunk cache rendszert a Sportmesterben. 1. r\u00e9sz","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hell\u00f3! A nevem Alekszej Pjankov, a Sportmester fejleszt\u0151je vagyok. Ebben <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/485088\/\">a bejegyz\u00e9sben<\/a><\/noindex> elmondom, hogyan indult a Sportmester weboldal\u00e1nak munk\u00e1ja 2012-ben, milyen kezdem\u00e9nyez\u00e9seket siker\u00fclt \"el\u0151nyomni\", \u00e9s \u00e9ppen ellenkez\u0151leg, milyen buktat\u00f3kat gy\u0171jt\u00f6tt\u00fcnk \u00f6ssze.<\/p>\n<p>Ma szeretn\u00e9m megosztani azokat a gondolatokat, amelyek egy m\u00e1sik t\u00e9m\u00e1ra vonatkoznak \u2013 a cache rendszer kiv\u00e1laszt\u00e1s\u00e1ra a Java backendhez a weboldal adminisztr\u00e1ci\u00f3s fel\u00fclet\u00e9n. Ez a t\u00e9ma k\u00fcl\u00f6n\u00f6sen fontos sz\u00e1momra \u2013 b\u00e1r a t\u00f6rt\u00e9net csup\u00e1n 2 h\u00f3napig tartott, ezekben a 60 napban 12-16 \u00f3r\u00e1t dolgoztunk, egyetlen nap sz\u00fcnet n\u00e9lk\u00fcl. Soha nem gondoltam volna, \u00e9s nem is k\u00e9pzeltem, hogy ennyit lehet dolgozni.<\/p>\n<p>Ez\u00e9rt a sz\u00f6veget 2 r\u00e9szre bontom, hogy ne terheljem t\u00fal a kedves olvas\u00f3t. Az els\u0151 r\u00e9sz nagyon k\u00f6nny\u0171 lesz \u2013 egy bevezet\u00e9s, n\u00e9h\u00e1ny \u00e1tgondol\u00e1s a cache-el\u00e9sr\u0151l. Ha m\u00e1r tapasztalt fejleszt\u0151 vagy, vagy dolgozt\u00e1l cache-ekkel \u2013 technikai szempontb\u00f3l val\u00f3sz\u00edn\u0171leg nem lesz \u00faj inform\u00e1ci\u00f3 az \u00edr\u00e1sban. De egy junior sz\u00e1m\u00e1ra egy kis \u00e1ttekint\u00e9s seg\u00edthet abban, hogy merre n\u00e9zzen, ha egyszer ilyen helyzetbe ker\u00fcl.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/490912\/\"><img decoding=\"async\" alt=\"Hogyan v\u00e1lasztottunk cache rendszert a Sportmesterben. 1. r\u00e9sz\" src=\"\/wp-content\/uploads\/2020\/03\/634b7420b86d65bd5175536a1cb39078.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAmikor a Sportmester \u00faj verzi\u00f3j\u00e1t \u00e9lesben ind\u00edtottuk, az adatok megszerz\u00e9se, hogy finoman fogalmazzak, nem volt \u00e9ppen k\u00e9nyelmes. Az alapot olyan t\u00e1bl\u00e1zatok k\u00e9pezt\u00e9k, amelyeket a weboldal kor\u00e1bbi verzi\u00f3j\u00e1hoz (Bitrix) k\u00e9sz\u00edtettek, amelyeket be kellett h\u00fazni az ETL-be, \u00e1talak\u00edtani egy \u00faj form\u00e1ba \u00e9s k\u00fcl\u00f6nf\u00e9le d\u00edsz\u00edt\u00e9sekkel ell\u00e1tni, amelyek egy tucatnyi rendszerb\u0151l sz\u00e1rmaztak. Ahhoz, hogy az \u00faj k\u00e9p vagy term\u00e9kle\u00edr\u00e1s a weboldalon megjelenjen, a k\u00f6vetkez\u0151 napig kellett v\u00e1rni \u2013 az aktualiz\u00e1l\u00e1s \u00e9jszaka, napi egyszer t\u00f6rt\u00e9nt.<\/p>\n<p>Kezdetben annyi aggodalom mer\u00fclt fel az els\u0151 hetekben a termel\u00e9sbe val\u00f3 \u00e1t\u00e1ll\u00e1skor, hogy a tartalomkezel\u0151k k\u00e9nyelmetlens\u00e9gei apr\u00f3s\u00e1gnak t\u0171ntek. De ahogy minden lecsendesedett, a projekt fejl\u0151d\u00e9se folytat\u00f3dott - n\u00e9h\u00e1ny h\u00f3nap m\u00falva, 2015 elej\u00e9n elkezdt\u00fck akt\u00edvan fejleszteni az adminfel\u00fcletet. 2015-ben \u00e9s 2016-ban minden j\u00f3l ment, rendszeresen kiadtunk \u00faj verzi\u00f3kat, az adminfel\u00fclet egyre nagyobb r\u00e9szt \u00f6lelt fel az adatok el\u0151k\u00e9sz\u00edt\u00e9s\u00e9b\u0151l, \u00e9s k\u00e9sz\u00fclt\u00fcnk arra, hogy hamarosan csapatunkra b\u00edzz\u00e1k a legfontosabbat \u00e9s legnehezebbet - a term\u00e9knyomvonalat (az \u00f6sszes term\u00e9kre vonatkoz\u00f3 adatok teljes el\u0151k\u00e9sz\u00edt\u00e9se \u00e9s kezel\u00e9se). De 2017 nyar\u00e1n, k\u00f6zvetlen\u00fcl a term\u00e9knyomvonal elind\u00edt\u00e1sa el\u0151tt, a projekt nagyon neh\u00e9z helyzetbe ker\u00fcl - \u00e9ppen a gyors\u00edt\u00f3t\u00e1raz\u00e1si probl\u00e9m\u00e1k miatt. Err\u0151l az epiz\u00f3dr\u00f3l szeretn\u00e9k besz\u00e9lni ennek a k\u00e9tr\u00e9szes publik\u00e1ci\u00f3nak a m\u00e1sodik r\u00e9sz\u00e9ben.<\/p>\n<p>De ebben a bejegyz\u00e9sben messzir\u0151l kezdem, n\u00e9h\u00e1ny gondolatot foglalok \u00f6ssze - a gyors\u00edt\u00e1raz\u00e1s k\u00f6r\u00fcli elk\u00e9pzel\u00e9seket, amelyeket j\u00f3 lett volna el\u0151re v\u00e9giggondolni egy nagy projekt el\u0151tt.<\/p>\n<h2>Amikor felmer\u00fcl a gyors\u00edt\u00e1raz\u00e1s feladata<\/h2>\n<p>\nA gyors\u00edt\u00e1raz\u00e1s feladata nem mer\u00fcl fel csak \u00fagy. Mi fejleszt\u0151k vagyunk, szoftverterm\u00e9ket \u00edrunk, \u00e9s azt akarjuk, hogy keresett legyen. Ha a term\u00e9k keresett \u00e9s sikeres - a felhaszn\u00e1l\u00f3k \u00e9rkeznek. \u00c9s j\u00f6nnek \u00e9s j\u00f6nnek. \u00c9s egyszer csak nagyon sok felhaszn\u00e1l\u00f3 lesz, \u00e9s ekkor a term\u00e9k nagy terhel\u00e9s\u0171v\u00e9 v\u00e1lik.<\/p>\n<p>A kezdeti szakaszokban nem gondolkodunk a k\u00f3d optimaliz\u00e1l\u00e1s\u00e1ban \u00e9s teljes\u00edtm\u00e9ny\u00e9ben. A l\u00e9nyeg a funkcionalit\u00e1s, gyorsan kiadni egy protot\u00edpust, \u00e9s tesztelni a hipot\u00e9ziseket. \u00c9s ha a terhel\u00e9s n\u0151 - akkor er\u0151s\u00edtj\u00fck a hardvert. Megn\u00f6velj\u00fck k\u00e9tszer-h\u00e1romszor, \u00f6tsz\u00f6r, ak\u00e1r t\u00edzszer is. Valahol itt a p\u00e9nz\u00fcgyek m\u00e1r nem engedik meg. H\u00e1ny felhaszn\u00e1l\u00f3 \u00e9rkezik m\u00e9g? Ez nem csak 2-5-10, hanem ha sikeres lesz \u2013 az 100-1000-t\u0151l eg\u00e9szen 100 ezerig terjedhet. Teh\u00e1t el\u0151bb vagy ut\u00f3bb az optimaliz\u00e1l\u00e1ssal foglalkozni kell.<\/p>\n<p>Tegy\u00fck fel, hogy egy k\u00f3d egy r\u00e9sze (nevezz\u00fck ezt funkci\u00f3nak) rendk\u00edv\u00fcl lassan m\u0171k\u00f6dik, \u00e9s szeretn\u00e9nk cs\u00f6kkenteni a v\u00e9grehajt\u00e1si id\u0151t. A funkci\u00f3 lehet adatb\u00e1zis-hozz\u00e1f\u00e9r\u00e9s, egy bonyolult logika v\u00e9grehajt\u00e1sa \u2013 a l\u00e9nyeg, hogy hossz\u00fa ideig tart. Mennyire lehet cs\u00f6kkenteni a v\u00e9grehajt\u00e1si id\u0151t? V\u00e9gs\u0151 soron null\u00e1ra lehet cs\u00f6kkenteni, nem tov\u00e1bb. De hogyan lehet a v\u00e9grehajt\u00e1si id\u0151t null\u00e1ra cs\u00f6kkenteni? A v\u00e1lasz: teljesen kiz\u00e1rni a v\u00e9grehajt\u00e1st. Ehelyett azonnal visszaadjuk az eredm\u00e9nyt. De hogyan tudjuk meg az eredm\u00e9nyt? A v\u00e1lasz: vagy kisz\u00e1m\u00edtjuk, vagy valahol megn\u00e9zz\u00fck. Kisz\u00e1m\u00edtani \u2013 az sok\u00e1ig tart. Megn\u00e9zni \u2013 az p\u00e9ld\u00e1ul azt jelenti, hogy megjegyezz\u00fck azt az eredm\u00e9nyt, amelyet a funkci\u00f3 kor\u00e1bban adott ugyanezekkel a param\u00e9terekkel.<\/p>\n<p>Ez teh\u00e1t azt jelenti, hogy a funkci\u00f3 megval\u00f3s\u00edt\u00e1sa nem l\u00e9nyeges sz\u00e1munkra. El\u00e9g tudni, hogy milyen param\u00e9terekt\u0151l f\u00fcgg az eredm\u00e9ny. Ha akkor a param\u00e9terek \u00e9rt\u00e9keit egy objektumk\u00e9nt \u00e1br\u00e1zoljuk, amely kulcsk\u00e9nt haszn\u00e1lhat\u00f3 egy t\u00e1rol\u00f3ban \u2013 akkor az eredm\u00e9nyeket lehet t\u00e1rolni, \u00e9s a k\u00f6vetkez\u0151 lek\u00e9rdez\u00e9skor vissza lehet \u00e1ll\u00edtani \u0151ket. Ha ezek a feljegyz\u00e9sek \u00e9s az eredm\u00e9nyek lek\u00e9rdez\u00e9se gyorsabban t\u00f6rt\u00e9nik, mint a funkci\u00f3 v\u00e9grehajt\u00e1sa \u2013 m\u00e1ris van sebess\u00e9gel\u0151ny\u00fcnk. A nyeres\u00e9g m\u00e9rt\u00e9ke el\u00e9rheti a 100, 1000 vagy ak\u00e1r 100 000-szeres n\u00f6veked\u00e9st (10^5 \u2013 ez ink\u00e1bb kiv\u00e9tel, de egy rendk\u00edv\u00fcl lass\u00fa adatb\u00e1zis eset\u00e9n teljesen lehets\u00e9ges).<\/p>\n<h2>A rendszer cache-el\u00e9s\u00e9nek f\u0151 k\u00f6vetelm\u00e9nyei<\/h2>\n<p>\nAz els\u0151 k\u00f6vetelm\u00e9ny, amely a cache-el\u00e9si rendszerhez tartozik \u2014 az gyors olvas\u00e1si sebess\u00e9g, \u00e9s valamivel kisebb m\u00e9rt\u00e9kben \u2014 az \u00edr\u00e1si sebess\u00e9g. Ez igaz, de csak addig, am\u00edg nem kezdj\u00fck el a rendszert \u00e9lesbe \u00e1ll\u00edtani.<\/p>\n<p>N\u00e9zz\u00fcnk egy ilyen esetet.<\/p>\n<p>Tegy\u00fck fel, hogy felk\u00e9sz\u00fclt\u00fcnk a jelenlegi terhel\u00e9sre, \u00e9s most fokozatosan bevezetj\u00fck a cache-el\u00e9st. Kicsit n\u0151 a felhaszn\u00e1l\u00f3k sz\u00e1ma, n\u00f6vekszik a terhel\u00e9s \u2013 kisz\u00e9les\u00edtj\u00fck a cache-eket, itt-ott kapcsol\u00f3dunk. Ez egy ideig tart, \u00e9s m\u00e1r a neh\u00e9z funkci\u00f3k szinte alig h\u00edv\u00f3dnak meg \u2014 az \u00f6sszes f\u0151 terhel\u00e9s a cache-led\u00e9sre nehezedik. A felhaszn\u00e1l\u00f3k sz\u00e1ma ez id\u0151 alatt N-szer n\u0151tt.<\/p>\n<p>Ha az eredeti hardverk\u00e9szlet 2-5-sz\u00f6r\u00f6s lehetett, akkor a cache haszn\u00e1lat\u00e1val a teljes\u00edtm\u00e9nyt ak\u00e1r 10-szeres\u00e9re, vagy jobb esetben 100-szoros\u00e1ra, de ak\u00e1r 1000-szeres\u00e9re is n\u00f6velhett\u00fck. Vagyis ugyanazon a hardveren \u2013 100-szor t\u00f6bb lek\u00e9rdez\u00e9st kezel\u00fcnk. Csod\u00e1latos, meg\u00e9rdemelt\u00fck a jutalmat!<\/p>\n<p>De most, egy sz\u00e9p pillanatban, v\u00e9letlen\u00fcl, a rendszer \u00f6sszeomlott \u00e9s a cache megsemmis\u00fclt. Semmi k\u00fcl\u00f6n\u00f6s \u2013 hiszen a cache-t a \"magas olvas\u00e1si \u00e9s \u00edr\u00e1si sebess\u00e9g, a t\u00f6bbi nem fontos\" k\u00f6vetelm\u00e9nye alapj\u00e1n v\u00e1lasztottuk.<\/p>\n<p>A kezd\u0151 terhel\u00e9shez k\u00e9pest a hardver tartal\u00e9kunk 2-5 szerese volt, m\u00edg a terhel\u00e9s ezen id\u0151 alatt 10-100-szor n\u0151tt. A cache seg\u00edts\u00e9g\u00e9vel kiz\u00e1rtuk a neh\u00e9z funkci\u00f3k h\u00edv\u00e1sait, \u00edgy minden z\u00f6kken\u0151mentesen m\u0171k\u00f6d\u00f6tt. De most, cache n\u00e9lk\u00fcl \u2013 mennyivel fog cs\u00f6kkenni a rendszer teljes\u00edtm\u00e9nye? Mi fog t\u00f6rt\u00e9nni? A rendszer le fog \u00e1llni.<\/p>\n<p>M\u00e9g ha a cache nem is pusztult el, csak egy id\u0151re ki\u00fcr\u00fclt \u2013 \u00fajra fel kell majd meleg\u00edteni, \u00e9s ez id\u0151t fog ig\u00e9nybe venni. Ez id\u0151 alatt a f\u0151 terhel\u00e9s a funkci\u00f3kra fog nehezedni.<\/p>\n<p>K\u00f6vetkeztet\u00e9s: a nagy terhel\u00e9s\u0171 projektek m\u0171k\u00f6d\u00e9se olyan rendszert ig\u00e9nyel, amely nemcsak magas olvas\u00e1si \u00e9s \u00edr\u00e1si sebess\u00e9get biztos\u00edt, hanem adatmeg\u0151rz\u00e9st \u00e9s hib\u00e1val szembeni ellen\u00e1ll\u00f3s\u00e1got is.<\/p>\n<h2>A v\u00e1laszt\u00e1s gy\u00f6trelmei<\/h2>\n<p>\nAz admin paneles projekt sor\u00e1n a v\u00e1laszt\u00e1s \u00edgy t\u00f6rt\u00e9nt: el\u0151sz\u00f6r Hazelcast-ot telep\u00edtett\u00fcnk, mivel m\u00e1r ismert\u00fck ezt a term\u00e9ket a f\u0151 weboldal tapasztalatai alapj\u00e1n. De itt ez a v\u00e1laszt\u00e1s balul s\u00fclt el \u2013 a terhel\u00e9si profilunkhoz a Hazelcast nemcsak lassan, hanem kifejezetten iszony\u00faan lassan m\u0171k\u00f6dik. A termel\u00e9si bevezet\u00e9s hat\u00e1ridej\u00e9re pedig addigra m\u00e1r szerz\u0151dt\u00fcnk.<\/p>\n<p>Spoiler: elmondom a m\u00e1sodik r\u00e9szben, hogy pontosan hogyan alakultak a k\u00f6r\u00fclm\u00e9nyek, hogy ilyen csapda\u00e1ba est\u00fcnk, \u00e9s milyen \u00e9les \u00e9s fesz\u00fclt helyzetbe ker\u00fclt\u00fcnk \u2013 \u00e9s hogyan jutottunk el, \u00e9s hogyan m\u00e1sztunk ki. De most csak annyit mondok, hogy ez egy komoly stressz volt, \u00e9s \"gondolkodni \u2013 valahogy nem tudok, r\u00e1zom a palackot\". A \"palackot r\u00e1zom\" \u2013 ez is egy spoiler, err\u0151l kicsit k\u00e9s\u0151bb.<\/p>\n<p>Mit tett\u00fcnk:<\/p>\n<ol>\n<li>\u00d6ssze\u00e1ll\u00edtunk egy list\u00e1t az \u00f6sszes rendszerr\u0151l, amit a Google \u00e9s a StackOverflow aj\u00e1nl. Kicsit t\u00f6bb, mint 30.<\/li>\n<li>Terhel\u00e9si teszteket \u00edrunk, amelyek a termel\u00e9sre jellemz\u0151ek. Ehhez r\u00f6gz\u00edtett\u00fck az adatokat, amelyek a rendszerben mennek \u00e1t a termel\u00e9si k\u00f6rnyezetben \u2013 egyfajta sniffer az adatok sz\u00e1m\u00e1ra, amelyek nincsenek a h\u00e1l\u00f3zaton, de a rendszeren bel\u00fcl. A tesztekbe pontosan ezeket az adatokat futtattuk.<\/li>\n<li>Az eg\u00e9sz csapat, mindenki v\u00e1laszt egy k\u00f6vetkez\u0151 rendszert a list\u00e1r\u00f3l, be\u00e1ll\u00edtja, elv\u00e9gzi a teszteket. Ha a teszt nem siker\u00fcl, a terhel\u00e9st nem b\u00edrja \u2013 kidobjuk, \u00e9s \u00e1tmegy\u00fcnk a k\u00f6vetkez\u0151re a sorban.<\/li>\n<li>A 17. rendszeren vil\u00e1goss\u00e1 v\u00e1lt, hogy minden rem\u00e9nytelen. El\u00e9g a \"palack r\u00e1z\u00e1s\u00e1b\u00f3l\", itt az ideje komolyan gondolkodni.<\/li>\n<\/ol>\n<p>\nDe ez az a lehet\u0151s\u00e9g, amikor olyan rendszert kell v\u00e1lasztani, amely \"\u00e1tny\u00falik a sebess\u00e9gen\" az el\u0151re elk\u00e9sz\u00edtett tesztekben. Mi van, ha m\u00e9g nincsenek tesztek, \u00e9s gyorsabban szeretn\u00e9nk v\u00e1lasztani?<\/p>\n<p>Modellez\u00fcnk egy ilyen helyzetet (nehezen elk\u00e9pzelhet\u0151, hogy egy k\u00f6z\u00e9phalad\u00f3 fejleszt\u0151 a v\u00e1kuumban \u00e9l, \u00e9s a v\u00e1laszt\u00e1s id\u0151pontj\u00e1ban m\u00e9g nem alak\u00edtotta ki a preferenci\u00e1j\u00e1t, hogy melyik term\u00e9ket pr\u00f3b\u00e1lja ki el\u0151sz\u00f6r \u2014 ez\u00e9rt a tov\u00e1bbi gondolatok ink\u00e1bb elm\u00e9letiak\/filoz\u00f3fiaiak\/ a juniorok sz\u00e1m\u00e1ra).<\/p>\n<p>Miut\u00e1n meghat\u00e1roztuk az ig\u00e9nyeket, elkezdj\u00fck kiv\u00e1lasztani a dobozb\u00f3l val\u00f3 megold\u00e1st. Mi\u00e9rt tal\u00e1ljunk ki \u00fajra a kereket: elmegy\u00fcnk \u00e9s elhozunk egy k\u00e9sz gyors\u00edt\u00f3t\u00e1r-rendszert.<\/p>\n<p>Ha csak most kezded \u00e9s Google-ozol, akkor plusz-m\u00ednusz az sorrend, de \u00f6sszess\u00e9g\u00e9ben az ir\u00e1nyok a k\u00f6vetkez\u0151k lesznek. El\u0151sz\u00f6r a Redisra fogsz bukkanni, ami minden\u00fctt a k\u00f6ztudatban van. Azt\u00e1n megtudod, hogy l\u00e9tezik az EhCache, mint a legr\u00e9gebbi \u00e9s legmegb\u00edzhat\u00f3bb rendszer. Tov\u00e1bb\u00e1 sz\u00f3 esik a Tarantoolr\u00f3l \u2014 egy hazai fejleszt\u00e9s, aminek egyedi megold\u00e1sai vannak. \u00c9s m\u00e9g az Ignite-r\u00f3l is, mert most emelkedik a n\u00e9pszer\u0171s\u00e9ge \u00e9s \u00e9lvezi a SberTech t\u00e1mogat\u00e1s\u00e1t. A v\u00e9g\u00e9n m\u00e9g a Hazelcast, mert az enterprise vil\u00e1g\u00e1ban gyakran felt\u0171nik a nagy c\u00e9gek k\u00f6r\u00e9ben.<\/p>\n<p>Ezzel a lista nem mer\u00fcl ki, tucatnyi rendszer l\u00e9tezik. \u00c9s mi csak egyet csatlakoztatunk. Elvessz\u00fck az \u00f6t kiv\u00e1lasztott rendszert a \"sz\u00e9ps\u00e9gversenyre\" \u00e9s lebonyol\u00edtjuk a v\u00e1laszt\u00e1st. Ki lesz a gy\u0151ztes?<\/p>\n<h3>Redis<\/h3>\n<p>\nOlvassuk el, mit mondanak a hivatalos oldalon.<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/\">Redis<\/a><\/noindex> \u2014 opensource projekt. In-memory adatb\u00e1zist k\u00edn\u00e1l, lehet\u0151s\u00e9get biztos\u00edt on-disk t\u00e1rol\u00e1sra, automatikus eloszt\u00e1st part\u00edci\u00f3kra, magas rendelkez\u00e9sre \u00e1ll\u00e1st \u00e9s helyre\u00e1ll\u00edt\u00e1st h\u00e1l\u00f3zati megszak\u00edt\u00e1sok ut\u00e1n.<\/p>\n<p>\u00dagy t\u0171nik, hogy minden t\u00f6k\u00e9letes, \u00e9rdemes integr\u00e1lni \u2014 mindent megtesz, amire sz\u00fcks\u00e9g van. De csak \u00fagy k\u00edv\u00e1ncsis\u00e1gb\u00f3l n\u00e9zz\u00fck meg a t\u00f6bbi jel\u00f6ltet is.<\/p>\n<h3>EhCache<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.ehcache.org\/\">EhCache<\/a><\/noindex> \u2014 \"a legsz\u00e9lesebb k\u00f6rben haszn\u00e1lt gyors\u00edt\u00f3t\u00e1r Java-hoz\" (a hivatalos weboldal szlogenj\u00e9nek ford\u00edt\u00e1sa). Szint\u00e9n opensource. Itt meg\u00e9rtj\u00fck, hogy a Redis nem Java-ra van optimaliz\u00e1lva, hanem \u00e1ltal\u00e1nos, \u00e9s egy wrapper sz\u00fcks\u00e9ges a kommunik\u00e1ci\u00f3hoz. Az EhCache sokkal k\u00e9nyelmesebb. Mit \u00edg\u00e9r m\u00e9g a rendszer? Megb\u00edzhat\u00f3s\u00e1got, letesztelts\u00e9get, teljes funkcionalit\u00e1st. Nos, \u00e9s emellett ez a legelterjedtebb. Terab\u00e1jt adatokat gyors\u00edt.<\/p>\n<p>Elhanyagoltam a Redis-t, k\u00e9sz vagyok v\u00e1lasztani az EhCache-t.<\/p>\n<p>De a hazaszeretet \u00e9rz\u00e9se arra k\u00e9sztet, hogy megn\u00e9zzem, miben j\u00f3 a Tarantool.<\/p>\n<h3>Tarantool<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.tarantool.io\/ru\/\">Tarantool<\/a><\/noindex> \u2014 bemutat\u00e1sra ker\u00fcl a \u201eVal\u00f3s idej\u0171 adatintegr\u00e1ci\u00f3s platform\u201d jel\u00f6l\u00e9s alatt. Nagyon bonyolultan hangzik, ez\u00e9rt r\u00e9szletesen \u00e1tn\u00e9zz\u00fck az oldalt, \u00e9s megtal\u00e1ljuk a hangzatos \u00e1ll\u00edt\u00e1st: \u201eMinden adatot 100%-ban a mem\u00f3ri\u00e1ban t\u00e1rol\u201d. Ez k\u00e9rd\u00e9seket kell, hogy felvet, hiszen az adatok mennyis\u00e9ge sokkal nagyobb lehet, mint a mem\u00f3ria. A ki\u00e9rtelmez\u00e9s az, hogy itt arra utalnak, hogy a Tarantool nem v\u00e9gez szerializ\u00e1ci\u00f3t az adatok lemezre \u00edr\u00e1sakor a mem\u00f3ri\u00e1b\u00f3l. Ehelyett alacsony szint\u0171 rendszerjellemz\u0151ket haszn\u00e1lnak, amikor a mem\u00f3ria egyszer\u0171en a f\u00e1jlrendszerre mappelve van, meglehet\u0151sen j\u00f3 I\/O teljes\u00edtm\u00e9nnyel. \u00d6sszess\u00e9g\u00e9ben csod\u00e1latosan \u00e9s nagyszer\u0171en megoldott\u00e1k.<\/p>\n<p>N\u00e9zz\u00fck az implement\u00e1ci\u00f3kat: Mail.ru v\u00e1llalati gerinc, Avito, Beeline, MegaFon, Alfa Bank, Gazprom\u2026<\/p>\n<p>Ha m\u00e9g voltak k\u00e9telyeim a Tarantool kapcs\u00e1n, a Mastercard bevezet\u00e9si esettanulm\u00e1nya meggy\u0151z\u00f6tt. \u00c9n a Tarantool-t v\u00e1lasztom.<\/p>\n<p>De v\u00e9g\u00fcl is\u2026<\/p>\n<h3>Ignite<\/h3>\n<p>\n\u2026 van m\u00e9g <noindex><a rel=\"nofollow\" href=\"https:\/\/ignite.apache.org\/\">Ignite<\/a><\/noindex>, bejelentve mint \u201ein-memory sz\u00e1m\u00edt\u00e1si platform\u2026 in-memory sebess\u00e9g petab\u00e1jtnyi adaton\u201d. Itt is sok el\u0151ny van: elosztott in-memory cache, a leggyorsabb key-value t\u00e1rol\u00f3 \u00e9s cache, horizont\u00e1lis sk\u00e1l\u00e1zhat\u00f3s\u00e1g, magas rendelkez\u00e9sre \u00e1ll\u00e1s, szigor\u00fa integrit\u00e1s. \u00d6sszess\u00e9g\u00e9ben \u00fagy t\u0171nik, hogy a leggyorsabb az Ignite.<\/p>\n<p>Implement\u00e1ci\u00f3k: Sberbank, American Airlines, Yahoo! Japan. Azt\u00e1n m\u00e9g megtudom, hogy az Ignite nemcsak a Sberbankban van bevezetve, hanem a SberTech csapata a saj\u00e1t embereit k\u00fcldi az Ignite csapat\u00e1hoz a term\u00e9k tov\u00e1bbfejleszt\u00e9s\u00e9re. Ez teljesen elnyer, \u00e9s k\u00e9sz vagyok az Ignite-t v\u00e1lasztani.<\/p>\n<p>Teljesen \u00e9rthetetlen, hogy mi\u00e9rt, megn\u00e9zem az \u00f6t\u00f6dik pontot.<\/p>\n<h3>Hazelcast<\/h3>\n<p>\nBenyitok az oldalra <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.com\/\">Hazelcast<\/a><\/noindex>, olvasok. \u00c9s kider\u00fcl, hogy a leggyorsabb megold\u00e1s az elosztott cache-el\u00e9sre \u2013 az Hazelcast. M\u00e9g sokkal gyorsabb, mint a t\u00f6bbi megold\u00e1s, \u00e9s egy\u00e1ltal\u00e1n \u0151 a vezet\u0151 az in-memory data grid ter\u00fclet\u00e9n. E h\u00e1tt\u00e9rrel b\u00e1rmi m\u00e1st v\u00e1lasztani \u2013 az \u00f6nmagunk ir\u00e1nti tiszteletlens\u00e9g. R\u00e1ad\u00e1sul redund\u00e1ns adatokat haszn\u00e1l a klaszter folyamatos m\u0171k\u00f6d\u00e9s\u00e9hez, adatveszt\u00e9s n\u00e9lk\u00fcl.<\/p>\n<p>Minden, k\u00e9sz vagyok az Hazelcast-t v\u00e1lasztani.<\/p>\n<h2>\u00d6sszehasonl\u00edt\u00e1s<\/h2>\n<p>\nDe ha megn\u00e9zz\u00fck, mind az \u00f6t jel\u00f6lt \u00fagy van bemutatva, hogy mindegyik\u00fck a legjobb. Hogyan v\u00e1lasszunk? Megn\u00e9zhetj\u00fck, hogy melyik a legn\u00e9pszer\u0171bb, kereshet\u00fcnk \u00f6sszehasonl\u00edt\u00e1sokat, \u00e9s a fejf\u00e1j\u00e1s elt\u0171nik.<\/p>\n<p>Tal\u00e1lunk egy <noindex><a rel=\"nofollow\" href=\"https:\/\/db-engines.com\/en\/ranking_trend\">\u00e1ttekint\u00e9st<\/a><\/noindex>, v\u00e1lasszuk ki az \u00f6t rendszer\u00fcnket.<\/p>\n<p><img decoding=\"async\" alt=\"Hogyan v\u00e1lasztottunk cache rendszert a Sportmesterben. 1. r\u00e9sz\" src=\"\/wp-content\/uploads\/2020\/03\/98a99bbce026318ac08aacfd829935bc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nItt sorba vannak \u00e1ll\u00edtva: a tetej\u00e9n a Redis, m\u00e1sodik helyen a Hazelcast, n\u00e9pszer\u0171s\u00f6dik a Tarantool \u00e9s az Ignite, m\u00edg az EhCache v\u00e1ltozatlanul marad. <\/p>\n<p>De n\u00e9zz\u00fck meg a <noindex><a rel=\"nofollow\" href=\"https:\/\/db-engines.com\/en\/ranking_definition\">sz\u00e1m\u00edt\u00e1si m\u00f3dszert<\/a><\/noindex>: weblapokra mutatott linken, a rendszer ir\u00e1nti \u00e1ltal\u00e1nos \u00e9rdekl\u0151d\u00e9s, \u00e1ll\u00e1saj\u00e1nlatok \u2014 nagyszer\u0171! Teh\u00e1t amikor le\u00e1ll a rendszerem, azt mondom: \u00abNem, ez megb\u00edzhat\u00f3! Rengeteg \u00e1ll\u00e1saj\u00e1nlat van\u2026\u00bb. Egy ilyen egyszer\u0171 \u00f6sszehasonl\u00edt\u00e1s nem elegend\u0151.<\/p>\n<p>Ezek a rendszerek nem csup\u00e1n gyors\u00edt\u00f3t\u00e1raz\u00e1sra szolg\u00e1lnak. Rengeteg \u00faj funkci\u00f3val rendelkeznek, p\u00e9ld\u00e1ul nemcsak az adatok ker\u00fclnek a klienshez feldolgoz\u00e1sra, hanem \u00e9ppen ellenkez\u0151leg: a k\u00f3d, amit v\u00e9gre kell hajtani az adatokkal, \u00e1tker\u00fcl a szerverre, ott v\u00e9grehajt\u00e1sra ker\u00fcl, \u00e9s az eredm\u00e9ny visszat\u00e9r. Mint k\u00fcl\u00f6n\u00e1ll\u00f3 gyors\u00edt\u00f3t\u00e1raz\u00e1si rendszert nem is annyira gyakran vizsg\u00e1lj\u00e1k \u0151ket.<\/p>\n<p>Rendben, nem adjuk fel, keress\u00fcnk k\u00f6zvetlen \u00f6sszehasonl\u00edt\u00e1st a rendszerek k\u00f6z\u00f6tt. Vegy\u00fck a k\u00e9t legjobb lehet\u0151s\u00e9get \u2014 Redis \u00e9s Hazelcast. A sebess\u00e9g \u00e9rdekel, ezen a t\u00e9ren fogjuk \u00f6sszehasonl\u00edtani \u0151ket.<\/p>\n<h3>Hz vs Redis<\/h3>\n<p>\nTal\u00e1lunk ilyet <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.com\/resources\/benchmark-redis-3-2-8-vs-hazelcast-3-8\/\">\u00f6sszehasonl\u00edt\u00e1s<\/a><\/noindex>:<br \/>\n<img decoding=\"async\" alt=\"Hogyan v\u00e1lasztottunk cache rendszert a Sportmesterben. 1. r\u00e9sz\" src=\"\/wp-content\/uploads\/2020\/03\/c59ff32b3b61f68f0c3917c1de2aaa8f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nK\u00e9k \u2014 ez a Redis, piros a Hazelcast. A Hazelcast minden\u00fctt nyer, \u00e9s ez indokl\u00e1ssal is al\u00e1t\u00e1masztva: t\u00f6bb sz\u00e1l\u00fa, nagym\u00e9rt\u00e9kben optimaliz\u00e1lt, minden sz\u00e1l saj\u00e1t part\u00edci\u00f3val dolgozik, ez\u00e9rt nincsenek blokkok. A Redis pedig egy sz\u00e1l\u00fa, a modern t\u00f6bbmagos CPU-t\u00f3l nem nyer. A Hazelcast aszinkron I\/O-t haszn\u00e1l, a Redis-Jedis pedig blokkol\u00f3 socket-eket. V\u00e9g\u00fcl is, a Hazelcast bin\u00e1ris protokollt alkalmaz, m\u00edg a Redis sz\u00f6vegre orient\u00e1lt, teh\u00e1t nem hat\u00e9kony.<\/p>\n<p>Biztos, ami biztos, n\u00e9zz\u00fcnk meg m\u00e9g egy \u00f6sszehasonl\u00edt\u00f3 forr\u00e1st. Mit mutat nek\u00fcnk?<\/p>\n<h3>Redis vs Hz<\/h3>\n<p>\nM\u00e9g egy <noindex><a rel=\"nofollow\" href=\"https:\/\/redislabs.com\/blog\/benchmarking-redis-enterprise-5-2-0-vs-hazelcast-3-9\/\">\u00f6sszehasonl\u00edt\u00e1s<\/a><\/noindex>:<br \/>\n<img decoding=\"async\" alt=\"Hogyan v\u00e1lasztottunk cache rendszert a Sportmesterben. 1. r\u00e9sz\" src=\"\/wp-content\/uploads\/2020\/03\/61e466d367dd6f9d52c1d7c6443d1713.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nItt ford\u00edtva, piros \u2014 ez a Redis. Teh\u00e1t a Redis teljes\u00edtm\u00e9nyben nyer a Hazelcast el\u0151tt. Az els\u0151 \u00f6sszehasonl\u00edt\u00e1sban a Hazelcast nyert, a m\u00e1sodikban pedig a Redis. <noindex><a rel=\"nofollow\" href=\"https:\/\/redislabs.com\/blog\/benchmarking-redis-enterprise-5-2-0-vs-hazelcast-3-9\/\">Itt viszont<\/a><\/noindex> nagyon pontosan elmagyar\u00e1zt\u00e1k, mi\u00e9rt nyert a Hazelcast az el\u0151z\u0151 \u00f6sszehasonl\u00edt\u00e1sban.<\/p>\n<p>Kider\u00fcl, hogy az els\u0151 eredm\u00e9ny t\u00e9nylegesen manipul\u00e1lt volt: a Redis a gy\u00e1ri dobozb\u00f3l ker\u00fclt el\u0151, m\u00edg a Hazelcast tesztesetre lett optimaliz\u00e1lva. Teh\u00e1t azt kell mondanunk: egyr\u00e9szt senkinek sem szabad hinni, m\u00e1sr\u00e9szt ha v\u00e9g\u00fcl v\u00e1laszthatunk rendszert, azt m\u00e9g helyesen be is kell \u00e1ll\u00edtanunk. Ezek a be\u00e1ll\u00edt\u00e1sok tucatnyi, szinte sz\u00e1z param\u00e9tert tartalmaznak.<\/p>\n<h2>R\u00e1zza meg a palackot<\/h2>\n<p>\n\u00c9s az eg\u00e9sz folyamatot, amit most v\u00e9grehajtottunk, egy \u00edgy fogalmazhat\u00f3 metafor\u00e1val tudom megmagyar\u00e1zni: \u00abR\u00e1zza meg a palackot\u00bb. Teh\u00e1t most nem kell programozni, most a legfontosabb az, hogy tudjunk olvasni a stackoverflow-n. A csapatomban van egy szakember, aki pontosan \u00edgy dolgozik kritikus pillanatokban.<\/p>\n<p>Mit csin\u00e1l? L\u00e1t egy m\u0171k\u00f6d\u00e9sk\u00e9ptelen dolgot, l\u00e1tja a stack trace-t, kiv\u00e1laszt bel\u0151le p\u00e1r sz\u00f3t (hogy pontosan melyeket \u2013 ez az \u0151 szak\u00e9rtelme), keres a Google-ben, \u00e9s a v\u00e1laszok k\u00f6z\u00f6tt megtal\u00e1lja a Stack Overflow-t. Nem olvasva, nem gondolkozva, a v\u00e1laszok k\u00f6z\u00f6tt kiv\u00e1laszt valamit, ami a legink\u00e1bb hasonl\u00edt a \u201ecsin\u00e1lni azt \u00e9s ezt\u201d javaslatra (az, hogy melyik v\u00e1laszt v\u00e1lasztja \u2013 ez az \u0151 tehets\u00e9ge, mert nem mindig ez a v\u00e1lasz az, ami a legt\u00f6bb like-ot kapta), alkalmazza, n\u00e9zi: ha valami v\u00e1ltozott, akkor szuper. Ha nem v\u00e1ltozott \u2013 vissza\u00e1ll\u00edtjuk. \u00c9s ism\u00e9telj\u00fck a futtat\u00e1s-ellen\u0151rz\u00e9s-keres\u00e9s ciklust. \u00cdgy, intuit\u00edv m\u00f3don, eljut od\u00e1ig, hogy id\u0151vel a k\u00f3d m\u0171k\u00f6dik. Nem tudja, mi\u00e9rt, nem tudja, mit csin\u00e1lt, nem tudja elmagyar\u00e1zni. De! Ez a dolog m\u0171k\u00f6dik. \u00c9s a \u201et\u0171z eloltva\u201d. Most n\u00e9zz\u00fck meg, mit csin\u00e1ltunk. Amikor a program m\u0171k\u00f6dik \u2013 ez sokkal k\u00f6nnyebb. \u00c9s jelent\u0151sen sp\u00f3rol az id\u0151vel.<\/p>\n<p>Ez a m\u00f3dszer nagyon j\u00f3l magyar\u00e1zhat\u00f3 egy p\u00e9ld\u00e1val.<\/p>\n<p>R\u00e9gen nagyon n\u00e9pszer\u0171 volt haj\u00f3t rakni egy palackba. Itt a haj\u00f3 nagy \u00e9s t\u00f6r\u00e9keny, m\u00edg a palack nyaka nagyon sz\u0171k, nem lehet belenyomni. Hogyan lehet \u00f6ssze\u00e1ll\u00edtani?<\/p>\n<p><img decoding=\"async\" alt=\"Hogyan v\u00e1lasztottunk cache rendszert a Sportmesterben. 1. r\u00e9sz\" src=\"\/wp-content\/uploads\/2020\/03\/6c69e04080f1f0da81abf7a6a80510f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nVan egy ilyen m\u00f3dszer, nagyon gyors \u00e9s nagyon hat\u00e9kony.<\/p>\n<p>A haj\u00f3 rengeteg apr\u00f3 dologb\u00f3l \u00e1ll: p\u00e1lc\u00e1kb\u00f3l, k\u00f6telekb\u0151l, vitorl\u00e1kb\u00f3l, ragaszt\u00f3b\u00f3l. Mindezt a palackba tessz\u00fck.<br \/>\nK\u00e9t k\u00e9zzel megfogjuk a palackot, \u00e9s elkezdj\u00fck r\u00e1zni. R\u00e1zogatjuk, r\u00e1zogatjuk. \u00c9s \u00e1ltal\u00e1ban \u2013 teljes k\u00e1osz lesz, persze. De n\u00e9ha. N\u00e9ha siker\u00fcl egy haj\u00f3t \u00f6sszehozni! Pontosabban, valami, ami hasonl\u00edt egy haj\u00f3ra.<\/p>\n<p>Megmutatjuk ezt a valamit valakinek: \u201eSzergej, l\u00e1tod!?\u201d. \u00c9s t\u00e9nyleg, messzir\u0151l \u2013 \u00fagy t\u0171nik, mint egy haj\u00f3. De azt tov\u00e1bb nem lehet engedni.<\/p>\n<p>Van egy m\u00e1sik m\u00f3dszer is. A fejlettebb fi\u00fak, \u00edgy hackers haszn\u00e1lj\u00e1k.<\/p>\n<p>Adtam egy feladatot egy ilyen sr\u00e1cnak, mindent megcsin\u00e1lt, \u00e9s elt\u0171nt. \u00c9s n\u00e9zed \u2013 \u00fagy t\u0171nik, el van k\u00e9sz\u00edtve. De egy id\u0151 m\u00falva, amikor ki kell jav\u00edtani a k\u00f3dot \u2013 elkezd\u0151dik a k\u00e1osz\u2026 J\u00f3, hogy \u0151 m\u00e1r messze elt\u00e1volodott. Ezek a fi\u00fak, akik egy palack p\u00e9ld\u00e1j\u00e1n \u00edgy csin\u00e1lnak: l\u00e1tj\u00e1k, hogy ahol a fen\u00e9k van \u2013 az \u00fcveg \u00edvel. \u00c9s nem teljesen vil\u00e1gos, hogy \u00e1tl\u00e1tsz\u00f3-e vagy sem. Akkor a \u201ehackerek\u201d lev\u00e1gj\u00e1k ezt a feneket, belehelyezik a haj\u00f3t, a feneket \u00fajra ragasztj\u00e1k, \u00e9s \u00fagy t\u0171nik, mintha \u00edgy kellene lennie.<\/p>\n<p>A feladat megfogalmaz\u00e1sa szempontj\u00e1b\u00f3l minden rendben van. De mi\u00e9rt k\u00e9sz\u00edten\u00e9nek egy ilyen haj\u00f3t, kinek van r\u00e1 sz\u00fcks\u00e9ge? Funkcionalit\u00e1sa nincs. \u00c1ltal\u00e1ban az ilyen haj\u00f3k aj\u00e1nd\u00e9kok nagyon magas rang\u00fa embereknek, akik a polcukra \u00e1ll\u00edtj\u00e1k \u0151ket, mint valami szimb\u00f3lumot, mint jelet. \u00c9s ha egy ilyen szem\u00e9ly, egy nagyv\u00e1llalat vezet\u0151je vagy magas rang\u00fa hivatalnok, el\u00e9 ker\u00fcl egy ilyen sil\u00e1ny munka, amelynek lev\u00e1gt\u00e1k a nyak\u00e1t? Jobb, ha err\u0151l soha nem tud. Teh\u00e1t hogyan k\u00e9sz\u00edtik ezeket a haj\u00f3kat, amelyeket fontos szem\u00e9lyeknek lehet aj\u00e1nd\u00e9kozni?<\/p>\n<p>Az egyetlen hely, amely kulcsfontoss\u00e1g\u00fa \u00e9s amivel t\u00e9nyleg semmit sem lehet tenni, az a haj\u00f3test. A haj\u00f3test \u00e9ppen a nyakon \u00e1tmegy. Mik\u00f6zben a haj\u00f3t a palackon k\u00edv\u00fcl \u00e1ll\u00edtj\u00e1k \u00f6ssze. De nem csak \u00f6ssze kell rakni a haj\u00f3t, ez igazi \u00e9kszerk\u00e9sz\u00edt\u00e9si mesters\u00e9g. A k\u00fcl\u00f6nb\u00f6z\u0151 alkatr\u00e9szekhez speci\u00e1lis karok ker\u00fclnek, amelyek lehet\u0151v\u00e9 teszik, hogy k\u00e9s\u0151bb felemelj\u00e9k \u0151ket. P\u00e9ld\u00e1ul az vitorl\u00e1kat \u00f6sszecsukj\u00e1k, \u00f3vatosan beviszik, majd csipesz seg\u00edts\u00e9g\u00e9vel nagyon prec\u00edzen \u00e9s \u00f3vatosan megfesz\u00edtik \u00e9s felemelik. Az eredm\u00e9ny egy olyan m\u0171alkot\u00e1s, amelyet tiszta lelkiismerettel \u00e9s b\u00fcszkes\u00e9ggel aj\u00e1nd\u00e9kozhatnak.<\/p>\n<p>Ha azt akarjuk, hogy a projekt sikeres legyen \u2013 a csapatban legal\u00e1bb egy \u00e9kszer\u00e9sznek kell lennie. Annak, aki gondoskodik a term\u00e9k min\u0151s\u00e9g\u00e9r\u0151l, \u00e9s figyelembe veszi az \u00f6sszes szempontot, m\u00e9g a stresszes pillanatokban is, amikor a k\u00f6r\u00fclm\u00e9nyek s\u00fcrg\u0151ss\u00e9get ig\u00e9nyelnek, fel\u00e1ldozva a fontosat. Minden sikeres projekt, amely tart\u00f3s \u00e9s id\u0151\u00e1ll\u00f3, ezen az elven alapul. Van benn\u00fck valami nagyon prec\u00edz \u00e9s egyedi, ami minden el\u00e9rhet\u0151 lehet\u0151s\u00e9get kihaszn\u00e1l. A palackban l\u00e9v\u0151 haj\u00f3 p\u00e9ld\u00e1j\u00e1n\u00e1l a haj\u00f3test \u00e1tmegy a nyak\u00e1n.<\/p>\n<p>Visszat\u00e9rve a v\u00e1laszt\u00e1si feladatunkhoz a cache szerver\u00fcnket illet\u0151en, hogyan lehetne ezt az m\u00f3dszert alkalmazni? Javaslom, hogy a l\u00e9tez\u0151 rendszerek k\u00f6z\u00fcl ne r\u00e1zogassuk a palackot, ne v\u00e1lasszunk, hanem n\u00e9zz\u00fck meg, mi van benn\u00fck, amire figyelni kell a rendszer v\u00e1laszt\u00e1s\u00e1n\u00e1l.<\/p>\n<h2>Hol keressek bottlenecket?<\/h2>\n<p>\nPr\u00f3b\u00e1ljuk meg nem r\u00e1zni a palackot, nem sorban v\u00e9gigj\u00e1rni mindent, hanem n\u00e9zz\u00fck meg, milyen feladatok mer\u00fclnek fel, ha hirtelen, a mi feladatunkhoz \u2013 \u00fagy tervezz\u00fck meg ezt a rendszert \u00f6n\u00e1ll\u00f3an. Persze nem fogunk ker\u00e9kp\u00e1rt szerelni, de felhaszn\u00e1ljuk ezt a s\u00e9m\u00e1t, hogy orient\u00e1l\u00f3djunk, mire \u00e9rdemes figyelni a term\u00e9kek le\u00edr\u00e1saiban. Rajzoljuk fel ezt a s\u00e9m\u00e1t.<\/p>\n<p><img decoding=\"async\" alt=\"Hogyan v\u00e1lasztottunk cache rendszert a Sportmesterben. 1. r\u00e9sz\" src=\"\/wp-content\/uploads\/2020\/03\/f2c36d07383d778e60b2f800749012ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nHa a rendszer elosztott, akkor t\u00f6bb szerver\u00fcnk lesz (6). Tegy\u00fck fel, hogy n\u00e9gy (ez k\u00e9nyelmesen elhelyezhet\u0151 a k\u00e9pen, de persze b\u00e1rmennyi lehet). Ha a szerverek k\u00fcl\u00f6nb\u00f6z\u0151 csom\u00f3pontokon vannak, akkor mindegyiken fut egy bizonyos k\u00f3d, amely biztos\u00edtja, hogy ezek a csom\u00f3pontok klasztert alkossanak, \u00e9s szakad\u00e1s eset\u00e9n \u2013 csatlakozzanak, felismerj\u00e9k egym\u00e1st.<\/p>\n<p>Sz\u00fcks\u00e9g van egy k\u00f3d-logik\u00e1ra (2) is, amely a cache-el\u00e9s\u00e9rt felel\u0151s. Ezzel a k\u00f3ddal egy bizonyos API-n kereszt\u00fcl l\u00e9pnek kapcsolatba a kliensek. A kliens-k\u00f3d (1) lehet az ugyanazon JVM keretein bel\u00fcl, vagy hozz\u00e1f\u00e9rhet a h\u00e1l\u00f3zaton kereszt\u00fcl is. Az bels\u0151 logika azt hat\u00e1rozza meg, hogy mely objektumokat tartjuk meg a cache-ben, \u00e9s melyeket dobjuk ki. A cache t\u00e1rol\u00e1s\u00e1hoz mem\u00f3ri\u00e1t (3) haszn\u00e1lunk, de ha sz\u00fcks\u00e9ges, egyes adatokat a lemezen is meg\u0151rizhet\u00fcnk (4).<\/p>\n<p>N\u00e9zz\u00fck meg, hol jelentkezik a terhel\u00e9s. Val\u00f3j\u00e1ban minden ny\u00edl \u00e9s csom\u00f3pont terhel\u0151dni fog. El\u0151sz\u00f6r is a kliens-k\u00f3d \u00e9s az API k\u00f6z\u00f6tt, ha ez h\u00e1l\u00f3zati interakci\u00f3, az ingadoz\u00e1s meglehet\u0151sen \u00e9szlelhet\u0151 lehet. M\u00e1sodsorban az API keretein bel\u00fcl \u2013 ha t\u00fal bonyolult logik\u00e1t alkalmazunk, akkor a CPU-ban \u00fctk\u00f6zhet\u00fcnk. J\u00f3 lenne, ha a logika nem mozgatn\u00e1 feleslegesen a mem\u00f3ri\u00e1t. \u00c9s marad a f\u00e1jlrendszerrel val\u00f3 interakci\u00f3 \u2013 a szok\u00e1sos esetben ez soros\u00edt\u00e1s \/ vissza\u00e1ll\u00edt\u00e1s \u00e9s \u00edr\u00e1s \/ olvas\u00e1s.<\/p>\n<p>Ezut\u00e1n a klaszterrel val\u00f3 interakci\u00f3. Val\u00f3sz\u00edn\u0171leg ugyanebben a rendszerben lesz, de lehet k\u00fcl\u00f6n is. Itt is figyelembe kell venni az adat\u00e1tvitelt, az adatok soros\u00edt\u00e1s\u00e1nak sebess\u00e9g\u00e9t \u00e9s a klaszteren bel\u00fcli interakci\u00f3t.<\/p>\n<p>Most, egyr\u00e9szt \u2013 meg tudjuk k\u00e9pzelni, \"milyen fogaskerekek fognak forogni\" a cache-rendszerben a k\u00f3dunk \u00e1ltal gener\u00e1lt k\u00e9r\u00e9sek feldolgoz\u00e1sa sor\u00e1n, m\u00e1sr\u00e9szt \u2013 megbecs\u00fclhetj\u00fck, hogy k\u00f3dunk h\u00e1ny \u00e9s milyen k\u00e9r\u00e9st gener\u00e1l a rendszer fel\u00e9. Ez elegend\u0151 ahhoz, hogy egy viszonylag \u00e9sszer\u0171 v\u00e1laszt\u00e1st v\u00e9gezz\u00fcnk \u2013 hogy a rendszer\u00fcnket a felhaszn\u00e1l\u00e1sunkhoz igaz\u00edtsuk.<\/p>\n<p><b>Hazelcast<\/b><\/p>\n<p>N\u00e9zz\u00fck meg, hogyan alkalmazhat\u00f3 ez a felbont\u00e1s a mi list\u00e1nkra. P\u00e9ld\u00e1ul a Hazelcastra.<\/p>\n<p>Ahhoz, hogy adatokat rakjunk \/ vegy\u00fcnk a Hazelcastb\u00f3l, a kliens k\u00f3d (1) az API-hoz fordul. A Hz lehet\u0151v\u00e9 teszi, hogy a szervert be\u00e1gyazott m\u00f3dban futtassuk, \u00e9s ebben az esetben az API-h\u00edv\u00e1s a JVM-en bel\u00fcli met\u00f3dush\u00edv\u00e1s, amit ingyenesnek tekinthet\u00fcnk.<\/p>\n<p>Ahhoz, hogy a logika m\u0171k\u00f6dj\u00f6n (2), a Hz a sz\u00e9rumozott kulcs byte-t\u00f6mbj\u00e9b\u0151l sz\u00e1rmaz\u00f3 hash-ra t\u00e1maszkodik \u2013 vagyis a kulcs sz\u00e9rumoz\u00e1sa mindenk\u00e9ppen megt\u00f6rt\u00e9nik. Ez elker\u00fclhetetlen k\u00f6lts\u00e9g a Hz sz\u00e1m\u00e1ra.<br \/>\nAz evaku\u00e1l\u00e1si strat\u00e9gi\u00e1k j\u00f3l vannak megval\u00f3s\u00edtva, de speci\u00e1lis esetekben saj\u00e1tokat is csatlakoztathatunk. Ezen a r\u00e9szen nem kell agg\u00f3dni.<\/p>\n<p>A helyettes\u00edt\u00e9st (4) csatlakoztatni lehet. Kit\u0171n\u0151. Az interakci\u00f3 (5) be\u00e1gyazott m\u00f3dban szinte azonnal megt\u00f6rt\u00e9nik. Az adatok cser\u00e9je a klaszter csom\u00f3pontjai k\u00f6z\u00f6tt (6) \u2013 igen, l\u00e9tezik. Ez hozz\u00e1j\u00e1rul a hibat\u0171r\u00e9shez, b\u00e1r a sebess\u00e9g rov\u00e1s\u00e1ra. A Hz Near-cache funkci\u00f3ja cs\u00f6kkentheti az \u00e1rat \u2013 az egy\u00e9b csom\u00f3pontokb\u00f3l sz\u00e1rmaz\u00f3 adatok cache\u00e9lve lesznek.<\/p>\n<p>Mit lehet tenni ilyen k\u00f6r\u00fclm\u00e9nyek k\u00f6z\u00f6tt a sebess\u00e9g n\u00f6vel\u00e9s\u00e9re?<\/p>\n<p>P\u00e9ld\u00e1ul, hogy elker\u00fclj\u00fck a kulcs sz\u00e9rumoz\u00e1s\u00e1t (2) \u2013 a Hazelcast f\u00f6l\u00e9 egy m\u00e1sik cache-t \u00e9p\u00edthet\u00fcnk a legforr\u00f3bb adatokhoz. A Sportmester a c\u00e9lra a Caffeine-t v\u00e1lasztotta.<\/p>\n<p>A (6) szint\u0171 finomhangol\u00e1shoz a Hz k\u00e9tf\u00e9le t\u00e1rol\u00e1st k\u00edn\u00e1l: IMap \u00e9s ReplicatedMap.<br \/>\n<img decoding=\"async\" alt=\"Hogyan v\u00e1lasztottunk cache rendszert a Sportmesterben. 1. r\u00e9sz\" src=\"\/wp-content\/uploads\/2020\/03\/ce752c9a0f46609add8de8644a7ad17f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n\u00c9rdemes elmondani, hogyan ker\u00fclt a Hazelcast a Sportmester technol\u00f3giai stackj\u00e9be.<\/p>\n<p>2012-ben, amikor az els\u0151 protot\u00edpuson dolgoztunk a j\u00f6v\u0151beli weboldalhoz, a Hazelcast volt az els\u0151 hivatkoz\u00e1s, amit a keres\u0151 adott. Az ismerked\u00e9s azonnal megt\u00f6rt\u00e9nt \u2013 leny\u0171g\u00f6z\u00f6tt minket, hogy alig k\u00e9t \u00f3r\u00e1val azut\u00e1n, hogy csatlakoztattuk a Hz-t a rendszerhez \u2013 m\u0171k\u00f6d\u00f6tt. \u00c9s j\u00f3l m\u0171k\u00f6d\u00f6tt. A nap v\u00e9g\u00e9re meg\u00edrtunk n\u00e9h\u00e1ny tesztet, \u00f6r\u00fclt\u00fcnk. Ennek az energi\u00e1nak \u00e9pp el\u00e9g volt ahhoz, hogy t\u00fal\u00e9lj\u00fck azokat a meglepet\u00e9seket, amiket a Hz az id\u0151 m\u00fal\u00e1s\u00e1val tartogatott. Jelenleg a Sportmester csapat\u00e1nak nincs oka arra, hogy lemondjon a Hazelcastr\u00f3l.<\/p>\n<p>De olyan \u00e9rvek, mint a \u201ekeres\u0151 els\u0151 hivatkoz\u00e1sa\u201d \u00e9s a \u201egyors HelloWorld \u00f6ssze\u00e1ll\u00edt\u00e1s\u201d \u2013 ez term\u00e9szetesen kiv\u00e9tel \u00e9s a v\u00e1laszt\u00e1s pillanat\u00e1nak saj\u00e1toss\u00e1ga. A v\u00e1lasztott rendszer val\u00f3di kih\u00edv\u00e1sai a termel\u00e9sbe l\u00e9p\u00e9ssel kezd\u0151dnek, \u00e9s pontosan erre a szakaszra \u00e9rdemes figyelni b\u00e1rmely rendszer, \u00edgy a cache kiv\u00e1laszt\u00e1sakor is. Elmondhat\u00f3, hogy a Hazelcastot v\u00e9letlenszer\u0171en v\u00e1lasztottuk, de k\u00e9s\u0151bb kider\u00fclt, hogy helyesen d\u00f6nt\u00f6tt\u00fcnk.<\/p>\n<p>A production environment is much more concerned with: monitoring, failure handling on individual nodes, data replication, and scaling costs. That is, attention should be paid to the tasks that will arise during system maintenance \u2014 when the load exceeds the planned amount by several times, when we accidentally upload something wrong, or when we need to release a new version of the code, replace data, and do this without customers noticing.<\/p>\n<p>For all these requirements, Hazelcast is definitely suitable.<\/p>\n<h2>Folytatjuk<\/h2>\n<p>\nBut Hazelcast is not a panacea. In 2017, we chose Hazelcast for caching in the admin panel, simply based on a good impression from past experience. This played a key role in a very nasty joke that put us in a tough situation, from which we 'heroically' extracted ourselves over 60 days. But more on that in the next part.<\/p>\n<p>For now\u2026 Happy New Code!<br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/490912\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041f\u044c\u044f\u043d\u043a\u043e\u0432, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u0441\u0430\u0439\u0442\u043e\u043c \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440 \u0432 2012 \u0433\u043e\u0434\u0443, \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u044b \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u00ab\u043f\u0440\u043e\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u00bb \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043c\u044b\u0441\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u044e\u0436\u0435\u0442\u043e\u043c \u2013 \u0432\u044b\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f java-\u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0441\u0430\u0439\u0442\u0430. \u042d\u0442\u043e\u0442 \u0441\u044e\u0436\u0435\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":73950,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-73949","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041f\u044c\u044f\u043d\u043a\u043e\u0432, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440.\" \/>\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\/kak-my-v-sportmastere-vybirali-sistemu-keshirovaniya-chast-1\" \/>\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\udd47\u041a\u0430\u043a \u043c\u044b \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041f\u044c\u044f\u043d\u043a\u043e\u0432, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-my-v-sportmastere-vybirali-sistemu-keshirovaniya-chast-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-12T23:42:07+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-12T23:42:07+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\udd47How we at Sportmaster chose a caching system. Part 1 | ProHoster","description":"Hello! My name is Alexey Pyankov, I am a developer at Sportmaster.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-my-v-sportmastere-vybirali-sistemu-keshirovaniya-chast-1","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\udd47\u041a\u0430\u043a \u043c\u044b \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041f\u044c\u044f\u043d\u043a\u043e\u0432, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-my-v-sportmastere-vybirali-sistemu-keshirovaniya-chast-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-12T23:42:07+00:00","article:modified_time":"2020-03-12T23:42:07+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"73949","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:23:51","updated":"2022-09-28 05:05:57","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\/73949","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=73949"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/73949\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/73950"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=73949"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=73949"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=73949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}