{"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\/cs\/blog\/administrirovanie\/kak-my-v-sportmastere-vybirali-sistemu-keshirovaniya-chast-1","title":{"rendered":"Jak jsme ve Sportmasteru vyb\u00edrali syst\u00e9m ke\u0161ov\u00e1n\u00ed. \u010c\u00e1st 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ahoj! Jmenuji se Alexej Pjankov, jsem v\u00fdvoj\u00e1\u0159 ve spole\u010dnosti Sportmaster. V tomto <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/485088\/\">p\u0159\u00edsp\u011bvku<\/a><\/noindex> jsem popsal, jak za\u010dala pr\u00e1ce na webu Sportmaster v roce 2012, jak\u00e9 iniciativy se poda\u0159ilo \"protla\u010dit\" a naopak, jak\u00e9 p\u0159ek\u00e1\u017eky jsme nasb\u00edrali.<\/p>\n<p>Dnes chci sd\u00edlet my\u0161lenky, kter\u00e9 n\u00e1sleduj\u00ed za jin\u00fdm t\u00e9matem \u2013 v\u00fdb\u011brem syst\u00e9mu cache pro java backend v administraci webu. Toto t\u00e9ma m\u00e1 pro m\u011b zvl\u00e1\u0161tn\u00ed v\u00fdznam \u2013 a\u010dkoliv se p\u0159\u00edb\u011bh odehr\u00e1val pouze 2 m\u011bs\u00edce, b\u011bhem t\u011bchto 60 dn\u016f jsme pracovali 12-16 hodin a bez jedin\u00e9ho voln\u00e9ho dne. Nikdy d\u0159\u00edve jsem si nemyslel a nep\u0159edstavoval, \u017ee se d\u00e1 tak mnohem pracovat.<\/p>\n<p>Proto text rozd\u011bluji na 2 \u010d\u00e1sti, abych to nezahltil. Naopak, prvn\u00ed \u010d\u00e1st bude velmi lehk\u00e1 \u2014 p\u0159\u00edprava, \u00favod, n\u011bkter\u00e9 \u00favahy o tom, co je cache. Pokud u\u017e jste zku\u0161en\u00fd v\u00fdvoj\u00e1\u0159 nebo jste pracovali s cache, z technick\u00e9ho hlediska v tomto \u010dl\u00e1nku pravd\u011bpodobn\u011b nic nov\u00e9ho nenajdete. A pro juniory m\u016f\u017ee b\u00fdt mal\u00fd takov\u00fd p\u0159ehled u\u017eite\u010dn\u00fd, aby v\u011bd\u011bli, kter\u00fdm sm\u011brem se pod\u00edvat, pokud se ocitnou na takov\u00e9 k\u0159i\u017eovatce.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/490912\/\"><img decoding=\"async\" alt=\"Jak jsme ve Sportmasteru vyb\u00edrali syst\u00e9m ke\u0161ov\u00e1n\u00ed. \u010c\u00e1st 1\" 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 \/>\nKdy\u017e byla nov\u00e1 verze webu Sportmaster uvedena do produkce, data p\u0159ich\u00e1zela zp\u016fsobem, jemn\u011b \u0159e\u010deno, velmi nepohodln\u00fdm. Z\u00e1kladem byly tabulky p\u0159ipraven\u00e9 pro p\u0159edchoz\u00ed verzi webu (Bitrix), kter\u00e9 bylo pot\u0159eba nat\u00e1hnout do ETL, upravit na nov\u00fd vzhled a obohatit r\u016fzn\u00fdmi vylep\u0161en\u00edmi z dal\u0161\u00edch des\u00edtek syst\u00e9m\u016f. Aby se nov\u00e1 fotografie nebo popis zbo\u017e\u00ed objevily na webu, bylo nutn\u00e9 po\u010dkat do dal\u0161\u00edho dne \u2014 aktualizace prob\u00edhala pouze v noci, 1x denn\u011b.<\/p>\n<p>Zpo\u010d\u00e1tku bylo tolik starost\u00ed b\u011bhem prvn\u00edch t\u00fddn\u016f po uveden\u00ed do provozu, \u017ee takov\u00e9 nepohodl\u00ed pro content managery bylo mali\u010dkost\u00ed. Ale jakmile se v\u0161e ust\u00e1lilo, v\u00fdvoj projektu pokra\u010doval \u2014 po n\u011bkolika m\u011bs\u00edc\u00edch, na za\u010d\u00e1tku roku 2015, jsme za\u010dali aktivn\u011b vyv\u00edjet administraci. V letech 2015 a 2016 to \u0161lo dob\u0159e, pravideln\u011b vyd\u00e1v\u00e1me nov\u00e9 verze, administrace pokr\u00fdv\u00e1 st\u00e1le v\u011bt\u0161\u00ed \u010d\u00e1st p\u0159\u00edpravy dat a p\u0159ipravujeme se na to, \u017ee brzy na\u0161\u00ed skupin\u011b bude sv\u011b\u0159eno to nejd\u016fle\u017eit\u011bj\u0161\u00ed a nejt\u011b\u017e\u0161\u00ed \u2013 produktov\u00fd okruh (pln\u00e1 p\u0159\u00edprava a spr\u00e1va dat o v\u0161ech produktech). Ale v l\u00e9t\u011b 2017, t\u011bsn\u011b p\u0159ed spu\u0161t\u011bn\u00edm produktov\u00e9ho okruhu, se projekt ocitl ve velmi slo\u017eit\u00e9 situaci \u2013 pr\u00e1v\u011b kv\u016fli probl\u00e9m\u016fm s cache. O tomto epizodu chci vypr\u00e1v\u011bt ve druh\u00e9 \u010d\u00e1sti t\u00e9to dvoud\u00edln\u00e9 publikace.<\/p>\n<p>Ale v tomto p\u0159\u00edsp\u011bvku za\u010dnu od za\u010d\u00e1tku a shrnu n\u011bkolik my\u0161lenek \u2013 p\u0159edstavy o cacheov\u00e1n\u00ed, kter\u00e9 by bylo dobr\u00e9 si proj\u00edt p\u0159ed velk\u00fdm projektem.<\/p>\n<h2>Kdy\u017e se objev\u00ed \u00fakol cacheov\u00e1n\u00ed<\/h2>\n<p>\n\u00dakol cacheov\u00e1n\u00ed se neobjevuje jen tak. Jsme v\u00fdvoj\u00e1\u0159i, vytv\u00e1\u0159\u00edme softwarov\u00fd produkt a chceme, aby byl \u017e\u00e1dan\u00fd. Pokud je produkt \u017e\u00e1dan\u00fd a \u00fasp\u011b\u0161n\u00fd, u\u017eivatel\u00e9 p\u0159ich\u00e1zej\u00ed. A p\u0159ich\u00e1zej\u00ed dal\u0161\u00ed. A najednou je u\u017eivatel\u016f tolik, \u017ee produkt se st\u00e1v\u00e1 vysoce zat\u00ed\u017een\u00fdm.<\/p>\n<p>Na po\u010d\u00e1tku nep\u0159em\u00fd\u0161l\u00edme o optimalizaci a v\u00fdkonnosti k\u00f3du. Hlavn\u00ed je funk\u010dnost, rychle aplikovat pilotn\u00ed verzi a ov\u011b\u0159it hypot\u00e9zy. A pokud se zat\u00ed\u017een\u00ed zvy\u0161uje - posilujeme hardware. Zvy\u0161ujeme ho dvakr\u00e1t, t\u0159ikr\u00e1t, p\u011btkr\u00e1t, dejme tomu desetkr\u00e1t. Kdesi tady \u2013 finance u\u017e nebudou sta\u010dit. A kolikr\u00e1t vzroste po\u010det u\u017eivatel\u016f? Nebude to 2-5-10, ale v p\u0159\u00edpad\u011b \u00fasp\u011bchu to bude od 100-1000 a\u017e po 100 tis\u00edckr\u00e1t. To znamen\u00e1, \u017ee d\u0159\u00edve nebo pozd\u011bji se optimalizaci budeme muset v\u011bnovat.<\/p>\n<p>P\u0159edstavme si, \u017ee n\u011bjak\u00e1 \u010d\u00e1st k\u00f3du (nazv\u011bme tuto \u010d\u00e1st funkc\u00ed) funguje nep\u0159im\u011b\u0159en\u011b dlouho a my chceme zkr\u00e1tit \u010das vykon\u00e1n\u00ed. Funkce m\u016f\u017ee b\u00fdt p\u0159\u00edstup k datab\u00e1zi, m\u016f\u017ee b\u00fdt prov\u00e1d\u011bn\u00ed n\u011bjak\u00e9 slo\u017eit\u00e9 logiky \u2013 hlavn\u00ed je, \u017ee trv\u00e1 dlouho. O kolik lze zkr\u00e1tit \u010das vykon\u00e1n\u00ed? \u00dapln\u011b \u2013 lze ho zkr\u00e1tit na nulu, ne d\u00e1l. A jak lze zkr\u00e1tit \u010das vykon\u00e1n\u00ed na nulu? Odpov\u011b\u010f: \u00fapln\u011b vylou\u010dit vykon\u00e1n\u00ed. M\u00edsto toho okam\u017eit\u011b vr\u00e1tit v\u00fdsledek. A jak poznat v\u00fdsledek? Odpov\u011b\u010f: bu\u010f spo\u010d\u00edtat, nebo n\u011bkde nahl\u00e9dnout. Spo\u010d\u00edtat \u2013 to trv\u00e1 dlouho. A nahl\u00e9dnout \u2013 to je nap\u0159\u00edklad si zapamatovat ten v\u00fdsledek, kter\u00fd funkce vr\u00e1tila p\u0159i minul\u00e9m vol\u00e1n\u00ed se stejn\u00fdmi parametry.<\/p>\n<p>To znamen\u00e1, \u017ee implementace funkce pro n\u00e1s nen\u00ed d\u016fle\u017eit\u00e1. Sta\u010d\u00ed v\u011bd\u011bt, od jak\u00fdch parametr\u016f z\u00e1vis\u00ed v\u00fdsledek. Pokud tedy hodnoty parametr\u016f p\u0159edstav\u00edme ve form\u011b objektu, kter\u00fd je mo\u017en\u00e9 pou\u017e\u00edt jako kl\u00ed\u010d v ur\u010dit\u00e9m \u00falo\u017ei\u0161ti \u2014 m\u016f\u017eeme v\u00fdsledek v\u00fdpo\u010dtu ulo\u017eit a p\u0159i dal\u0161\u00edm zavol\u00e1n\u00ed ho p\u0159e\u010d\u00edst. Pokud proces z\u00e1pisu a \u010dten\u00ed v\u00fdsledku bude rychlej\u0161\u00ed ne\u017e vykon\u00e1n\u00ed funkce \u2013 m\u00e1me zisk v rychlosti. Velikost zisku m\u016f\u017ee dos\u00e1hnout a\u017e 100, 1000 nebo dokonce 100 tis\u00edckr\u00e1t (10^5 \u2013 to je sp\u00ed\u0161e v\u00fdjimka, ale v p\u0159\u00edpad\u011b v\u00fdrazn\u011b zpomaluj\u00edc\u00ed datab\u00e1ze \u2013 je to zcela mo\u017en\u00e9).<\/p>\n<h2>Hlavn\u00ed po\u017eadavky na syst\u00e9m cachov\u00e1n\u00ed<\/h2>\n<p>\nPrvn\u00ed v\u011bc, kter\u00e1 m\u016f\u017ee b\u00fdt po\u017eadavkem na syst\u00e9m cachov\u00e1n\u00ed \u2014 rychl\u00e1 rychlost \u010dten\u00ed a v men\u0161\u00ed m\u00ed\u0159e \u2013 rychlost z\u00e1pisu. To je tak, ale pouze do t\u00e9 doby, ne\u017e nasad\u00edme syst\u00e9m do produkce.<\/p>\n<p>Zahrajeme si takov\u00fd p\u0159\u00edpad.<\/p>\n<p>P\u0159edstavme si, \u017ee jsme zajistili hardware pro aktu\u00e1ln\u00ed zat\u00ed\u017een\u00ed a nyn\u00ed pomalu zav\u00e1d\u00edme cachov\u00e1n\u00ed. Trochu p\u0159ib\u00fdv\u00e1 u\u017eivatel\u016f, roste zat\u00ed\u017een\u00ed \u2013 trochu p\u0159id\u00e1v\u00e1me cache, p\u0159ipojujeme ji sem a tam. Tak to pokra\u010duje n\u011bjakou dobu, a nyn\u00ed u\u017e prakticky nevytv\u00e1\u0159\u00edme t\u011b\u017ek\u00e9 funkce \u2014 ve\u0161ker\u00e1 hlavn\u00ed z\u00e1t\u011b\u017e spo\u010d\u00edv\u00e1 na cache. Po\u010det u\u017eivatel\u016f se b\u011bhem t\u00e9to doby zv\u00fd\u0161il Nkr\u00e1t.<\/p>\n<p>A pokud byl po\u010d\u00e1te\u010dn\u00ed hardware kapacitn\u011b 2-5kr\u00e1t, pak s pomoc\u00ed cache jsme mohli zv\u00fd\u0161it v\u00fdkon 10kr\u00e1t nebo, v dobr\u00e9m p\u0159\u00edpad\u011b 100kr\u00e1t, m\u00edsty, mo\u017en\u00e1 i 1000kr\u00e1t. To znamen\u00e1, \u017ee na stejn\u00e9m hardwaru \u2014 zpracov\u00e1v\u00e1me 100kr\u00e1t v\u00edce po\u017eadavk\u016f. Skv\u011bl\u00e9, zaslou\u017eili jsme si odm\u011bnu!<\/p>\n<p>Ale nyn\u00ed, v jednom kr\u00e1sn\u00e9m okam\u017eiku, n\u00e1hodou, syst\u00e9m selhal a cache padla. Nic zvl\u00e1\u0161tn\u00edho \u2014 proto\u017ee cache byla vybr\u00e1na na z\u00e1klad\u011b po\u017eadavku \u201evysok\u00e1 rychlost \u010dten\u00ed a z\u00e1pisu, zbytek nen\u00ed d\u016fle\u017eit\u00fd\u201c.<\/p>\n<p>Co se t\u00fdk\u00e1 po\u010d\u00e1te\u010dn\u00ed z\u00e1t\u011b\u017ee, m\u011bli jsme hardware 2-5kr\u00e1t, a z\u00e1t\u011b\u017e za tuto dobu vzrostla 10-100kr\u00e1t. S pomoc\u00ed cache jsme vylu\u010dovali vol\u00e1n\u00ed pro t\u011b\u017ek\u00e9 funkce a proto v\u0161e bylo rychl\u00e9. A te\u010f, bez cache \u2013 kolikr\u00e1t na\u0161e syst\u00e9m sn\u00ed\u017e\u00ed? Co se s n\u00e1mi stane? Syst\u00e9m spadne.<\/p>\n<p>I kdy\u017e na\u0161e cache nep\u0159i\u0161la o data, ale pouze se na n\u011bjakou dobu vy\u010distila \u2013 bude t\u0159eba ji zah\u0159\u00e1t, a to n\u011bjak\u00fd \u010das potrv\u00e1. A b\u011bhem t\u00e9to doby \u2013 hlavn\u00ed z\u00e1t\u011b\u017e se p\u0159esune na funkce.<\/p>\n<p>V\u00fdstup: Vysoce zat\u00ed\u017een\u00e9 projekty v produkci vy\u017eaduj\u00ed od syst\u00e9mu ke\u0161ov\u00e1n\u00ed nejen vysokou rychlost \u010dten\u00ed a z\u00e1pisu, ale tak\u00e9 zachov\u00e1n\u00ed dat a odolnost v\u016f\u010di poruch\u00e1m.<\/p>\n<h2>Mu\u010den\u00ed v\u00fdb\u011bru<\/h2>\n<p>\nV projektu s administra\u010dn\u00edm rozhran\u00edm prob\u011bhl v\u00fdb\u011br takto: nejprve jsme nasadili Hazelcast, proto\u017ee jsme s t\u00edmto produktem m\u011bli ji\u017e zku\u0161enosti z hlavn\u00edho webu. Av\u0161ak tento v\u00fdb\u011br se uk\u00e1zal jako ne\u00fasp\u011b\u0161n\u00fd - podle na\u0161eho z\u00e1t\u011b\u017eov\u00e9ho profilu Hazelcast funguje nikoli pomalu, ale hrozn\u011b pomalu. A v dob\u011b, kdy jsme se u\u017e podepsali na term\u00ednech uveden\u00ed do produkce.<\/p>\n<p>Spoiler: jak se vlastn\u011b ud\u00e1ly okolnosti, \u017ee jsme prop\u00e1sli takov\u00fd probl\u00e9m a dostali se do napjat\u00e9 situace - pov\u00edm ve druh\u00e9 \u010d\u00e1sti - a jak jsme se dostali ven. Ale te\u010f - jen \u0159eknu, \u017ee to byl siln\u00fd stres a \"myslet - n\u011bjak se ned\u00e1, t\u0159eseme lahv\u00ed\". \"T\u0159eseme lahv\u00ed\" - to je tak\u00e9 spoiler, o tomto je\u0161t\u011b pozd\u011bji.<\/p>\n<p>Co jsme ud\u011blali:<\/p>\n<ol>\n<li>Sestavujeme seznam v\u0161ech syst\u00e9m\u016f, kter\u00e9 doporu\u010duje google a StackOverflow. O n\u011bco v\u00edce ne\u017e 30.<\/li>\n<li>P\u00ed\u0161eme testy se z\u00e1t\u011b\u017e\u00ed, charakteristickou pro produkci. K tomu jsme po\u0159\u00eddili data, kter\u00e1 proch\u00e1zej\u00ed syst\u00e9mem v produk\u010dn\u00edm prost\u0159ed\u00ed - takov\u00fd sniffer pro data ne v s\u00edti, ale uvnit\u0159 syst\u00e9mu. Do test\u016f jsme spustili pr\u00e1v\u011b tato data.<\/li>\n<li>Cel\u00fd t\u00fdm, ka\u017ed\u00fd si vybere dal\u0161\u00ed syst\u00e9m ze seznamu, nastav\u00ed ho a provede testy. Pokud test neprojde, nezvl\u00e1dne z\u00e1t\u011b\u017e - vy\u0159ad\u00edme ho a p\u0159ejdeme k dal\u0161\u00edmu v po\u0159ad\u00ed.<\/li>\n<li>Na 17. syst\u00e9mu se uk\u00e1zalo, \u017ee v\u0161e je beznad\u011bjn\u00e9. Sta\u010dilo \"t\u0159\u00e1st lahv\u00ed\", je \u010das zamyslet se v\u00e1\u017en\u011b.<\/li>\n<\/ol>\n<p>\nAle to je mo\u017enost, kdy je pot\u0159eba vybrat syst\u00e9m, kter\u00fd \"projde rychlost\u00ed\" v p\u0159edem p\u0159ipraven\u00fdch testech. A co kdy\u017e takov\u00e9 testy je\u0161t\u011b neexistuj\u00ed a je pot\u0159eba vybrat rychleji?<\/p>\n<p>Modelujeme takovou variantu (t\u011b\u017eko si p\u0159edstavit, \u017ee mid-level+ v\u00fdvoj\u00e1\u0159 \u017eije ve vaku, a v dob\u011b v\u00fdb\u011bru je\u0161t\u011b nem\u00e1 preference, kter\u00fd produkt zkusit jako prvn\u00ed - proto, dal\u0161\u00ed \u00favahy jsou sp\u00ed\u0161e teoretick\u00e9 \/ filozofick\u00e9 \/ o juniorech).<\/p>\n<p>Ur\u010div\u0161e po\u017eadavky, za\u010dneme vyb\u00edrat \u0159e\u0161en\u00ed z krabice. Pro\u010d vynal\u00e9zat kolo: p\u016fjdeme a vezmeme hotov\u00fd syst\u00e9m ke\u0161ov\u00e1n\u00ed.<\/p>\n<p>Pokud teprve za\u010d\u00edn\u00e1te a budete googlit, plus m\u00ednus po\u0159ad\u00ed, ale celkov\u011b budou vod\u00edtka takov\u00e1. V prvn\u00ed \u0159ad\u011b naraz\u00edte na Redis, ten je v\u0161ude sly\u0161et. Potom se dozv\u00edte, \u017ee existuje EhCache jako nejstar\u0161\u00ed a osv\u011bd\u010den\u00fd syst\u00e9m. D\u00e1le bude naps\u00e1no o Tarantool \u2014 dom\u00e1c\u00ed v\u00fdvoj, kter\u00fd m\u00e1 unik\u00e1tn\u00ed aspekt \u0159e\u0161en\u00ed. A tak\u00e9 Ignite, proto\u017ee v sou\u010dasnosti je na vzestupu popularity a t\u011b\u0161\u00ed se podpo\u0159e SberTechu. Na z\u00e1v\u011br je\u0161t\u011b Hazelcast, proto\u017ee v enterprise sv\u011bt\u011b se \u010dasto objevuje ve velk\u00fdch spole\u010dnostech.<\/p>\n<p>T\u00edmto seznam nekon\u010d\u00ed, syst\u00e9m\u016f existuj\u00ed des\u00edtky. A my p\u0159ipoj\u00edme pouze jeden. Vezmeme vybran\u00fdch 5 syst\u00e9m\u016f na \"konkurs kr\u00e1sy\" a provedeme v\u00fdb\u011br. Kdo bude v\u00edt\u011bzem?<\/p>\n<h3>Redis<\/h3>\n<p>\n\u010cteme, co p\u00ed\u0161ou na ofici\u00e1ln\u00edch str\u00e1nk\u00e1ch.<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/\">Redis<\/a><\/noindex> \u2014 opensource projekt. Nab\u00edz\u00ed in-memory \u00falo\u017ei\u0161t\u011b dat, mo\u017enost ulo\u017een\u00ed on-disk, automatick\u00e9 rozd\u011blen\u00ed na partice, vysokou dostupnost a obnovu po s\u00ed\u0165ov\u00fdch p\u0159eru\u0161en\u00edch.<\/p>\n<p>Vypad\u00e1 to skv\u011ble, m\u016f\u017eeme vz\u00edt a p\u0159ipojit \u2014 v\u0161e, co pot\u0159ebuje, d\u011bl\u00e1. Ale pod\u00edvejme se pro zaj\u00edmavost na ostatn\u00ed kandid\u00e1ty.<\/p>\n<h3>EhCache<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.ehcache.org\/\">EhCache<\/a><\/noindex> \u2014 \"nejv\u00edce \u0161iroce pou\u017e\u00edvan\u00e1 cache pro Java\" (p\u0159eklad sloganu z ofici\u00e1ln\u00edch str\u00e1nek). Tak\u00e9 opensource. A zde ch\u00e1peme, \u017ee Redis nen\u00ed pro Javu, ale obecn\u00fd, a pro interakci s n\u00edm pot\u0159ebujeme obal. A EhCache bude pohodln\u011bj\u0161\u00ed. Co dal\u0161\u00edho syst\u00e9m slibuje? Spolehlivost, ov\u011b\u0159enost, plnohodnotnost. No a tak\u00e9 je nejroz\u0161\u00ed\u0159en\u011bj\u0161\u00ed. A cacheuje terabyty dat.<\/p>\n<p>Redis je zapomenut, jsem p\u0159ipraven vybrat EhCache.<\/p>\n<p>Ale pocit patriotismu m\u011b nut\u00ed pod\u00edvat se, \u010d\u00edm je dobr\u00fd Tarantool.<\/p>\n<h3>Tarantool<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.tarantool.io\/ru\/\">Tarantool<\/a><\/noindex> \u2014 v\u00edt\u00e1 ozna\u010den\u00edm \"Platforma pro integraci dat v re\u00e1ln\u00e9m \u010dase\". Zn\u00ed to velmi slo\u017eit\u011b, tak\u017ee \u010dteme str\u00e1nku podrobn\u011b a nach\u00e1z\u00edme vyj\u00e1d\u0159en\u00ed: \"Cacheuje 100% dat v opera\u010dn\u00ed pam\u011bti\". To by m\u011blo vyvolat ot\u00e1zky \u2014 v\u017edy\u0165 dat m\u016f\u017ee b\u00fdt mnohem v\u00edce ne\u017e pam\u011bti. Rozlu\u0161t\u011bn\u00ed spo\u010d\u00edv\u00e1 v tom, \u017ee zde se m\u00e1 na mysli, \u017ee p\u0159i z\u00e1pisu dat na disk z pam\u011bti Tarantool neprov\u00e1d\u00ed serializaci. M\u00edsto toho \u2014 vyu\u017e\u00edv\u00e1 n\u00edzko\u00farov\u0148ov\u00e9 vlastnosti syst\u00e9mu, kdy je pam\u011b\u0165 jednodu\u0161e mapov\u00e1na na souborov\u00fd syst\u00e9m s velmi dobr\u00fdmi parametry I\/O. Celkov\u011b ud\u011blali n\u011bco jako skv\u011bl\u00e9 a skv\u011bl\u00e9.<\/p>\n<p>Pod\u00edvejme se na implementace: Mail.ru firemn\u00ed magistr\u00e1la, Avito, Beeline, MegaFon, Alfa-Bank, Gazprom...<\/p>\n<p>Pokud jste m\u011bli n\u011bjak\u00e9 pochybnosti o Tarantool, p\u0159\u00edpad nasazen\u00ed v Mastercard m\u011b definitivn\u011b p\u0159esv\u011bd\u010dil. Vol\u00edm Tarantool.<\/p>\n<p>Ale p\u0159ece jen...<\/p>\n<h3>Ignite<\/h3>\n<p>\n\u2026 existuje je\u0161t\u011b <noindex><a rel=\"nofollow\" href=\"https:\/\/ignite.apache.org\/\">Ignite<\/a><\/noindex>, ozna\u010den\u00fd jako \u201ein-memory po\u010d\u00edta\u010dov\u00e1 platforma\u2026 in-memory rychlost na petabajtech dat\u201c. I zde je spousta v\u00fdhod: distribuovan\u00e1 in-memory cache, nejrychlej\u0161\u00ed key-value \u00falo\u017ei\u0161t\u011b a cache, horizont\u00e1ln\u00ed \u0161k\u00e1lovatelnost, vysok\u00e1 dostupnost, p\u0159\u00edsn\u00e1 integrita. Zkr\u00e1tka, nejrychlej\u0161\u00ed je Ignite.<\/p>\n<p>Nasazen\u00ed: Sberbank, American Airlines, Yahoo! Japan. A pak se dozv\u00edm, \u017ee Ignite nen\u00ed jen tak nasazen v Sberbank, ale t\u00fdm SberTecha pos\u00edl\u00e1 sv\u00e9 lidi do t\u00fdmu samotn\u00e9ho Ignite, aby vyv\u00edjeli produkt. To m\u011b \u00fapln\u011b p\u0159esv\u011bd\u010dilo a jsem p\u0159ipraven zvolit Ignite.<\/p>\n<p>\u00dapln\u011b nerozum\u00edm, pro\u010d se d\u00edv\u00e1m na p\u00e1t\u00fd bod.<\/p>\n<h3>Hazelcast<\/h3>\n<p>\nJdu na webov\u00e9 str\u00e1nky <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.com\/\">Hazelcast<\/a><\/noindex>, \u010dtu. A ukazuje se, \u017ee nejrychlej\u0161\u00ed \u0159e\u0161en\u00ed pro distribuovan\u00e9 cache je Hazelcast. Je to mnohem rychlej\u0161\u00ed ne\u017e v\u0161echna ostatn\u00ed \u0159e\u0161en\u00ed a v\u016fbec je l\u00eddrem v oblasti in-memory data grid. Na jeho pozad\u00ed by bylo nesmysln\u00e9 vz\u00edt n\u011bco jin\u00e9ho. Nav\u00edc vyu\u017e\u00edv\u00e1 redundantn\u00ed ulo\u017een\u00ed dat pro nep\u0159etr\u017eitou funk\u010dnost clusteru bez ztr\u00e1ty dat.<\/p>\n<p>To je to, jsem p\u0159ipraven zvolit Hazelcast.<\/p>\n<h2>Porovn\u00e1n\u00ed<\/h2>\n<p>\nAle pokud se pod\u00edv\u00e1me, v\u0161ech p\u011bt kandid\u00e1t\u016f je pops\u00e1no tak, \u017ee ka\u017ed\u00fd z nich je ten nejlep\u0161\u00ed. Jak vybrat? M\u016f\u017eeme se pod\u00edvat, kter\u00fd z nich je nejpopul\u00e1rn\u011bj\u0161\u00ed, hledat srovn\u00e1n\u00ed, a bolest hlavy bude pry\u010d.<\/p>\n<p>Najdeme takov\u00fd <noindex><a rel=\"nofollow\" href=\"https:\/\/db-engines.com\/en\/ranking_trend\">p\u0159ehled<\/a><\/noindex>, vyb\u00edr\u00e1me na\u0161e 5 syst\u00e9m\u016f.<\/p>\n<p><img decoding=\"async\" alt=\"Jak jsme ve Sportmasteru vyb\u00edrali syst\u00e9m ke\u0161ov\u00e1n\u00ed. \u010c\u00e1st 1\" src=\"\/wp-content\/uploads\/2020\/03\/98a99bbce026318ac08aacfd829935bc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nZde jsou se\u0159azeny: naho\u0159e Redis, na druh\u00e9m m\u00edst\u011b Hazelcast, zvy\u0161uj\u00ed popularitu Tarantool a Ignite, EhCache z\u016fstal, jak byl. <\/p>\n<p>Ale pod\u00edv\u00e1me se na <noindex><a rel=\"nofollow\" href=\"https:\/\/db-engines.com\/en\/ranking_definition\">metodu v\u00fdpo\u010dtu<\/a><\/noindex>: odkazy na webov\u00e9 str\u00e1nky, celkov\u00fd z\u00e1jem o syst\u00e9m, nab\u00eddky pracovn\u00edch m\u00edst \u2014 skv\u011bl\u00e9! Tedy, kdy\u017e mi syst\u00e9m spadne, \u0159eknu: \u201eNe, je p\u0159ece spolehliv\u00fd! Tady je mnoho pracovn\u00edch nab\u00eddek\u2026\u201c. Takov\u00e9 jednodu\u0161\u00ed srovn\u00e1n\u00ed nebude fungovat.<\/p>\n<p>V\u0161echny tyto syst\u00e9my nejsou jen syst\u00e9my pro cache. Maj\u00ed tak\u00e9 spoustu dal\u0161\u00edch funkc\u00ed, v\u010detn\u011b \u2013 kdy\u017e data nejsou p\u0159esouv\u00e1na klientovi k zpracov\u00e1n\u00ed, ale naopak: k\u00f3d, kter\u00fd m\u00e1 b\u00fdt proveden nad daty, se p\u0159esune na server, tam se vykon\u00e1 a v\u00fdsledek se vr\u00e1t\u00ed. A jako samostatn\u00fd syst\u00e9m pro cache je \u010dasto ani nevn\u00edmaj\u00ed.<\/p>\n<p>Dob\u0159e, nevzd\u00e1v\u00e1me se, najdeme p\u0159\u00edm\u00e9 srovn\u00e1n\u00ed syst\u00e9m\u016f. Vezmeme dv\u011b nejlep\u0161\u00ed varianty \u2014 Redis a Hazelcast. Zaj\u00edm\u00e1 n\u00e1s rychlost, podle tohoto parametru je srovn\u00e1me.<\/p>\n<h3>Hz vs Redis<\/h3>\n<p>\nNajdeme n\u011bco takov\u00e9ho <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.com\/resources\/benchmark-redis-3-2-8-vs-hazelcast-3-8\/\">porovn\u00e1n\u00ed<\/a><\/noindex>:<br \/>\n<img decoding=\"async\" alt=\"Jak jsme ve Sportmasteru vyb\u00edrali syst\u00e9m ke\u0161ov\u00e1n\u00ed. \u010c\u00e1st 1\" src=\"\/wp-content\/uploads\/2020\/03\/c59ff32b3b61f68f0c3917c1de2aaa8f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nModr\u00e1 je Redis, \u010derven\u00e1 Hazelcast. Hazelcast v\u00edt\u011bz\u00ed ve v\u0161ech ohledech, a to m\u00e1 sv\u00e9 opodstatn\u011bn\u00ed: je v\u00edcerozm\u011brn\u00fd, vysoce optimalizovan\u00fd, ka\u017ed\u00fd vl\u00e1kno pracuje se svou parti\u00ed, tak\u017ee nedoch\u00e1z\u00ed k z\u00e1mk\u016fm. Naopak Redis je jednovl\u00e1knov\u00fd, a z modern\u00edch v\u00edcej\u00e1drov\u00fdch CPU nevyu\u017e\u00edv\u00e1 v\u00fdhody. Hazelcast m\u00e1 asynchronn\u00ed I\/O, zat\u00edmco Redis-Jedis vyu\u017e\u00edv\u00e1 blokuj\u00edc\u00ed sockety. Nakonec, Hazelcast pou\u017e\u00edv\u00e1 bin\u00e1rn\u00ed protokol, zat\u00edmco Redis je zam\u011b\u0159en na text, co\u017e znamen\u00e1, \u017ee je m\u00e9n\u011b efektivn\u00ed.<\/p>\n<p>Pro jistotu se pod\u00edvejme na dal\u0161\u00ed zdroj srovn\u00e1n\u00ed. Co n\u00e1m uk\u00e1\u017ee?<\/p>\n<h3>Redis vs Hz<\/h3>\n<p>\nJe\u0161t\u011b jedno <noindex><a rel=\"nofollow\" href=\"https:\/\/redislabs.com\/blog\/benchmarking-redis-enterprise-5-2-0-vs-hazelcast-3-9\/\">porovn\u00e1n\u00ed<\/a><\/noindex>:<br \/>\n<img decoding=\"async\" alt=\"Jak jsme ve Sportmasteru vyb\u00edrali syst\u00e9m ke\u0161ov\u00e1n\u00ed. \u010c\u00e1st 1\" src=\"\/wp-content\/uploads\/2020\/03\/61e466d367dd6f9d52c1d7c6443d1713.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nZde je to naopak, \u010derven\u00e1 je Redis. To znamen\u00e1, \u017ee Redis m\u00e1 lep\u0161\u00ed v\u00fdkon ne\u017e Hazelcast. V prvn\u00edm srovn\u00e1n\u00ed vyhr\u00e1l Hazelcast, ve druh\u00e9m pak Redis. <noindex><a rel=\"nofollow\" href=\"https:\/\/redislabs.com\/blog\/benchmarking-redis-enterprise-5-2-0-vs-hazelcast-3-9\/\">Zde<\/a><\/noindex> velmi p\u0159esn\u011b vysv\u011btlili, pro\u010d v p\u0159edchoz\u00edm srovn\u00e1n\u00ed vyhr\u00e1l Hazelcast.<\/p>\n<p>Ukazuje se, \u017ee v\u00fdsledek prvn\u00edho srovn\u00e1n\u00ed byl vlastn\u011b zmanipulov\u00e1n: Redis byl vzat v z\u00e1kladn\u00edm balen\u00ed, zat\u00edmco Hazelcast byl p\u0159izp\u016fsoben pro testovac\u00ed p\u0159\u00edpad. Tak\u017ee to vych\u00e1z\u00ed na to, \u017ee za prv\u00e9, nikomu se ned\u00e1 v\u011b\u0159it, a za druh\u00e9, kdy\u017e si skute\u010dn\u011b vybereme syst\u00e9m, mus\u00edme ho tak\u00e9 spr\u00e1vn\u011b nakonfigurovat. Tyto konfigurace zahrnuj\u00ed des\u00edtky, t\u00e9m\u011b\u0159 stovky parametr\u016f.<\/p>\n<h2>Proto\u010dme l\u00e1hev<\/h2>\n<p>\nA cel\u00fd proces, kter\u00fd jsme pr\u00e1v\u011b pro\u0161li, mohu vysv\u011btlit takovou metaforou \"Proto\u010dme l\u00e1hev\". To znamen\u00e1, \u017ee nyn\u00ed nen\u00ed t\u0159eba programovat, te\u010f je nejd\u016fle\u017eit\u011bj\u0161\u00ed um\u011bt \u010d\u00edst stackoverflow. A m\u00e1m v t\u00fdmu \u010dlov\u011bka, profesion\u00e1la, kter\u00fd p\u0159esn\u011b takto pracuje v kritick\u00fdch chv\u00edl\u00edch.<\/p>\n<p>Co d\u011bl\u00e1? Vid\u00ed nefunk\u010dn\u00ed za\u0159\u00edzen\u00ed, vid\u00ed stack trace, vyb\u00edr\u00e1 z n\u011bj n\u011bkter\u00e1 slova (kter\u00e1 p\u0159esn\u011b \u2014 to je jeho odborn\u00e1 znalost v programu), hled\u00e1 na googlu, nach\u00e1z\u00ed stackoverflow mezi odpov\u011b\u010fmi. Ne\u010dte, nezkoum\u00e1, mezi odpov\u011b\u010fmi na ot\u00e1zku \u2014 vybere n\u011bco, co nejv\u00edce p\u0159ipom\u00edn\u00e1 v\u011btu \u201eud\u011blat to a to\u201c (vybrat takovou odpov\u011b\u010f \u2014 to je jeho talent, proto\u017ee to nen\u00ed v\u017edy ten odpov\u011b\u010f, kter\u00e1 z\u00edskala nejv\u00edce lajk\u016f), aplikuje, pod\u00edv\u00e1 se: pokud se n\u011bco zm\u011bnilo, je to skv\u011bl\u00e9. Pokud se nic nezm\u011bnilo \u2014 vr\u00e1t\u00edme se zp\u011bt. A opakujeme spu\u0161t\u011bn\u00ed-kontrolu-hled\u00e1n\u00ed. A t\u00edmto intuitivn\u00edm zp\u016fsobem dos\u00e1hne toho, \u017ee po n\u011bjak\u00e9 dob\u011b k\u00f3d funguje. Nev\u00ed pro\u010d, nev\u00ed, co ud\u011blal, nedok\u00e1\u017ee to vysv\u011btlit. Ale! Tohle funguje. A \u201epo\u017e\u00e1r je uha\u0161en\u201c. Te\u010f se sna\u017e\u00edme rozlu\u0161tit, co jsme ud\u011blali. Kdy\u017e program funguje \u2014 je to o hodn\u011b snaz\u0161\u00ed. A v\u00fdrazn\u011b to \u0161et\u0159\u00ed \u010das.<\/p>\n<p>Tento zp\u016fsob se velmi dob\u0159e vysv\u011btluje na p\u0159\u00edkladu.<\/p>\n<p>Kdysi bylo velmi popul\u00e1rn\u00ed skl\u00e1dat plachetnici do lahve. Plachetnice je velk\u00e1 a k\u0159ehk\u00e1, a hrdlo lahve je velmi \u00fazk\u00e9, nelze ji dovnit\u0159 dostat. Jak ji sestavit?<\/p>\n<p><img decoding=\"async\" alt=\"Jak jsme ve Sportmasteru vyb\u00edrali syst\u00e9m ke\u0161ov\u00e1n\u00ed. \u010c\u00e1st 1\" src=\"\/wp-content\/uploads\/2020\/03\/6c69e04080f1f0da81abf7a6a80510f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nExistuje takov\u00e1 metoda, velmi rychl\u00e1 a velmi efektivn\u00ed.<\/p>\n<p>Lod\u011b se skl\u00e1daj\u00ed z \u0159ady drobnost\u00ed: ty\u010dinek, prov\u00e1zk\u016f, plachet, lepidla. To v\u0161echno vlo\u017e\u00edme do lahve.<br \/>\nVezmeme lahev ob\u011bma rukama a za\u010dneme ji t\u0159\u00e1st. T\u0159eseme, t\u0159eseme. A obvykle \u2013 vznikne \u00fapln\u00e1 hloupost, samoz\u0159ejm\u011b. Ale n\u011bkdy. N\u011bkdy se poda\u0159\u00ed lo\u010f! P\u0159esn\u011bji, n\u011bco podobn\u00e9ho lodi.<\/p>\n<p>Toto n\u011bco ukazujeme n\u011bkomu: \u201eSergio, vid\u00ed\u0161!?\u201c. A skute\u010dn\u011b, z d\u00e1lky \u2013 vypad\u00e1 to jako lo\u010f. Ale d\u00e1l to nem\u016f\u017eeme pustit.<\/p>\n<p>Existuje je\u0161t\u011b jeden zp\u016fsob. Pou\u017e\u00edvaj\u00ed ho pokro\u010dilej\u0161\u00ed kluci, takov\u00ed hacke\u0159i.<\/p>\n<p>Dal jsem takov\u00e9mu chlapci \u00fakol, on v\u0161echno ud\u011blal a ode\u0161el. A pod\u00edv\u00e1\u0161 se \u2013 zd\u00e1 se, \u017ee to je hotov\u00e9. Ale za n\u011bjakou dobu, kdy\u017e je pot\u0159eba k\u00f3d doladit \u2014 za\u010d\u00edn\u00e1 tam n\u011bco kv\u016fli n\u011bmu\u2026 Dob\u0159e, \u017ee u\u017e se dostal daleko. To jsou kluci, kte\u0159\u00ed nap\u0159\u00edklad na lahvi ud\u011blaj\u00ed tohle: vid\u00edte, kde je dno \u2013 sklo se oh\u00fdb\u00e1. A nen\u00ed \u00fapln\u011b jasn\u00e9, jestli je pr\u016fhledn\u00e9 nebo ne. Tak\u017ee \u201ehacke\u0159i\u201c zkr\u00e1t\u00ed to dno, vlo\u017e\u00ed tam lo\u010f, dno pak znovu p\u0159ilep\u00ed a vypad\u00e1 to, jako by to tak m\u011blo b\u00fdt.<\/p>\n<p>Z pohledu zad\u00e1n\u00ed je to zd\u00e1 se spr\u00e1vn\u011b. Ale co se t\u00fd\u010de lod\u00ed: pro\u010d vlastn\u011b vyr\u00e1b\u011bt tuto lo\u010f, komu je v\u016fbec pot\u0159eba? \u017d\u00e1dnou funk\u010dnost nenese. Obvykle takov\u00e9 lod\u011b jsou dary velmi vysoce postaven\u00fdm osob\u00e1m, kter\u00e9 je um\u00eds\u0165uj\u00ed na poli\u010dku nad sebou jako ur\u010ditou symboliku, jako znamen\u00ed. A pokud m\u00e1 takov\u00e1 osoba, vedouc\u00ed velk\u00fd podnik nebo vysoce postaven\u00fd \u00fa\u0159edn\u00edk, nad sebou vlajku s takov\u00fdm nedokonal\u00fdm v\u00fdrobkem, u kter\u00e9ho je od\u0159\u00edznut\u00fd krk? Bylo by lep\u0161\u00ed, kdyby se to nikdy nedozv\u011bd\u011bl. A jak se vlastn\u011b vyr\u00e1b\u011bj\u00ed lod\u011b, kter\u00e9 lze darovat d\u016fle\u017eit\u00e9 osob\u011b?<\/p>\n<p>Jedno m\u00edsto, kl\u00ed\u010dov\u00e9, se kter\u00fdm se opravdu nic ned\u00e1 ud\u011blat, je trup. A trup lodi pr\u00e1v\u011b proch\u00e1z\u00ed krkem. Kdy\u017e se lo\u010f skl\u00e1d\u00e1 mimo l\u00e1hev. Ale nen\u00ed to jen tak se\u0161roubovat lo\u010f, je to prav\u00e9 zlatnick\u00e9 \u0159emeslo. Do jednotliv\u00fdch \u010d\u00e1st\u00ed se p\u0159id\u00e1vaj\u00ed speci\u00e1ln\u00ed p\u00e1ky, kter\u00e9 umo\u017e\u0148uj\u00ed je pak zvednout. Nap\u0159\u00edklad plachty se skl\u00e1daj\u00ed, pe\u010dliv\u011b vn\u00e1\u0161ej\u00ed dovnit\u0159, a pak se pomoc\u00ed pinzety velmi precizn\u011b, p\u0159esn\u011b, zpev\u0148uj\u00ed a zvedaj\u00ed. V\u00fdsledkem je um\u011bleck\u00e9 d\u00edlo, kter\u00e9 lze s \u010dist\u00fdm sv\u011bdom\u00edm a hrdost\u00ed darovat.<\/p>\n<p>A pokud chceme, aby projekt byl \u00fasp\u011b\u0161n\u00fd \u2013 v t\u00fdmu mus\u00ed b\u00fdt alespo\u0148 jeden zlatn\u00edk. Ten, kdo db\u00e1 na kvalitu produktu a zohled\u0148uje v\u0161echny aspekty, ani\u017e by ob\u011btoval jak\u00fdkoli, i v okam\u017eic\u00edch stresu, kdy okolnosti vy\u017eaduj\u00ed n\u011bco rychl\u00e9ho na \u00fakor d\u016fle\u017eit\u00e9ho. V\u0161echny \u00fasp\u011b\u0161n\u00e9 projekty, kter\u00e9 jsou stabiln\u00ed, kter\u00e9 pro\u0161ly zkou\u0161kou \u010dasu, jsou postaveny na tomto principu. Maj\u00ed n\u011bco velmi precizn\u00edho a unik\u00e1tn\u00edho, n\u011bco, co vyu\u017e\u00edv\u00e1 v\u0161echny dostupn\u00e9 mo\u017enosti. V p\u0159\u00edkladu s lod\u00ed v l\u00e1hvi se objevuje to, \u017ee trup lodi proch\u00e1z\u00ed krkem.<\/p>\n<p>Pokud se vr\u00e1t\u00edme k \u00fakolu v\u00fdb\u011bru na\u0161eho cache serveru, jak by bylo mo\u017en\u00e9 tuto metodu pou\u017e\u00edt? Navrhuji takovou variantu v\u00fdb\u011bru ze v\u0161ech syst\u00e9m\u016f, co existuj\u00ed \u2014 net\u0159\u00e1st l\u00e1hv\u00ed, nevyb\u00edrat, ale pod\u00edvat se, co v nich vlastn\u011b je takov\u00e9ho, na co se zam\u011b\u0159it p\u0159i v\u00fdb\u011bru syst\u00e9mu.<\/p>\n<h2>Kde hledat \u00fazk\u00e9 m\u00edsto<\/h2>\n<p>\nPokud nebudeme t\u0159\u00e1st lahv\u00ed a nebudeme proch\u00e1zet v\u0161e, co m\u00e1me podle po\u0159ad\u00ed, pod\u00edvejme se, jak\u00e9 \u00fakoly vzniknou, pokud bychom m\u011bli navrhnout takov\u00fd syst\u00e9m samostatn\u011b. Sestavit kolo samoz\u0159ejm\u011b nebudeme, ale vyu\u017eijeme tento sch\u00e9ma, abychom se zorientovali, na co se zam\u011b\u0159it v popisech produkt\u016f. Nakresl\u00edme takovou sch\u00e9ma.<\/p>\n<p><img decoding=\"async\" alt=\"Jak jsme ve Sportmasteru vyb\u00edrali syst\u00e9m ke\u0161ov\u00e1n\u00ed. \u010c\u00e1st 1\" src=\"\/wp-content\/uploads\/2020\/03\/f2c36d07383d778e60b2f800749012ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nPokud je syst\u00e9m distribuovan\u00fd, znamen\u00e1 to, \u017ee budeme m\u00edt n\u011bkolik server\u016f (6). P\u0159edpokl\u00e1dejme, \u017ee \u010dty\u0159i (co\u017e je pohodln\u00e9 um\u00edstit do obr\u00e1zku, ale samoz\u0159ejm\u011b jich m\u016f\u017ee b\u00fdt kolik chcete). Pokud jsou servery um\u00edst\u011bny na r\u016fzn\u00fdch uzlech, pak na nich v\u0161ech b\u011b\u017e\u00ed n\u011bjak\u00fd k\u00f3d, jeho\u017e \u00fakolem je zajistit, aby tyto uzly vytvo\u0159ily cluster a v p\u0159\u00edpad\u011b p\u0159eru\u0161en\u00ed - spojily se a poznaly se navz\u00e1jem.<\/p>\n<p>D\u00e1le pot\u0159ebujeme logiku k\u00f3du (2), kter\u00e1 se vlastn\u011b t\u00fdk\u00e1 caching. Tento k\u00f3d interaguje s klienty prost\u0159ednictv\u00edm ur\u010dit\u00e9ho API. Klientsk\u00fd k\u00f3d (1) m\u016f\u017ee b\u00fdt jak v r\u00e1mci t\u00e9\u017ee JVM, tak se k n\u011bmu m\u016f\u017ee p\u0159istupovat p\u0159es s\u00ed\u0165. Logika implementovan\u00e1 uvnit\u0159 zahrnuje rozhodnut\u00ed o tom, jak\u00e9 objekty nechat v cache a kter\u00e9 vyhodit. Pro ulo\u017een\u00ed cache pou\u017eijeme pam\u011b\u0165 (3), ale pokud bude pot\u0159eba, m\u016f\u017eeme \u010d\u00e1st dat ulo\u017eit i na disku (4).<\/p>\n<p>Pod\u00edv\u00e1me se, v jak\u00fdch \u010d\u00e1stech bude vznikat z\u00e1t\u011b\u017e. Vlastn\u011b budou z\u00e1t\u011b\u017e z\u00edsk\u00e1vat ka\u017ed\u00e1 \u0161ipka a ka\u017ed\u00fd uzel. Za prv\u00e9, mezi klientsk\u00fdm k\u00f3dem a API, pokud se jedn\u00e1 o s\u00ed\u0165ovou interakci, m\u016f\u017ee b\u00fdt pokles celkem patrn\u00fd. Za druh\u00e9, v r\u00e1mci samotn\u00e9ho API - pokud se p\u0159\u00edli\u0161 sna\u017e\u00edme s komplikovanou logikou, m\u016f\u017eeme narazit na CPU. A bylo by dobr\u00e9, aby logika zbyte\u010dn\u011b nemusela manipulovat s pam\u011bt\u00ed. Zb\u00fdv\u00e1 interakce se souborov\u00fdm syst\u00e9mem \u2013 v b\u011b\u017en\u00e9m p\u0159\u00edpad\u011b se jedn\u00e1 o serializaci \/ obnoven\u00ed a zaps\u00e1n\u00ed \/ p\u0159e\u010dten\u00ed.<\/p>\n<p>D\u00e1le interakce s clusterem. Pravd\u011bpodobn\u011b bude v tomto syst\u00e9mu, ale m\u016f\u017ee b\u00fdt tak\u00e9 odd\u011blen\u011b. Zde je tak\u00e9 pot\u0159eba zohlednit p\u0159enos dat k n\u011bmu, rychlost serializace dat a interakci mezi clustery.<\/p>\n<p>Nyn\u00ed, z jedn\u00e9 strany - m\u016f\u017eeme si p\u0159edstavit, \"jak\u00e9 ozuben\u00e9 kolo se budou ot\u00e1\u010det\" v cache syst\u00e9mu p\u0159i zpracov\u00e1n\u00ed po\u017eadavk\u016f od na\u0161eho k\u00f3du, a z druh\u00e9 strany - m\u016f\u017eeme odhadnout, jak\u00e9 a kolik po\u017eadavk\u016f n\u00e1\u0161 k\u00f3d tomuto syst\u00e9mu vygeneruje. To sta\u010d\u00ed k tomu, abychom u\u010dinili v\u00edce \u010di m\u00e9n\u011b rozumnou volbu \u2013 vybrali syst\u00e9m pro na\u0161e vyu\u017eit\u00ed.<\/p>\n<p><b>Hazelcast<\/b><\/p>\n<p>Pod\u00edv\u00e1me se, jak tuto dekompozici aplikovat na n\u00e1\u0161 seznam. Nap\u0159\u00edklad, Hazelcast.<\/p>\n<p>Aby bylo mo\u017en\u00e9 ukl\u00e1dat a \u010d\u00edst data z Hazelcast, klientsk\u00fd k\u00f3d se odkazuje (1) na API. Hz umo\u017e\u0148uje spustit server jako embedded, a v tomto p\u0159\u00edpad\u011b je vol\u00e1n\u00ed na API vlastn\u011b v\u00fdzvou metody uvnit\u0159 JVM, co\u017e lze pova\u017eovat za bezplatn\u00e9.<\/p>\n<p>Aby logika fungovala v (2), Hz se spol\u00e9h\u00e1 na hash z bajtov\u00e9ho pole serializovan\u00e9ho kl\u00ed\u010de \u2013 jin\u00fdmi slovy, serializace kl\u00ed\u010de prob\u011bhne v ka\u017ed\u00e9m p\u0159\u00edpad\u011b. To je nevyhnuteln\u00fd overhead pro Hz.<br \/>\nStrategie vy\u0159azen\u00ed jsou implementov\u00e1ny dob\u0159e, ale pro specifick\u00e9 p\u0159\u00edpady lze p\u0159ipojit sv\u00e9 vlastn\u00ed. O tuto \u010d\u00e1st se nen\u00ed t\u0159eba ob\u00e1vat.<\/p>\n<p>\u00dalo\u017ei\u0161t\u011b (4) lze p\u0159ipojit. Skv\u011bl\u00e9. Interakce (5) pro embedded lze pova\u017eovat za okam\u017eitou. V\u00fdm\u011bna dat mezi uzly v clusteru (6) \u2013 ano, ta existuje. To je p\u0159\u00ednos pro odolnost proti chyb\u00e1m na \u00fakor rychlosti. Cena m\u016f\u017ee b\u00fdt sn\u00ed\u017eena pomoc\u00ed funkce Hz Near-cache \u2013 data z\u00edskan\u00e1 z jin\u00fdch uzl\u016f clusteru budou mezipam\u011b\u0165ov\u00e1na.<\/p>\n<p>Co lze v takov\u00fdch podm\u00ednk\u00e1ch ud\u011blat pro zv\u00fd\u0161en\u00ed rychlosti?<\/p>\n<p>Nap\u0159\u00edklad, aby se vyhnuli serializaci kl\u00ed\u010de v (2) \u2013 p\u0159idat na Hazelcast dal\u0161\u00ed cache pro nejv\u00edce pou\u017e\u00edvan\u00e1 data. Ve Sportmasteru pro tento \u00fa\u010del zvolili Caffeine.<\/p>\n<p>Pro vylep\u0161en\u00ed na \u00farovni (6) jsou v Hz navr\u017eeny dva typy \u00falo\u017ei\u0161t\u011b: IMap a ReplicatedMap.<br \/>\n<img decoding=\"async\" alt=\"Jak jsme ve Sportmasteru vyb\u00edrali syst\u00e9m ke\u0161ov\u00e1n\u00ed. \u010c\u00e1st 1\" src=\"\/wp-content\/uploads\/2020\/03\/ce752c9a0f46609add8de8644a7ad17f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nStoj\u00ed za zm\u00ednku, jak se Hazelcast dostal do technick\u00e9ho stacku Sportmasteru.<\/p>\n<p>V roce 2012, kdy jsme pracovali na prvn\u00edm pilotn\u00edm projektu budouc\u00edho webu, se pr\u00e1v\u011b Hazelcast stal prvn\u00edm odkazem, kter\u00fd vyhled\u00e1va\u010d poskytl. Sezn\u00e1men\u00ed vzniklo \"na prvn\u00ed pokus\" \u2014 okouzlilo n\u00e1s to, \u017ee pouh\u00e9 dv\u011b hodiny pot\u00e9, co jsme Hz p\u0159ipojili do syst\u00e9mu \u2014 fungoval. A fungoval dob\u0159e. Do konce dne jsme dopsali n\u011bjak\u00e9 testy a byli spokojeni. A tato z\u00e1soba energie n\u00e1m sta\u010dila k p\u0159ekon\u00e1n\u00ed p\u0159ekvapen\u00ed, kter\u00e1 Hz v pr\u016fb\u011bhu \u010dasu p\u0159in\u00e1\u0161el. Nyn\u00ed t\u00fdm Sportmasteru nem\u00e1 d\u016fvod se Hazelcastu vzd\u00e1vat.<\/p>\n<p>Ale takov\u00e9 argumenty, jako \"prvn\u00ed odkaz ve vyhled\u00e1va\u010di\" a \"rychle jsme sestavili HelloWorld\" \u2014 to jsou samoz\u0159ejm\u011b v\u00fdjimky a specifika okam\u017eiku, ve kter\u00e9m prob\u00edhalo rozhodov\u00e1n\u00ed. Opr\u00e1vn\u011bn\u00e9 zkou\u0161ky pro vybran\u00fd syst\u00e9m za\u010d\u00ednaj\u00ed s p\u0159echodem do produkce a pr\u00e1v\u011b na tuto f\u00e1zi by se m\u011blo zam\u011b\u0159it p\u0159i v\u00fdb\u011bru jak\u00e9hokoli syst\u00e9mu, v\u010detn\u011b cache. V na\u0161em p\u0159\u00edpad\u011b lze \u0159\u00edci, \u017ee jsme vybrali Hazelcast n\u00e1hodn\u011b, ale pozd\u011bji se uk\u00e1zalo, \u017ee jsme vybrali spr\u00e1vn\u011b.<\/p>\n<p>Pro v\u00fdrobu je mnohem d\u016fle\u017eit\u011bj\u0161\u00ed monitorov\u00e1n\u00ed, spr\u00e1va selh\u00e1n\u00ed na jednotliv\u00fdch uzlech, replikace dat a n\u00e1klady na \u0161k\u00e1lov\u00e1n\u00ed. Je tedy t\u0159eba se zam\u011b\u0159it na \u00fakoly, kter\u00e9 se objev\u00ed pr\u00e1v\u011b b\u011bhem spr\u00e1vy syst\u00e9mu \u2013 kdy\u017e z\u00e1t\u011b\u017e desetin\u00e1sobn\u011b p\u0159ekro\u010d\u00ed pl\u00e1novanou, kdy\u017e omylem nahrajeme n\u011bco \u0161patn\u011b a \u0161patn\u011b, kdy bude pot\u0159eba nasadit novou verzi k\u00f3du, vym\u011bnit data a ud\u011blat to bez toho, aby si toho klienti v\u0161imli.<\/p>\n<p>Pro v\u0161echny tyto po\u017eadavky je Hazelcast bezesporu vhodn\u00fd.<\/p>\n<h2>Pokra\u010dov\u00e1n\u00ed p\u0159\u00ed\u0161t\u011b<\/h2>\n<p>\nAle Hazelcast nen\u00ed z\u00e1zra\u010dn\u00fd l\u00e9k. V roce 2017 jsme vybrali Hazelcast pro cache v administraci pouze na z\u00e1klad\u011b dobr\u00e9ho dojmu z p\u0159edchoz\u00ed zku\u0161enosti. To m\u011blo kl\u00ed\u010dovou roli v velmi zl\u00e9 vtipu, kv\u016fli \u010demu\u017e jsme se ocitli v obt\u00ed\u017en\u00e9 situaci a \"hrdinn\u011b\" se z n\u00ed dost\u00e1vali 60 dn\u00ed. Ale o tom v dal\u0161\u00ed \u010d\u00e1sti.<\/p>\n<p>A mezit\u00edm\u2026 \u0160\u0165astn\u00fd nov\u00fd k\u00f3d!<br \/>\n<br \/>Zdroj: <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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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\udd47Jak jsme ve Sportmasteru vyb\u00edrali syst\u00e9m caching. \u010c\u00e1st 1 | ProHoster","description":"Ahoj! Jmenuji se Alexej Pjankov a jsem v\u00fdvoj\u00e1\u0159 ve spole\u010dnosti Sportmaster.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-my-v-sportmastere-vybirali-sistemu-keshirovaniya-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/73949","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=73949"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/73949\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/73950"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=73949"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=73949"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=73949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}