{"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\/ro\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","title":{"rendered":"Optimizarea \u00cenc\u0103rc\u0103rii pe Proiecte de \u00cenalt\u0103 Capacitate cu Ajutorul ElasticSearch","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Salut, Habr! Numele meu este Maxim Vasiliev, sunt analist \u0219i manager de proiecte la FINCH. Ast\u0103zi a\u0219 dori s\u0103 v\u0103 povestesc cum, cu ajutorul ElasticSearch, am reu\u0219it s\u0103 proces\u0103m 15 milioane de cereri \u00een 6 minute \u0219i s\u0103 optimiz\u0103m sarcinile zilnice pe site-ul unuia dintre clien\u021bii no\u0219tri. Din p\u0103cate, va trebui s\u0103 ne descurc\u0103m f\u0103r\u0103 nume, deoarece avem un NDA, sper\u0103m c\u0103 con\u021binutul articolului nu va avea de suferit. S\u0103 \u00eencepem.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Cum este structurat proiectul<\/h2>\n<p>\nPe backend-ul nostru, cre\u0103m servicii care asigur\u0103 func\u021bionalitatea site-urilor \u0219i aplica\u021biei mobile a clientului nostru. Structura general\u0103 poate fi v\u0103zut\u0103 \u00een schem\u0103:<\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea \u00cenc\u0103rc\u0103rii pe Proiecte de \u00cenalt\u0103 Capacitate cu Ajutorul ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/7bda10a9965163c2b175b501f50bc342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen procesul de lucru, proces\u0103m un num\u0103r mare de tranzac\u021bii: achizi\u021bii, pl\u0103\u021bi, opera\u021biuni cu soldurile utilizatorilor, pentru care p\u0103str\u0103m multe log-uri, precum \u0219i import\u0103m \u0219i export\u0103m aceste date c\u0103tre sisteme externe. <\/p>\n<p>De asemenea, exist\u0103 \u0219i procese inverse, c\u00e2nd primim date de la client \u0219i le transfer\u0103m utilizatorilor. \u00cen plus, exist\u0103 procese legate de pl\u0103\u021bi \u0219i programele de recompense.<\/p>\n<h2>O scurt\u0103 istorie<\/h2>\n<p>\nIni\u021bial, am folosit PostgreSQL ca singur\u0103 baz\u0103 de date. Avantajele sale standard ca SGBD: existen\u021ba tranzac\u021biilor, un limbaj de interogare dezvoltat, un instrumentar larg pentru integrare; combinate cu o performan\u021b\u0103 bun\u0103, ne-au satisf\u0103cut nevoile pentru o perioad\u0103 \u00eendelungat\u0103. <\/p>\n<p>P\u0103stram \u00een Postgres absolut toate datele: de la tranzac\u021bii la \u0219tiri. Dar num\u0103rul utilizatorilor cre\u0219tea, iar odat\u0103 cu el \u0219i num\u0103rul cererilor.<\/p>\n<p><i>Pentru a \u00een\u021belege, num\u0103rul anual de sesiuni \u00een 2017 doar pe site-ul desktop a fost de 131 milioane. \u00cen 2018 \u2013 125 milioane. \u00cen 2019 din nou 130 milioane. Ad\u0103uga\u021bi \u00eenc\u0103 100-200 milioane din versiunea mobil\u0103 a site-ului \u0219i aplica\u021bia mobil\u0103, \u0219i ve\u021bi ob\u021bine un num\u0103r colosal de cereri. <\/i><\/p>\n<p>Pe m\u0103sur\u0103 ce proiectul a crescut, Postgres a \u00eencetat s\u0103 fac\u0103 fa\u021b\u0103 sarcinilor; nu reu\u0219eam s\u0103 ne descurc\u0103m \u2013 a ap\u0103rut un num\u0103r mare de diverse cereri pentru care nu am putut crea suficiente indexuri. <\/p>\n<p>Am realizat c\u0103 exist\u0103 nevoie de alte stoc\u0103ri de date care s\u0103 ne satisfac\u0103 cerin\u021bele \u0219i s\u0103 reduc\u0103 sarcina pe PostgreSQL. Ca op\u021biuni posibile, am luat \u00een considerare Elasticsearch \u0219i MongoDB. Ultimul a pierdut \u00een privin\u021ba urm\u0103toarelor puncte:<\/p>\n<ol>\n<li>Viteza lent\u0103 de indexare cu cre\u0219terea volumului de date \u00een indec\u0219i. La Elastic, viteza nu depinde de volumul de date.<\/li>\n<li>Lipsa c\u0103ut\u0103rii full-text<\/li>\n<\/ol>\n<p>\nAstfel, am ales Elastic \u0219i ne-am preg\u0103tit pentru tranzi\u021bie. <\/p>\n<h2>Tranzi\u021bia la Elastic<\/h2>\n<p>\n1. Am \u00eenceput tranzi\u021bia cu serviciul de c\u0103utare a punctelor de v\u00e2nzare. Clientul nostru are \u00een total aproximativ 70.000 de puncte de v\u00e2nzare, iar pentru aceasta sunt necesare mai multe tipuri de c\u0103utare pe site \u0219i \u00een aplica\u021bie:<\/p>\n<ul>\n<li>C\u0103utare text dup\u0103 denumirea localit\u0103\u021bii.<\/li>\n<li>Geoc\u0103utare \u00eentr-un anumit radius de un punct. De exemplu, dac\u0103 utilizatorul dore\u0219te s\u0103 vad\u0103 care puncte de v\u00e2nzare sunt cele mai apropiate de casa sa.<\/li>\n<li>C\u0103utare pe un p\u0103trat dat \u2013 utilizatorul deseneaz\u0103 un p\u0103trat pe hart\u0103, iar el \u00eei sunt ar\u0103tate toate punctele din acest radius. <\/li>\n<li>C\u0103utare dup\u0103 filtre suplimentare. Punctele de v\u00e2nzare se diferen\u021biaz\u0103 \u00eentre ele prin sortiment. <\/li>\n<\/ul>\n<p>\nC\u00e2nd vorbim despre organizare, \u00een Postgres avem sursa de date at\u00e2t pentru h\u0103r\u021bi, c\u00e2t \u0219i pentru \u0219tiri, iar \u00een Elastic facem snapshot-uri de la datele originale. Motivul este c\u0103, ini\u021bial, Postgres nu putea gestiona c\u0103utarea pe toate criteriile. Cu at\u00e2t de multe indec\u0219i, care se puteau \u0219i intersecta, planificatorul Postgres se pierdea \u0219i nu \u00een\u021belegea care index s\u0103 utilizeze. <\/p>\n<p>2. Urm\u0103torul pe list\u0103 a fost sec\u021biunea de \u0219tiri. Pe site apar publica\u021bii zilnic, astfel \u00eenc\u00e2t utilizatorul s\u0103 nu se piard\u0103 \u00een fluxul de informa\u021bii, datele trebuie sortate \u00eenainte de a fi afi\u0219ate. De aceea avem nevoie de c\u0103utare: pe site se poate c\u0103uta dup\u0103 potrivirea textului \u0219i, de asemenea, se pot ad\u0103uga filtre suplimentare, deoarece acestea sunt de asemenea gestionate prin Elastic. <\/p>\n<p>3. Apoi, am mutat procesarea tranzac\u021biilor. Utilizatorii pot cump\u0103ra un anumit produs pe site \u0219i pot participa la extrageri de premii. Dup\u0103 astfel de achizi\u021bii, proces\u0103m o cantitate mare de date, \u00een special \u00een week-end-uri \u0219i s\u0103rb\u0103tori. Ca \u0219i compara\u021bie, \u00een zilele obi\u0219nuite, num\u0103rul achizi\u021biilor se ridic\u0103 la 1,5-2 milioane, iar \u00een s\u0103rb\u0103tori cifra poate atinge 53 de milioane.<\/p>\n<p>\u00cen acela\u0219i timp, datele trebuie procesate \u00eentr-un timp minim \u2014 utilizatorii nu iubesc s\u0103 a\u0219tepte c\u00e2teva zile pentru rezultate. Prin Postgres nu se pot ob\u021bine astfel de termene \u2014 adesea primeam blocaje, iar \u00een timp ce procesam toate solicit\u0103rile, utilizatorii nu puteau verifica dac\u0103 au c\u00e2\u0219tigat premii sau nu. Acest lucru nu este foarte pl\u0103cut pentru afacere, a\u0219a c\u0103 am mutat procesarea \u00een Elasticsearch.<\/p>\n<h2>Periodicitate<\/h2>\n<p>\nAcum actualiz\u0103rile sunt configurate pe baza evenimentelor, \u00een urm\u0103toarele condi\u021bii:<\/p>\n<ol>\n<li>Puncte de v\u00e2nzare. De \u00eendat\u0103 ce primim date dintr-o surs\u0103 extern\u0103, pornim imediat actualizarea. <\/li>\n<li>\u0218tiri. De \u00eendat\u0103 ce se editeaz\u0103 o \u0219tire pe site, aceasta este de asemenea trimis\u0103 \u00een Elastic.<\/li>\n<\/ol>\n<p>\nEste important s\u0103 men\u021bion\u0103m din nou avantajele Elastic. \u00cen Postgres, \u00een timpul trimiterii unei cereri, trebuie s\u0103 a\u0219tep\u021bi p\u00e2n\u0103 procesul finalizeaz\u0103 toate \u00eenregistr\u0103rile. \u00cen Elastic po\u021bi trimite 10.000 de \u00eenregistr\u0103ri \u0219i s\u0103 \u00eencepi imediat s\u0103 lucrezi, f\u0103r\u0103 a a\u0219tepta ca \u00eenregistr\u0103rile s\u0103 se r\u0103sp\u00e2ndeasc\u0103 prin toate Shards. Desigur, un anumit Shard sau Replica pot s\u0103 nu vad\u0103 imediat datele, dar foarte cur\u00e2nd totul va fi disponibil.<\/p>\n<h2>Modalit\u0103\u021bi de integrare<\/h2>\n<p>\nExist\u0103 2 modalit\u0103\u021bi de integrare cu Elastic:<\/p>\n<ol>\n<li>Prin clientul nativ pe TCP. Driverul nativ este pe cale de dispari\u021bie: nu mai este sus\u021binut, are o sintax\u0103 foarte incomod\u0103. Prin urmare, practic nu-l folosim \u0219i ne str\u0103duim s\u0103 ne desprindem complet de el.<\/li>\n<li>Prin interfa\u021ba HTTP, \u00een care se pot folosi at\u00e2t cereri JSON, c\u00e2t \u0219i sintaxa Lucene. Ultima este un motor text care folose\u0219te Elastic. \u00cen acest caz, ob\u021binem posibilitatea de Batch prin cereri JSON pe HTTP. Acest\u0103 variant\u0103 \u00eencerc\u0103m s\u0103 o utiliz\u0103m.<\/li>\n<\/ol>\n<p>\nDatorit\u0103 interfe\u021bei HTTP, putem folosi biblioteci care ofer\u0103 o implementare asincron\u0103 a clientului HTTP. Putem beneficia de avantajele Batch \u0219i API-ului asincron, ceea ce \u00een final ne ofer\u0103 o performan\u021b\u0103 ridicat\u0103, care ne-a ajutat foarte mult \u00een zilele de mari campanii (despre asta mai jos)<\/p>\n<p>C\u00e2teva cifre pentru compara\u021bie: <\/p>\n<ul>\n<li>Men\u021binerea utilizatorilor care au c\u00e2\u0219tigat premii \u00een Postgres \u00een 20 de fire f\u0103r\u0103 grup\u0103ri: 460713 \u00eenregistr\u0103ri \u00een 42 de secunde<\/li>\n<li>Elastic + client reactiv pe 10 fire + batch de 1000 de elemente: 596749 \u00eenregistr\u0103ri \u00een 11 secunde<\/li>\n<li>Elastic + client reactiv pe 10 fire + batch de 1000 de elemente: <b>23801684 \u00eenregistr\u0103ri \u00een 4 minute<\/b><\/li>\n<\/ul>\n<p>\nAcum am scris un manager de cereri pe HTTP, care construie\u0219te JSON, fie Batch\/fie ne-Batch \u0219i trimite prin orice client HTTP, indiferent de bibliotec\u0103. De asemenea, se poate alege s\u0103 se trimit\u0103 cererile \u00een mod sincron sau asincron.<\/p>\n<p>\u00cen anumite integr\u0103ri, \u00eenc\u0103 folosim clientul de transport oficial, dar aceasta este doar o chestiune de refactorizare iminent\u0103. \u00cen acela\u0219i timp, pentru procesare se folose\u0219te un client propriu, construit pe baza Spring WebClient.<\/p>\n<p><img decoding=\"async\" alt=\"Optimizarea \u00cenc\u0103rc\u0103rii pe Proiecte de \u00cenalt\u0103 Capacitate cu Ajutorul ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/112bf3261c93ce585d8559b420e79f64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Campanie mare<\/h2>\n<p>\nO dat\u0103 pe an, proiectul organizeaz\u0103 o mare campanie pentru utilizatori \u2014 acesta este adev\u0103ratul Highload, deoarece \u00een aceast\u0103 perioad\u0103 lucr\u0103m cu zeci de milioane de utilizatori simultan.<\/p>\n<p>De obicei, picoanele de \u00eenc\u0103rcare au loc \u00een zilele de s\u0103rb\u0103toare, dar aceast\u0103 campanie este un alt nivel. \u00cen urm\u0103 cu doi ani, \u00een ziua campaniei, am v\u00e2ndut 27 580 890 de articole. Datele au fost procesate timp de mai bine de o jum\u0103tate de or\u0103, ceea ce a creat inconveniente pentru utilizatori. Utilizatorii au primit premii pentru participare, dar a devenit clar c\u0103 procesul trebuie accelerat. <\/p>\n<p>La \u00eenceputul anului 2019, am decis c\u0103 avem nevoie de ElasticSearch. Un \u00eentreg an am organizat procesarea datelor primite \u00een Elastic \u0219i livrarea acestora prin api pentru aplica\u021bia mobil\u0103 \u0219i site. \u00cen cele din urm\u0103, anul urm\u0103tor, \u00een timpul campaniei, am procesat <b>15 131 783 de \u00eenregistr\u0103ri \u00een 6 minute. <\/b><\/p>\n<p>Deoarece avem mul\u021bi doritori s\u0103 cumpere produse \u0219i s\u0103 participe la extragerea premiilor \u00een campanii, aceasta este o m\u0103sur\u0103 temporar\u0103. Acum trimitem informa\u021biile actualizate \u00een Elastic, dar planific\u0103m s\u0103 transfer\u0103m informa\u021biile arhivate din lunile anterioare \u00een Postgres, ca depozit permanent. Pentru a nu aglomera indicele Elastic, care are \u0219i el propriile sale limit\u0103ri.<\/p>\n<h2>Concluzie\/rezultate<\/h2>\n<p>\n\u00cen prezent, am transferat \u00een Elastic toate serviciile pe care le-am dorit \u0219i, deocamdat\u0103, am f\u0103cut o pauz\u0103. Acum construim un indice \u00een Elastic deasupra depozitului nostru persistent din Postgres, care preia sarcina utilizatorilor.<\/p>\n<p>\u00cen continuare, planific\u0103m s\u0103 transfer\u0103m serviciile dac\u0103 \u00een\u021belegem c\u0103 cererea de date devine prea diversificat\u0103 \u0219i este c\u0103utat\u0103 pe un num\u0103r nelimitat de coloane. Aceasta este deja o sarcin\u0103 care nu se potrive\u0219te cu Postgres.<\/p>\n<p>Dac\u0103 vom avea nevoie de c\u0103utare cu text complet \u00een func\u021bionalitate sau dac\u0103 vor ap\u0103rea multe criterii de c\u0103utare variate, atunci \u0219tim deja c\u0103 trebuie s\u0103 le transfer\u0103m \u00een Elastic.<\/p>\n<h2>\u2318\u2318\u2318<\/h2>\n<p>\nMerci c\u0103 a\u021bi citit. Dac\u0103 \u00een compania voastr\u0103 se folose\u0219te \u0219i ElasticSearch \u0219i ave\u021bi propriile cazuri de implementare, \u00eemp\u0103rt\u0103\u0219i\u021bi-le. Va fi interesant s\u0103 afl\u0103m cum se descurc\u0103 ceilal\u021bi \ud83d\ude42<br \/>\n<br \/>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Optimizarea \u00eenc\u0103rc\u0103rii pe un proiect Highload cu ajutorul ElasticSearch | ProHoster","description":"Salut, Habr! M\u0103 numesc Maxim Vasiliev, sunt analist \u0219i manager de proiecte la FINCH.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/82734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=82734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/82734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/82735"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=82734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=82734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=82734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}