{"id":82734,"date":"2020-05-24T13:42:22","date_gmt":"2020-05-24T11:42:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch"},"modified":"2020-05-24T13:42:22","modified_gmt":"2020-05-24T11:42:22","slug":"optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","title":{"rendered":"Optimaliz\u00e1cia za\u0165a\u017eenia na Highload projekte s pomocou ElasticSearch.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ahoj, Habr! Vol\u00e1m sa Maxim Vasiliev, pracujem ako analytik a projektov\u00fd mana\u017e\u00e9r vo FINCH. Dnes by som chcel rozpr\u00e1va\u0165 o tom, ako sme pomocou ElasticSearch dok\u00e1zali spracova\u0165 15 mili\u00f3nov po\u017eiadaviek za 6 min\u00fat a optimalizova\u0165 denn\u00e9 za\u0165a\u017eenie na str\u00e1nke jedn\u00e9ho z na\u0161ich klientov. Bohu\u017eia\u013e, mus\u00edme sa zaob\u00eds\u0165 bez mien, preto\u017ee m\u00e1me NDA; d\u00fafame, \u017ee obsah \u010dl\u00e1nku t\u00fdm nebude trpie\u0165. Po\u010fme na to.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Ako je projekt organizovan\u00fd<\/h2>\n<p>\nNa na\u0161ej backendovej strane vytv\u00e1rame slu\u017eby, ktor\u00e9 zabezpe\u010duj\u00fa funk\u010dnos\u0165 webov\u00fdch str\u00e1nok a mobilnej aplik\u00e1cie n\u00e1\u0161ho klienta. Celkov\u00fa \u0161trukt\u00faru si m\u00f4\u017eete pozrie\u0165 na sch\u00e9me:<\/p>\n<p><img decoding=\"async\" alt=\"Optimaliz\u00e1cia za\u0165a\u017eenia na Highload projekte s pomocou ElasticSearch.\" src=\"\/wp-content\/uploads\/2020\/05\/7bda10a9965163c2b175b501f50bc342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV procese pr\u00e1ce spracov\u00e1vame ve\u013ek\u00e9 mno\u017estvo transakci\u00ed: n\u00e1kupov, v\u00fdplat, oper\u00e1ci\u00ed s pou\u017e\u00edvate\u013esk\u00fdmi zostatkami, na ktor\u00e9 uchov\u00e1vame ve\u013ea logov, ako aj importujeme a exportujeme tieto d\u00e1ta do extern\u00fdch syst\u00e9mov. <\/p>\n<p>Existuj\u00fa aj sp\u00e4tn\u00e9 procesy, ke\u010f prij\u00edmame d\u00e1ta od klienta a pren\u00e1\u0161ame ich pou\u017e\u00edvate\u013eom. Okrem toho existuj\u00fa procesy t\u00fdkaj\u00face sa platieb a vernostn\u00fdch programov.<\/p>\n<h2>Kr\u00e1tky \u00favod<\/h2>\n<p>\nP\u00f4vodne sme ako jedin\u00e9 \u00falo\u017eisko d\u00e1t pou\u017e\u00edvali PostgreSQL. Jeho \u0161tandardn\u00e9 v\u00fdhody pre S\u00daDB: pr\u00edtomnos\u0165 transakci\u00ed, rozvinut\u00fd jazyk pre v\u00fdber d\u00e1t, \u0161irok\u00e9 n\u00e1stroje na integr\u00e1ciu; v kombin\u00e1cii s dobrou v\u00fdkonnos\u0165ou uspokojovali na\u0161e potreby pomerne dlho. <\/p>\n<p>V Postgres sme uchov\u00e1vali \u00faplne v\u0161etky d\u00e1ta: od transakci\u00ed po novinky. Ale po\u010det pou\u017e\u00edvate\u013eov r\u00e1stol, rovnako ako aj po\u010det po\u017eiadaviek.<\/p>\n<p><i>Pre pochopenie, ro\u010dn\u00fd po\u010det rel\u00e1ci\u00ed v roku 2017 iba na desktopovej str\u00e1nke \u2014 131 mili\u00f3nov. V roku 2018 \u2014 125 mili\u00f3nov. 2019 op\u00e4\u0165 130 mili\u00f3nov. Pridajte tam e\u0161te 100-200 mili\u00f3nov z mobilnej verzie str\u00e1nky a mobilnej aplik\u00e1cie, a z\u00edskate obrovsk\u00e9 mno\u017estvo po\u017eiadaviek. <\/i><\/p>\n<p>S rastom projektu, Postgres prestal zvl\u00e1da\u0165 za\u0165a\u017eenie, nest\u00edhali sme \u2014 objavilo sa ve\u013ek\u00e9 mno\u017estvo rozmanit\u00fdch po\u017eiadaviek, pre ktor\u00e9 sme nedok\u00e1zali vytvori\u0165 dostato\u010dn\u00e9 mno\u017estvo indexov. <\/p>\n<p>Uvedomovali sme si, \u017ee je potrebn\u00e9 in\u00e9 \u00falo\u017eisk\u00e1 d\u00e1t, ktor\u00e9 by uspokojili na\u0161e potreby a zn\u00ed\u017eili za\u0165a\u017eenie z PostgreSQL. Ako mo\u017en\u00e9 varianty sme zva\u017eovali Elasticsearch a MongoDB. Posledne uveden\u00e9 prehr\u00e1valo z nasleduj\u00facich d\u00f4vodov:<\/p>\n<ol>\n<li>Pomal\u00e1 r\u00fdchlos\u0165 indexovania s rastom objemu d\u00e1t v indexoch. U Elastic r\u00fdchlos\u0165 nez\u00e1vis\u00ed od objemu d\u00e1t.<\/li>\n<li>\u017diadne vyh\u013ead\u00e1vanie v texte<\/li>\n<\/ol>\n<p>\nTak sme si vybrali Elastic a pripravili sme sa na prechod. <\/p>\n<h2>Prechod na Elastic<\/h2>\n<p>\n1. Prechod sme za\u010dali s vyh\u013ead\u00e1van\u00edm predajn\u00fdch miest. N\u00e1\u0161 klient m\u00e1 celkovo pribli\u017ene 70 000 predajn\u00fdch miest a potrebujeme nieko\u013eko typov vyh\u013ead\u00e1vania na webovej str\u00e1nke a v aplik\u00e1cii:<\/p>\n<ul>\n<li>Textov\u00e9 vyh\u013ead\u00e1vanie pod\u013ea n\u00e1zvu obce<\/li>\n<li>Geoh\u013eadanie v zadanom r\u00e1diuse od ur\u010ditej polo\u017eky. Napr\u00edklad, ak chce pou\u017e\u00edvate\u013e vidie\u0165, ktor\u00e9 predajn\u00e9 miesta s\u00fa najbli\u017e\u0161ie k jeho domu.<\/li>\n<li>Vyh\u013ead\u00e1vanie v zadanom \u0161tvorci \u2013 pou\u017e\u00edvate\u013e nakresl\u00ed \u0161tvorec na mape a zobrazia sa mu v\u0161etky body v tomto r\u00e1diuse. <\/li>\n<li>Vyh\u013ead\u00e1vanie pod\u013ea dodato\u010dn\u00fdch filtrov. Predajn\u00e9 miesta sa od seba l\u00ed\u0161ia sortimentom. <\/li>\n<\/ul>\n<p>\n\u010co sa organiz\u00e1cie t\u00fdka, v Postgres m\u00e1me ulo\u017een\u00fd zdroj \u00fadajov ako na mape, tak aj v novink\u00e1ch, a v Elastic sa vytv\u00e1raj\u00fa Snapshoty z origin\u00e1lnych d\u00e1t. Ide o to, \u017ee p\u00f4vodne Postgres nezvl\u00e1dal vyh\u013ead\u00e1vanie pod\u013ea v\u0161etk\u00fdch krit\u00e9ri\u00ed. Nielen\u017ee bolo ve\u013ea indexov, ale mohli sa aj pret\u00edna\u0165, tak\u017ee pl\u00e1nova\u010d Postgres sa str\u00e1cal a nedok\u00e1zal pochopi\u0165, ktor\u00fd index m\u00e1 pou\u017ei\u0165. <\/p>\n<p>2. \u010eal\u0161\u00edm na rade bol sekcia noviniek. Na webovej str\u00e1nke sa ka\u017ed\u00fd de\u0148 objavuj\u00fa publik\u00e1cie, a aby sa pou\u017e\u00edvate\u013e nestratil v pr\u00fade inform\u00e1ci\u00ed, je potrebn\u00e9 d\u00e1ta pred vydan\u00edm zoradi\u0165. Na to je potrebn\u00e9 vyh\u013ead\u00e1vanie: na str\u00e1nke m\u00f4\u017eete vyh\u013ead\u00e1va\u0165 pod\u013ea textu zhodu a z\u00e1rove\u0148 pripoji\u0165 dodato\u010dn\u00e9 filtre, ktor\u00e9 s\u00fa tie\u017e spracovan\u00e9 cez Elastic. <\/p>\n<p>3. Potom sme presunuli spracovanie transakci\u00ed. Pou\u017e\u00edvatelia m\u00f4\u017eu nakupova\u0165 ur\u010dit\u00e9 produkty na webovej str\u00e1nke a z\u00fa\u010dast\u0148ova\u0165 sa s\u00fa\u0165a\u017ee. Po tak\u00fdchto n\u00e1kupoch spracov\u00e1vame ve\u013ek\u00e9 mno\u017estvo d\u00e1t, najm\u00e4 cez v\u00edkendy a sviatky. Pre porovnanie, ak v be\u017en\u00e9 dni po\u010det n\u00e1kupov dosahuje pribli\u017ene 1,5\u20132 mili\u00f3na, po\u010das sviatkov sa \u010d\u00edslo m\u00f4\u017ee vy\u0161plha\u0165 a\u017e na 53 mili\u00f3nov.<\/p>\n<p>Tieto \u00fadaje je potrebn\u00e9 spracova\u0165 v \u010do najkrat\u0161om \u010dase \u2014 pou\u017e\u00edvatelia nemaj\u00fa radi, ak musia \u010daka\u0165 nieko\u013eko dn\u00ed na v\u00fdsledok. Ceze Postgres tak\u00e9to lehoty jednoducho nedosiahneme \u2014 \u010dasto sme dost\u00e1vali zamknutia a k\u00fdm sme spracovali v\u0161etky po\u017eiadavky, pou\u017e\u00edvatelia nemohli skontrolova\u0165, \u010di vyhrali alebo nie. To nie je pre biznis pr\u00edjemn\u00e9, a preto sme presunuli spracovanie do Elasticsearch.<\/p>\n<h2>Frekvencia<\/h2>\n<p>\nMoment\u00e1lne s\u00fa aktualiz\u00e1cie nastaven\u00e9 udalos\u0165ou, pod\u013ea nasleduj\u00facich podmienok:<\/p>\n<ol>\n<li>Predajn\u00e9 miesta. Ako n\u00e1hle dostaneme \u00fadaje z extern\u00e9ho zdroja, okam\u017eite spust\u00edme aktualiz\u00e1ciu. <\/li>\n<li>Novinky. Ke\u010f sa na str\u00e1nke uprav\u00ed ak\u00e1ko\u013evek novinka, automaticky sa odo\u0161le do Elastic.<\/li>\n<\/ol>\n<p>\nTu sa e\u0161te raz oplat\u00ed poveda\u0165 o v\u00fdhod\u00e1ch Elastic. V Postgres pri odosielan\u00ed po\u017eiadavky mus\u00edte \u010daka\u0165, k\u00fdm spracuje v\u0161etky z\u00e1znamy. V Elastic m\u00f4\u017eete odosla\u0165 10 tis\u00edc z\u00e1znamov a okam\u017eite za\u010da\u0165 pracova\u0165, bez \u010dakania, k\u00fdm sa z\u00e1znamy rozpr\u00eddu po v\u0161etk\u00fdch Shards. Samozrejme, nejak\u00fd Shard alebo Replica nemusia vidie\u0165 \u00fadaje okam\u017eite, ale ve\u013emi r\u00fdchlo bud\u00fa v\u0161etky dostupn\u00e9.<\/p>\n<h2>Sp\u00f4soby integr\u00e1cie<\/h2>\n<p>\nExistuj\u00fa 2 sp\u00f4soby integr\u00e1cie s Elastic:<\/p>\n<ol>\n<li>Cez nat\u00edvneho klienta po TCP. Nat\u00edvny driver postupne vymiera: prest\u00e1vaj\u00fa ho podporova\u0165, m\u00e1 ve\u013emi nepraktick\u00fa syntax. Preto ho prakticky nepou\u017e\u00edvame a sna\u017e\u00edme sa ho \u00faplne opusti\u0165.<\/li>\n<li>Cez HTTP rozhranie, v ktorom m\u00f4\u017eeme pou\u017ei\u0165 po\u017eiadavky v JSON form\u00e1te a syntax Lucene. To posledn\u00e9 je textov\u00fd engine, ktor\u00fd pou\u017e\u00edva Elastic. V takom pr\u00edpade z\u00edskavame mo\u017enos\u0165 Batch cez JSON po\u017eiadavky po HTTP. Tento variant sa sna\u017e\u00edme pou\u017e\u00edva\u0165.<\/li>\n<\/ol>\n<p>\nV\u010faka HTTP rozhraniu m\u00f4\u017eeme vyu\u017ei\u0165 kni\u017enice, ktor\u00e9 poskytuj\u00fa asynchr\u00f3nnu implement\u00e1ciu HTTP klienta. M\u00f4\u017eeme vyu\u017ei\u0165 v\u00fdhodu Batch a asynchr\u00f3nneho API, \u010do nakoniec poskytuje vysok\u00fd v\u00fdkon, ktor\u00fd n\u00e1m ve\u013emi pomohol po\u010das ve\u013ekej akcie (o tom ni\u017e\u0161ie)<\/p>\n<p>Tro\u0161ku \u010d\u00edsel na porovnanie: <\/p>\n<ul>\n<li>Ulo\u017eenie pou\u017e\u00edvate\u013eov, ktor\u00ed z\u00edskali ceny v Postgres v 20 vl\u00e1knach bez zoskupen\u00ed: 460713 z\u00e1znamov za 42 sek\u00fand<\/li>\n<li>Elastic + reakt\u00edvny klient na 10 vl\u00e1kien + batch na 1000 prvkov: 596749 z\u00e1znamov za 11 sek\u00fand<\/li>\n<li>Elastic + reakt\u00edvny klient na 10 vl\u00e1kien + batch na 1000 prvkov: <b>23801684 z\u00e1znamov za 4 min\u00faty<\/b><\/li>\n<\/ul>\n<p>\nTeraz sme nap\u00edsali spr\u00e1vcu po\u017eiadaviek po HTTP, ktor\u00fd vytv\u00e1ra JSON, ako Batch\/ne Batch a posiela ho cez ak\u00e9hoko\u013evek HTTP klienta bez oh\u013eadu na kni\u017enicu. Takisto je mo\u017en\u00e9 vybra\u0165, \u010di posiela\u0165 po\u017eiadavky synchr\u00f3nne alebo asynchr\u00f3nne.<\/p>\n<p>V niektor\u00fdch integr\u00e1ci\u00e1ch st\u00e1le pou\u017e\u00edvame ofici\u00e1lne transportn\u00e9 klienty, ale to je len ot\u00e1zka najbli\u017e\u0161ej refaktoriz\u00e1cie. Pri tom sa pou\u017e\u00edva vlastn\u00fd klient postaven\u00fd na z\u00e1klade Spring WebClient.<\/p>\n<p><img decoding=\"async\" alt=\"Optimaliz\u00e1cia za\u0165a\u017eenia na Highload projekte s pomocou ElasticSearch.\" src=\"\/wp-content\/uploads\/2020\/05\/112bf3261c93ce585d8559b420e79f64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Ve\u013ek\u00e1 akcia<\/h2>\n<p>\nRaz ro\u010dne sa na projekte konaj\u00fa ve\u013ek\u00e9 akcie pre pou\u017e\u00edvate\u013eov \u2014 to je ten prav\u00fd Highload, ke\u010f pracujeme s desiatkami mili\u00f3nov pou\u017e\u00edvate\u013eov s\u00fa\u010dasne.<\/p>\n<p>Zvy\u010dajne s\u00fa \u0161pi\u010dky za\u0165a\u017eenia po\u010das sviatkov, ale t\u00e1to akcia je \u00faplne in\u00e1 \u00farove\u0148. V predminulom roku sme v de\u0148 akcie predali 27 580 890 kusov tovaru. \u00dadaje sa spracov\u00e1vali viac ako pol hodiny, \u010do sp\u00f4sobovalo nepr\u00edjemnosti pou\u017e\u00edvate\u013eom. Pou\u017e\u00edvatelia z\u00edskali ceny za \u00fa\u010das\u0165, ale uk\u00e1zalo sa, \u017ee proces treba ur\u00fdchli\u0165. <\/p>\n<p>Na za\u010diatku roku 2019 sme sa rozhodli, \u017ee potrebujeme ElasticSearch. Cel\u00fd rok sme organizovali spracovanie prijat\u00fdch d\u00e1t v Elastic a ich zobrazenie v API mobilnej aplik\u00e1cie a webovej str\u00e1nky. V\u00fdsledkom bolo, \u017ee na nasleduj\u00faci rok sme po\u010das akcie spracovali <b>15 131 783 z\u00e1znamov za 6 min\u00fat. <\/b><\/p>\n<p>Ke\u010f\u017ee m\u00e1me ve\u013ea z\u00e1ujemcov o n\u00e1kup tovaru a \u00fa\u010das\u0165 v s\u00fa\u0165a\u017eiach, je to do\u010dasn\u00e9 opatrenie. Moment\u00e1lne posielame aktu\u00e1lne inform\u00e1cie do Elastic, ale v bud\u00facnosti pl\u00e1nujeme presun\u00fa\u0165 arch\u00edvne inform\u00e1cie z predch\u00e1dzaj\u00facich mesiacov do Postgres ako trval\u00e9 \u00falo\u017eisko. Aby sme nezahltili index Elastic, ktor\u00fd m\u00e1 tie\u017e svoje obmedzenia.<\/p>\n<h2>Z\u00e1ver\/poznatky<\/h2>\n<p>\nV s\u00fa\u010dasnosti sme presunuli do Elastic v\u0161etky slu\u017eby, ktor\u00e9 sme chceli, a zatia\u013e sme urobili prest\u00e1vku. Teraz nad hlavn\u00e9 perzistentn\u00e9 \u00falo\u017eisko v Postgres budujeme index v Elastic, ktor\u00fd preber\u00e1 pou\u017e\u00edvate\u013esk\u00e9 za\u0165a\u017eenie.<\/p>\n<p>V bud\u00facnosti pl\u00e1nujeme pres\u00fava\u0165 slu\u017eby, ak pochop\u00edme, \u017ee \u017eiadosti o d\u00e1ta sa st\u00e1vaj\u00fa pr\u00edli\u0161 rozmanit\u00fdmi a h\u013eadaj\u00fa sa pod\u013ea neobmedzen\u00e9ho po\u010dtu st\u013apcov. To u\u017e nie je \u00faloha pre Postgres.<\/p>\n<p>Ak budeme potrebova\u0165 fulltextov\u00e9 vyh\u013ead\u00e1vanie vo funk\u010dnosti alebo ak budeme ma\u0165 mnoho r\u00f4znorod\u00fdch krit\u00e9ri\u00ed vyh\u013ead\u00e1vania, u\u017e vieme, \u017ee to treba presun\u00fa\u0165 do Elastic.<\/p>\n<h2>\u2318\u2318\u2318<\/h2>\n<p>\n\u010eakujeme, \u017ee ste si pre\u010d\u00edtali. Ak vo va\u0161ej spolo\u010dnosti tie\u017e pou\u017e\u00edvate ElasticSearch a m\u00e1te vlastn\u00e9 pr\u00edpady realiz\u00e1cie, pode\u013ete sa o ne. Bude zauj\u00edmav\u00e9 zisti\u0165, ako to robia in\u00ed \ud83d\ude42<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/503214\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 FINCH. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ElasticSearch, \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 15 \u043c\u043b\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0437\u0430 6 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0438\u043c\u0451\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 NDA, \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":82735,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-82734","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 FINCH.\" \/>\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\/sk\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 Highload-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ElasticSearch | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 FINCH.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch\" \/>\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-05-24T11:42:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-24T11:42:22+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\udd47Optimaliz\u00e1cia za\u0165a\u017eenia na Highload projekte pomocou ElasticSearch | ProHoster","description":"Ahoj, Habr! Vol\u00e1m sa Maxim Vasiliev, pracujem ako analytik a projektov\u00fd mana\u017e\u00e9r vo FINCH.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 Highload-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ElasticSearch | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 FINCH.","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","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-05-24T11:42:22+00:00","article:modified_time":"2020-05-24T11:42:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"82734","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 15:32:25","updated":"2022-09-28 21:13:07","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/82734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=82734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/82734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/82735"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=82734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=82734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=82734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}