{"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\/cs\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","title":{"rendered":"Optimalizace zat\u00ed\u017een\u00ed na projektu Highload pomoc\u00ed ElasticSearch.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ahoj, Habr! Jmenuji se Maxim Vasiljev, pracuji jako analytik a projektov\u00fd mana\u017eer ve FINCH. Dnes bych r\u00e1d pov\u011bd\u011bl, jak jsme pomoc\u00ed ElasticSearch dok\u00e1zali zpracovat 15 milion\u016f dotaz\u016f za 6 minut a optimalizovat ka\u017edodenn\u00ed z\u00e1t\u011b\u017e na webu jednoho z na\u0161ich klient\u016f. Bohu\u017eel se mus\u00edme obej\u00edt bez jmen, proto\u017ee m\u00e1me NDA, douf\u00e1me, \u017ee obsah \u010dl\u00e1nku t\u00edm nebude po\u0161kozen. Poj\u010fme za\u010d\u00edt.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Jak je projekt strukturov\u00e1n<\/h2>\n<p>\nNa na\u0161em backendu vytv\u00e1\u0159\u00edme slu\u017eby, kter\u00e9 zaji\u0161\u0165uj\u00ed funk\u010dnost webov\u00fdch str\u00e1nek a mobiln\u00ed aplikace na\u0161eho klienta. Celkovou strukturu lze vid\u011bt na sch\u00e9matu:<\/p>\n<p><img decoding=\"async\" alt=\"Optimalizace zat\u00ed\u017een\u00ed na projektu Highload pomoc\u00ed ElasticSearch.\" src=\"\/wp-content\/uploads\/2020\/05\/7bda10a9965163c2b175b501f50bc342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nB\u011bhem pr\u00e1ce zpracov\u00e1v\u00e1me velk\u00e9 mno\u017estv\u00ed transakc\u00ed: n\u00e1kup\u016f, v\u00fdplat, operac\u00ed s u\u017eivatelsk\u00fdmi z\u016fstatky, pro kter\u00e9 uchov\u00e1v\u00e1me mnoho log\u016f, a tak\u00e9 tyto \u00fadaje naimportujeme a exportujeme do extern\u00edch syst\u00e9m\u016f. <\/p>\n<p>Prob\u00edhaj\u00ed tak\u00e9 opa\u010dn\u00e9 procesy, kdy z\u00edsk\u00e1v\u00e1me \u00fadaje od klienta a p\u0159ed\u00e1v\u00e1me je u\u017eivatel\u016fm. Krom\u011b toho existuj\u00ed je\u0161t\u011b procesy souvisej\u00edc\u00ed s platbami a bonusov\u00fdmi programy.<\/p>\n<h2>Kr\u00e1tk\u00fd \u00favod<\/h2>\n<p>\nP\u016fvodn\u011b jsme jako jedin\u00e9 \u00falo\u017ei\u0161t\u011b dat pou\u017e\u00edvali PostgreSQL. Jeho standardn\u00ed v\u00fdhody pro DBMS: existence transakc\u00ed, vysp\u011bl\u00fd jazyk pro dotazy, \u0161irok\u00fd n\u00e1stroj pro integraci; v kombinaci s dobrou v\u00fdkonnost\u00ed dlouho uspokojovaly na\u0161e pot\u0159eby. <\/p>\n<p>Uchov\u00e1vali jsme v Postgresu naprosto v\u0161echna data: od transakc\u00ed a\u017e po novinky. Ale po\u010det u\u017eivatel\u016f rostl a s n\u00edm i po\u010det dotaz\u016f.<\/p>\n<p><i>Pro p\u0159edstavu, ro\u010dn\u00ed po\u010det relac\u00ed v roce 2017 pouze na desktopov\u00e9 verzi webu \u2014 131 milion\u016f. V roce 2018 \u2014 125 milion\u016f. V roce 2019 op\u011bt 130 milion\u016f. P\u0159idejte k tomu je\u0161t\u011b 100-200 milion\u016f z mobiln\u00ed verze webu a mobiln\u00ed aplikace a dostanete kolos\u00e1ln\u00ed mno\u017estv\u00ed dotaz\u016f. <\/i><\/p>\n<p>S r\u016fstem projektu p\u0159estal Postgres zvl\u00e1dat z\u00e1t\u011b\u017e, m\u011bli jsme zpo\u017ed\u011bn\u00ed \u2014 objevilo se velk\u00e9 mno\u017estv\u00ed rozmanit\u00fdch dotaz\u016f, pro kter\u00e9 jsme nedok\u00e1zali vytvo\u0159it dostatek index\u016f. <\/p>\n<p>Ch\u00e1pali jsme, \u017ee existuje pot\u0159eba jin\u00fdch \u00falo\u017ei\u0161\u0165 dat, kter\u00e1 by splnila na\u0161e pot\u0159eby a uvolnila z\u00e1t\u011b\u017e z PostgreSQL. Jako mo\u017en\u00e9 varianty jsme zva\u017eovali Elasticsearch a MongoDB. Druh\u00e1 mo\u017enost prohr\u00e1vala v n\u00e1sleduj\u00edc\u00edch bodech:<\/p>\n<ol>\n<li>Pomalej\u0161\u00ed rychlost indexace s rostouc\u00edm objemem dat v indexech. U Elastic rychlost nez\u00e1vis\u00ed na objemu dat.<\/li>\n<li>Nen\u00ed zde plnotextov\u00e9 vyhled\u00e1v\u00e1n\u00ed.<\/li>\n<\/ol>\n<p>\nTak jsme si vybrali Elastic a p\u0159ipravili se na p\u0159echod. <\/p>\n<h2>P\u0159echod na Elastic.<\/h2>\n<p>\n1. Za\u010dali jsme p\u0159echod s vyhled\u00e1vac\u00ed slu\u017ebou pro prodejn\u00ed m\u00edsta. N\u00e1\u0161 klient m\u00e1 celkem p\u0159ibli\u017en\u011b 70 000 prodejn\u00edch m\u00edst a z\u00e1rove\u0148 jsou pot\u0159eba r\u016fzn\u00e9 typy vyhled\u00e1v\u00e1n\u00ed na webu a v aplikaci:<\/p>\n<ul>\n<li>Textov\u00e9 vyhled\u00e1v\u00e1n\u00ed podle n\u00e1zvu obce.<\/li>\n<li>Geopo\u010d\u00edt\u00e1n\u00ed v dan\u00e9m r\u00e1diu od ur\u010dit\u00e9ho bodu. Nap\u0159\u00edklad pokud chce u\u017eivatel vid\u011bt, kter\u00e1 prodejn\u00ed m\u00edsta jsou nejbl\u00ed\u017ee jeho domu.<\/li>\n<li>Vyhled\u00e1v\u00e1n\u00ed v ur\u010den\u00e9m p\u00e1smu \u2013 u\u017eivatel ozna\u010d\u00ed obd\u00e9ln\u00edk na map\u011b a zobraz\u00ed se mu v\u0161echna m\u00edsta v tomto radiusu. <\/li>\n<li>Vyhled\u00e1v\u00e1n\u00ed podle dal\u0161\u00edch filtr\u016f. Prodejn\u00ed m\u00edsta se li\u0161\u00ed sortimentem. <\/li>\n<\/ul>\n<p>\nPokud hovo\u0159\u00edme o organizaci, m\u00e1me v Postgresu zdroj dat jak podle mapy, tak podle novinek, a v Elastic se d\u011blaj\u00ed snapshoty z origin\u00e1ln\u00edch dat. Fakt je ten, \u017ee p\u016fvodn\u011b Postgres nezvl\u00e1dal vyhled\u00e1v\u00e1n\u00ed podle v\u0161ech krit\u00e9ri\u00ed. Nejen, \u017ee bylo hodn\u011b index\u016f, ale ty mohly tak\u00e9 p\u0159ekr\u00fdvat, tak\u017ee pl\u00e1nova\u010d Postgresu se ztr\u00e1cel a nev\u011bd\u011bl, kter\u00fd index pou\u017e\u00edt. <\/p>\n<p>2. Dal\u0161\u00edm na \u0159ad\u011b byla sekce novinek. Na webu ka\u017ed\u00fd den vych\u00e1zej\u00ed publikace, aby se u\u017eivatel neztratil v toku informac\u00ed, je t\u0159eba data p\u0159ed vyd\u00e1v\u00e1n\u00edm \u0159adit. K tomu je pot\u0159eba hled\u00e1n\u00ed: na webu lze hledat dle textov\u00fdch shod a z\u00e1rove\u0148 zapojit dal\u0161\u00ed filtry, kter\u00e9 tak\u00e9 b\u011b\u017e\u00ed p\u0159es Elastic. <\/p>\n<p>3. Pot\u00e9 jsme p\u0159enesli zpracov\u00e1n\u00ed transakc\u00ed. U\u017eivatel\u00e9 mohou na webu kupovat ur\u010dit\u00e9 zbo\u017e\u00ed a \u00fa\u010dastnit se sout\u011b\u017e\u00ed. Po takov\u00fdch n\u00e1kupech zpracov\u00e1v\u00e1me velk\u00e9 mno\u017estv\u00ed dat, zejm\u00e9na o v\u00edkendech a sv\u00e1tc\u00edch. Pro srovn\u00e1n\u00ed, pokud v b\u011b\u017en\u00e9 dny po\u010det n\u00e1kup\u016f \u010din\u00ed p\u0159ibli\u017en\u011b 1,5\u20132 miliony, b\u011bhem sv\u00e1tk\u016f m\u016f\u017ee \u010d\u00edslo dos\u00e1hnout 53 milion\u016f.<\/p>\n<p>P\u0159itom je t\u0159eba data zpracovat co nejrychleji \u2014 u\u017eivatel\u00e9 neradi \u010dekaj\u00ed n\u011bkolik dn\u00ed na v\u00fdsledek. P\u0159es Postgres takov\u00fdch lh\u016ft jen t\u011b\u017eko dos\u00e1hnete \u2014 \u010dasto jsme dost\u00e1vali zablokov\u00e1n\u00ed a zat\u00edmco jsme zpracov\u00e1vali v\u0161echny po\u017eadavky, u\u017eivatel\u00e9 nemohli zkontrolovat, zda vyhr\u00e1li nebo ne. To nen\u00ed pro podnik\u00e1n\u00ed p\u0159\u00edjemn\u00e9, a proto jsme zpracov\u00e1n\u00ed p\u0159evedli na Elasticsearch.<\/p>\n<h2>Periodicita<\/h2>\n<p>\nAktu\u00e1ln\u011b jsou aktualizace nastaveny ud\u00e1lostn\u011b, podle n\u00e1sleduj\u00edc\u00edch podm\u00ednek:<\/p>\n<ol>\n<li>Prodejn\u00ed m\u00edsta. Jakmile k n\u00e1m p\u0159ich\u00e1zej\u00ed data z extern\u00edho zdroje, okam\u017eit\u011b spou\u0161t\u00edme aktualizaci. <\/li>\n<li>Novinky. Jakmile je na webu upravena n\u011bjak\u00e1 novinka, automaticky se odes\u00edl\u00e1 do Elastic.<\/li>\n<\/ol>\n<p>\nZde je je\u0161t\u011b jednou t\u0159eba zm\u00ednit v\u00fdhody Elastic. V Postgres p\u0159i odesl\u00e1n\u00ed dotazu mus\u00edte \u010dekat, a\u017e jsou v\u0161echny z\u00e1znamy poctiv\u011b zpracov\u00e1ny. V Elastic m\u016f\u017eete odeslat 10 tis\u00edc z\u00e1znam\u016f a okam\u017eit\u011b za\u010d\u00edt pracovat, ani\u017e byste museli \u010dekat, a\u017e se z\u00e1znamy rozpt\u00fdl\u00ed po v\u0161ech Shards. Samoz\u0159ejm\u011b n\u011bjak\u00fd Shard nebo Replica nemus\u00ed vid\u011bt data okam\u017eit\u011b, ale velmi brzy budou v\u0161echna k dispozici.<\/p>\n<h2>Zp\u016fsoby integrace<\/h2>\n<p>\nExistuj\u00ed 2 zp\u016fsoby integrace s Elastic:<\/p>\n<ol>\n<li>P\u0159es nativn\u00edho klienta po TCP. Nativn\u00ed ovlada\u010d postupn\u011b vych\u00e1z\u00ed z m\u00f3dy: p\u0159est\u00e1vaj\u00ed jej podporovat a m\u00e1 velmi nepraktickou syntaxi. Proto jej prakticky nepou\u017e\u00edv\u00e1me a sna\u017e\u00edme se od n\u011bj zcela vzd\u00e1t.<\/li>\n<li>P\u0159es HTTP rozhran\u00ed, ve kter\u00e9m lze pou\u017e\u00edvat jak JSON dotazy, tak syntaxi Lucene. To posledn\u00ed je textov\u00fd engine, kter\u00fd pou\u017e\u00edv\u00e1 Elastic. V t\u00e9to variant\u011b z\u00edsk\u00e1v\u00e1me mo\u017enost Batch p\u0159es JSON dotazy po HTTP. Tento variant se sna\u017e\u00edme vyu\u017e\u00edvat.<\/li>\n<\/ol>\n<p>\nD\u00edky HTTP rozhran\u00ed m\u016f\u017eeme pou\u017e\u00edvat knihovny, kter\u00e9 poskytuj\u00ed asynchronn\u00ed implementaci HTTP klienta. M\u016f\u017eeme vyu\u017e\u00edt v\u00fdhody Batch a asynchronn\u00edho API, co\u017e v kone\u010dn\u00e9m d\u016fsledku d\u00e1v\u00e1 vysok\u00fd v\u00fdkon, kter\u00fd velmi pomohl v dnech velk\u00e9 akce (o tom n\u00ed\u017ee)<\/p>\n<p>Trochu \u010d\u00edsel pro srovn\u00e1n\u00ed: <\/p>\n<ul>\n<li>Ulo\u017een\u00ed u\u017eivatel\u016f, kte\u0159\u00ed z\u00edskali ceny v Postgres ve 20 vl\u00e1knech bez seskupen\u00ed: 460713 z\u00e1znam\u016f za 42 sekund<\/li>\n<li>Elastic + reaktivn\u00ed klient na 10 vl\u00e1knem + batch na 1000 prvk\u016f: 596749 z\u00e1znam\u016f za 11 sekund<\/li>\n<li>Elastic + reaktivn\u00ed klient na 10 vl\u00e1knem + batch na 1000 prvk\u016f: <b>23801684 z\u00e1znam\u016f za 4 minuty<\/b><\/li>\n<\/ul>\n<p>\nNyn\u00ed jsme napsali mana\u017eer dotaz\u016f p\u0159es HTTP, kter\u00fd stav\u00ed JSON, jako Batch\/ne Batch a odes\u00edl\u00e1 p\u0159es jak\u00fdkoli HTTP klient bez ohledu na knihovnu. Tak\u00e9 lze vybrat, zda odes\u00edlat dotazy synchronn\u011b nebo asynchronn\u011b.<\/p>\n<p>V n\u011bkter\u00fdch integrac\u00edch st\u00e1le pou\u017e\u00edv\u00e1me ofici\u00e1ln\u00ed transportn\u00ed klient, ale to je jen ot\u00e1zka bl\u00edzk\u00e9 refaktorizace. P\u0159itom pou\u017eijeme vlastn\u00ed klient, postaven\u00fd na z\u00e1klad\u011b Spring WebClient.<\/p>\n<p><img decoding=\"async\" alt=\"Optimalizace zat\u00ed\u017een\u00ed na projektu Highload pomoc\u00ed ElasticSearch.\" src=\"\/wp-content\/uploads\/2020\/05\/112bf3261c93ce585d8559b420e79f64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Velk\u00e1 akce<\/h2>\n<p>\nJednou za rok se na projektu kon\u00e1 velk\u00e1 akce pro u\u017eivatele \u2014 to je ten prav\u00fd Highload, proto\u017ee v tuto dobu pracujeme s des\u00edtkami milion\u016f u\u017eivatel\u016f sou\u010dasn\u011b.<\/p>\n<p>Obvykle doch\u00e1z\u00ed k vrchol\u016fm zat\u00ed\u017een\u00ed b\u011bhem sv\u00e1tk\u016f, ale tato akce je na \u00fapln\u011b jin\u00e9 \u00farovni. P\u0159ed dv\u011bma lety jsme v den akce prodali 27 580 890 kus\u016f zbo\u017e\u00ed. Data byla zpracov\u00e1v\u00e1na v\u00edce ne\u017e p\u016fl hodiny, co\u017e zp\u016fsobilo nep\u0159\u00edjemnosti u\u017eivatel\u016fm. U\u017eivatel\u00e9 z\u00edskali ceny za \u00fa\u010dast, ale bylo jasn\u00e9, \u017ee proces je t\u0159eba zrychlit. <\/p>\n<p>Na za\u010d\u00e1tku roku 2019 jsme se rozhodli, \u017ee pot\u0159ebujeme ElasticSearch. Cel\u00fd rok jsme organizovali zpracov\u00e1n\u00ed z\u00edskan\u00fdch dat v Elastic a jejich v\u00fdstup do API mobiln\u00ed aplikace a webov\u00e9 str\u00e1nky. Nakonec jsme v dal\u0161\u00edm roce b\u011bhem akce zpracovali <b>15 131 783 z\u00e1znam\u016f za 6 minut. <\/b><\/p>\n<p>Proto\u017ee m\u00e1me mnoho z\u00e1jemc\u016f o n\u00e1kup zbo\u017e\u00ed a \u00fa\u010dast v sout\u011b\u017e\u00edch b\u011bhem akc\u00ed, je to do\u010dasn\u00e9 opat\u0159en\u00ed. Nyn\u00ed pos\u00edl\u00e1me aktu\u00e1ln\u00ed informace do Elastic, ale do budoucna pl\u00e1nujeme archivn\u00ed informace za minul\u00fdmi m\u011bs\u00edci p\u0159ev\u00e9st do Postgresu jako trval\u00e9 \u00falo\u017ei\u0161t\u011b. Abychom nezaplavili index Elastic, kter\u00fd tak\u00e9 m\u00e1 sv\u00e9 limity.<\/p>\n<h2>Z\u00e1v\u011br \/ v\u00fdvody<\/h2>\n<p>\nV sou\u010dasnosti jsme p\u0159evedli do Elastic v\u0161echny slu\u017eby, kter\u00e9 jsme pl\u00e1novali, a na tom jsme zat\u00edm ud\u011blali p\u0159est\u00e1vku. Nyn\u00ed nad hlavn\u00edm trval\u00fdm \u00falo\u017ei\u0161t\u011bm v Postgresu budujeme index v Elastic, kter\u00fd p\u0159eb\u00edr\u00e1 u\u017eivatelsk\u00e9 zat\u00ed\u017een\u00ed.<\/p>\n<p>Do budoucna pl\u00e1nujeme p\u0159en\u00e1\u0161et slu\u017eby, pokud budeme ch\u00e1pat, \u017ee dotazy na data se st\u00e1vaj\u00ed p\u0159\u00edli\u0161 rozmanit\u00fdmi a hledaj\u00ed se v neomezen\u00e9m po\u010dtu sloupc\u016f. To u\u017e je \u00fakol, kter\u00fd nen\u00ed pro Postgres.<\/p>\n<p>Pokud budeme pot\u0159ebovat fulltextov\u00e9 vyhled\u00e1v\u00e1n\u00ed v funkcionalit\u011b nebo pokud se objev\u00ed mnoho r\u016fznorod\u00fdch krit\u00e9ri\u00ed vyhled\u00e1v\u00e1n\u00ed, v\u00edme u\u017e, \u017ee to je t\u0159eba p\u0159evest do Elastic.<\/p>\n<h2>\u2318\u2318\u2318<\/h2>\n<p>\nD\u011bkujeme, \u017ee jste si p\u0159e\u010detli. Pokud ve va\u0161\u00ed spole\u010dnosti tak\u00e9 pou\u017e\u00edvaj\u00ed ElasticSearch a maj\u00ed vlastn\u00ed implementace, dejte n\u00e1m v\u011bd\u011bt. Bude zaj\u00edmav\u00e9 se dozv\u011bd\u011bt, jak to d\u011blaj\u00ed ostatn\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.3 - 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\/cs\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch\" \/>\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\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\/cs\/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\udd47Optimalizace zat\u00ed\u017een\u00ed na Highload projektu pomoc\u00ed ElasticSearch | ProHoster","description":"Ahoj, Habre! Jmenuji se Maxim Vasiljev, pracuji jako analytik a projektov\u00fd mana\u017eer ve FINCH.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","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\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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/82734","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=82734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/82734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/82735"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=82734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=82734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=82734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}