{"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\/pt\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","title":{"rendered":"Otimiza\u00e7\u00e3o de carga em projetos de Highload com ElasticSearch","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1, Habr! Meu nome \u00e9 Maxim Vasiliev, sou analista e gerente de projetos na FINCH. Hoje gostaria de contar como, com a ajuda do ElasticSearch, conseguimos processar 15 milh\u00f5es de solicita\u00e7\u00f5es em 6 minutos e otimizar a carga di\u00e1ria no site de um de nossos clientes. Infelizmente, teremos que fazer isso sem nomes, pois temos um NDA, esperamos que o conte\u00fado do artigo n\u00e3o sofra com isso. Vamos l\u00e1.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Como o projeto \u00e9 estruturado<\/h2>\n<p>\nEm nosso back-end, criamos servi\u00e7os que garantem o funcionamento dos sites e do aplicativo m\u00f3vel de nosso cliente. A estrutura geral pode ser vista no diagrama:<\/p>\n<p><img decoding=\"async\" alt=\"Otimiza\u00e7\u00e3o de carga em projetos de Highload com ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/7bda10a9965163c2b175b501f50bc342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDurante o trabalho, processamos uma grande quantidade de transa\u00e7\u00f5es: compras, pagamentos, opera\u00e7\u00f5es com os saldos dos usu\u00e1rios, para as quais armazenamos muitos logs, al\u00e9m de importar e exportar esses dados para sistemas externos. <\/p>\n<p>Al\u00e9m disso, existem processos inversos, quando recebemos dados do cliente e os transmitimos aos usu\u00e1rios. Al\u00e9m disso, tamb\u00e9m existem processos relacionados a pagamentos e programas de b\u00f4nus.<\/p>\n<h2>Uma breve hist\u00f3ria<\/h2>\n<p>\nInicialmente, utilizamos o PostgreSQL como o \u00fanico armazenamento de dados. Suas vantagens padr\u00e3o para SGBD: transa\u00e7\u00f5es, linguagem de consulta de dados desenvolvida, ampla ferramenta de integra\u00e7\u00e3o; combinadas com uma boa performance, atenderam nossas necessidades por bastante tempo. <\/p>\n<p>Armazen\u00e1vamos tudo no Postgres: desde transa\u00e7\u00f5es at\u00e9 not\u00edcias. Mas o n\u00famero de usu\u00e1rios estava crescendo, assim como o n\u00famero de solicita\u00e7\u00f5es.<\/p>\n<p><i>Para entender, o n\u00famero anual de sess\u00f5es em 2017 no site desktop foi de apenas 131 milh\u00f5es. Em 2018, foi de 125 milh\u00f5es. Em 2019, novamente 130 milh\u00f5es. Adicione mais 100-200 milh\u00f5es da vers\u00e3o m\u00f3vel do site e do aplicativo m\u00f3vel, e voc\u00ea ter\u00e1 uma quantidade colossal de solicita\u00e7\u00f5es. <\/i><\/p>\n<p>Com o crescimento do projeto, o Postgres parou de aguentar a carga, n\u00e3o est\u00e1vamos conseguindo \u2014 surgiu uma grande quantidade de solicita\u00e7\u00f5es variadas, para as quais n\u00e3o conseguimos criar um n\u00famero suficiente de \u00edndices. <\/p>\n<p>Percebemos que era necess\u00e1rio ter outros sistemas de armazenamento de dados que atendesse nossas necessidades e aliviasse a carga do PostgreSQL. Consideramos como op\u00e7\u00f5es o Elasticsearch e o MongoDB. Este \u00faltimo ficou atr\u00e1s nos seguintes pontos:<\/p>\n<ol>\n<li>A velocidade lenta de indexa\u00e7\u00e3o com o aumento do volume de dados nos \u00edndices. No Elastic, a velocidade n\u00e3o depende do volume de dados.<\/li>\n<li>Nenhuma pesquisa em texto completo<\/li>\n<\/ol>\n<p>\nAssim, escolhemos o Elastic e nos preparamos para a transi\u00e7\u00e3o. <\/p>\n<h2>Transi\u00e7\u00e3o para o Elastic<\/h2>\n<p>\n1. Come\u00e7amos a transi\u00e7\u00e3o com o servi\u00e7o de busca de pontos de venda. Nosso cliente possui aproximadamente 70.000 pontos de venda e requer v\u00e1rios tipos de busca no site e no aplicativo:<\/p>\n<ul>\n<li>Busca textual pelo nome da localidade<\/li>\n<li>Geoposi\u00e7\u00e3o em um raio definido a partir de um ponto. Por exemplo, se o usu\u00e1rio deseja ver quais pontos de venda est\u00e3o mais pr\u00f3ximos de sua casa.<\/li>\n<li>Busca em um quadrado definido \u2013 o usu\u00e1rio desenha um quadrado no mapa e v\u00ea todos os pontos dentro desse raio. <\/li>\n<li>Busca por filtros adicionais. Os pontos de venda diferem entre si quanto ao sortimento <\/li>\n<\/ul>\n<p>\nEm termos de organiza\u00e7\u00e3o, temos no Postgres a fonte de dados tanto para o mapa quanto para as not\u00edcias, enquanto no Elastic fazemos snapshots dos dados originais. O fato \u00e9 que, inicialmente, o Postgres n\u00e3o estava conseguindo lidar com a busca por todos os crit\u00e9rios. N\u00e3o s\u00f3 havia muitos \u00edndices, como eles podiam se sobrepor, fazendo com que o planejador do Postgres se confundisse e n\u00e3o entendesse qual \u00edndice usar. <\/p>\n<p>2. O pr\u00f3ximo a ser tratado foi a se\u00e7\u00e3o de not\u00edcias. O site publica diariamente conte\u00fados e, para que o usu\u00e1rio n\u00e3o se perca em meio ao fluxo de informa\u00e7\u00f5es, os dados precisam ser organizados antes da apresenta\u00e7\u00e3o. Para isso, a busca \u00e9 necess\u00e1ria: no site \u00e9 poss\u00edvel fazer buscas por correspond\u00eancia de texto e tamb\u00e9m ativar filtros adicionais, j\u00e1 que eles tamb\u00e9m foram implementados atrav\u00e9s do Elastic. <\/p>\n<p>3. Depois, transferimos o processamento das transa\u00e7\u00f5es. Os usu\u00e1rios podem comprar um determinado produto no site e participar de sorteios. Ap\u00f3s tais compras, processamos uma grande quantidade de dados, especialmente nos fins de semana e feriados. Para compara\u00e7\u00e3o, em dias normais o n\u00famero de compras gira em torno de 1,5-2 milh\u00f5es, enquanto nos feriados esse n\u00famero pode atingir 53 milh\u00f5es.<\/p>\n<p>Al\u00e9m disso, os dados precisam ser processados em menor tempo poss\u00edvel \u2014 os usu\u00e1rios n\u00e3o gostam de esperar dias pelo resultado. Atrav\u00e9s do Postgres, esses prazos s\u00e3o invi\u00e1veis \u2014 frequentemente enfrent\u00e1vamos bloqueios, e enquanto process\u00e1vamos todas as requisi\u00e7\u00f5es, os usu\u00e1rios n\u00e3o podiam verificar se ganharam pr\u00eamios ou n\u00e3o. Isso n\u00e3o \u00e9 muito agrad\u00e1vel para os neg\u00f3cios, ent\u00e3o transferimos o processamento para o Elasticsearch.<\/p>\n<h2>Periodicidade<\/h2>\n<p>\nAtualmente, as atualiza\u00e7\u00f5es est\u00e3o configuradas para serem acionadas em fun\u00e7\u00e3o das seguintes condi\u00e7\u00f5es:<\/p>\n<ol>\n<li>Pontos de venda. Assim que recebemos dados de uma fonte externa, iniciamos imediatamente a atualiza\u00e7\u00e3o. <\/li>\n<li>Not\u00edcias. Quando uma not\u00edcia \u00e9 editada no site, ela \u00e9 automaticamente enviada para o Elastic.<\/li>\n<\/ol>\n<p>\nAqui vale a pena mencionar novamente as vantagens do Elastic. No Postgres, ao enviar uma consulta, \u00e9 necess\u00e1rio esperar que ele processe todas as entradas. No Elastic, \u00e9 poss\u00edvel enviar 10 mil registros e come\u00e7ar a trabalhar imediatamente, sem esperar que os dados se dispersem entre todos os Shards. Claro, algum Shard ou R\u00e9plica pode n\u00e3o ver os dados imediatamente, mas logo tudo estar\u00e1 dispon\u00edvel.<\/p>\n<h2>M\u00e9todos de integra\u00e7\u00e3o<\/h2>\n<p>\nExistem 2 maneiras de integrar com o Elastic:<\/p>\n<ol>\n<li>Atrav\u00e9s do cliente nativo por TCP. O driver nativo est\u00e1 gradualmente desaparecendo: est\u00e1 sendo descontinuado, possui uma sintaxe muito inconveniente. Portanto, quase n\u00e3o o utilizamos e tentamos nos afastar completamente dele.<\/li>\n<li>Atrav\u00e9s da interface HTTP, que pode usar tanto consultas JSON quanto a sintaxe Lucene. Este \u00faltimo \u00e9 um mecanismo de texto que o Elastic utiliza. Neste caso, obtemos a capacidade de Batch por meio de consultas JSON via HTTP. Este \u00e9 o formato que tentamos usar.<\/li>\n<\/ol>\n<p>\nGra\u00e7as \u00e0 interface HTTP, podemos usar bibliotecas que oferecem uma implementa\u00e7\u00e3o ass\u00edncrona do cliente HTTP. Podemos aproveitar a Batch e a API ass\u00edncrona, o que, no final das contas, resulta em alta performance que foi muito \u00fatil em dias de grandes promo\u00e7\u00f5es (sobre isso abaixo)<\/p>\n<p>Um pouco de n\u00fameros para compara\u00e7\u00e3o: <\/p>\n<ul>\n<li>Salvamento de usu\u00e1rios que receberam pr\u00eamios no Postgres em 20 threads sem agrupamentos: 460713 registros em 42 segundos<\/li>\n<li>Elastic + cliente reativo em 10 threads + batch em 1000 elementos: 596749 registros em 11 segundos<\/li>\n<li>Elastic + cliente reativo em 10 threads + batch em 1000 elementos: <b>23801684 registros em 4 minutos<\/b><\/li>\n<\/ul>\n<p>\nAtualmente, escrevemos um gerenciador de requisi\u00e7\u00f5es HTTP que constr\u00f3i JSON, como Batch\/n\u00e3o Batch e envia atrav\u00e9s de qualquer cliente HTTP, independentemente da biblioteca. Tamb\u00e9m \u00e9 poss\u00edvel escolher enviar requisi\u00e7\u00f5es de forma s\u00edncrona ou ass\u00edncrona.<\/p>\n<p>Em algumas integra\u00e7\u00f5es, ainda utilizamos o transport client oficial, mas isso \u00e9 apenas uma quest\u00e3o de reestrutura\u00e7\u00e3o pr\u00f3xima. Para o processamento, usamos um cliente pr\u00f3prio, constru\u00eddo com base no Spring WebClient.<\/p>\n<p><img decoding=\"async\" alt=\"Otimiza\u00e7\u00e3o de carga em projetos de Highload com ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/112bf3261c93ce585d8559b420e79f64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Grande promo\u00e7\u00e3o<\/h2>\n<p>\nUma vez por ano, realizamos uma grande promo\u00e7\u00e3o para os usu\u00e1rios - \u00e9 essa a verdadeira Highload, pois durante esse per\u00edodo trabalhamos com dezenas de milh\u00f5es de usu\u00e1rios simultaneamente.<\/p>\n<p>Normalmente, os picos de carga ocorrem nos dias festivos, mas esta promo\u00e7\u00e3o \u00e9 um n\u00edvel completamente diferente. No ano retrasado, no dia da promo\u00e7\u00e3o, vendemos 27.580.890 unidades de produto. Os dados foram processados por mais de meia hora, o que causou desconforto aos usu\u00e1rios. Os usu\u00e1rios ganharam pr\u00eamios pela participa\u00e7\u00e3o, mas ficou claro que o processo precisava ser acelerado. <\/p>\n<p>No in\u00edcio de 2019, decidimos que precis\u00e1vamos do ElasticSearch. Passamos um ano organizando o processamento dos dados recebidos no Elastic e sua entrega na API do aplicativo m\u00f3vel e do site. Como resultado, no ano seguinte, durante a promo\u00e7\u00e3o, processamos <b>15.131.783 registros em 6 minutos. <\/b><\/p>\n<p>Como temos muitos interessados em comprar produtos e participar do sorteio de pr\u00eamios nas promo\u00e7\u00f5es, essa \u00e9 uma medida tempor\u00e1ria. Atualmente, estamos enviando informa\u00e7\u00f5es atualizadas para o Elastic, mas planejamos posteriormente transferir as informa\u00e7\u00f5es arquivadas dos meses anteriores para o Postgres, como armazenamento permanente. Isso evitar\u00e1 a satura\u00e7\u00e3o do \u00edndice Elastic, que tamb\u00e9m possui suas limita\u00e7\u00f5es.<\/p>\n<h2>Conclus\u00e3o \/ resumos<\/h2>\n<p>\nAtualmente, transferimos para o Elastic todos os servi\u00e7os que desej\u00e1vamos e fizemos uma pausa nisso por enquanto. Agora, estamos construindo um \u00edndice no Elastic sobre o principal armazenamento persistente no Postgres, que assume a carga dos usu\u00e1rios.<\/p>\n<p>No futuro, planejamos transferir servi\u00e7os se entendermos que a solicita\u00e7\u00e3o de dados se torna muito diversificada e est\u00e1 sendo pesquisada em um n\u00famero ilimitado de colunas. Essa j\u00e1 n\u00e3o \u00e9 uma tarefa para o Postgres.<\/p>\n<p>Se precisarmos de busca de texto completo em nossas funcionalidades ou se tivermos muitos crit\u00e9rios de busca variados, j\u00e1 sabemos que isso precisa ser transferido para o Elastic.<\/p>\n<h2>\u2318\u2318\u2318<\/h2>\n<p>\nObrigado por ler. Se na sua empresa tamb\u00e9m utilizam o ElasticSearch e t\u00eam seus pr\u00f3prios casos de implementa\u00e7\u00e3o, compartilhe conosco. Vai ser interessante saber como os outros fazem \ud83d\ude42<br \/>\n<br \/>Fonte: <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\/pt\/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=\"pt_PT\" \/>\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\/pt\/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\udd47Otimiza\u00e7\u00e3o da carga em um projeto Highload com ElasticSearch | ProHoster","description":"Ol\u00e1, Habr! Meu nome \u00e9 Maxim Vasilev, sou analista e gerente de projetos na FINCH.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/82734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=82734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/82734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/82735"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=82734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=82734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=82734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}