Melhores práticas de elasticsearch e desempenho crescente

Melhores práticas de elasticsearch e desempenho crescente
Neste post, tentaremos coletar as melhores práticas e também quais coisas a serem evitadas ao trabalhar com elasticsearch e alimentando dados nele. Dessa forma, saberemos o que precisamos cuidar antes mesmo de começarmos a trabalhar com este excelente mecanismo de pesquisa.

Elasticsearch As práticas recomendadas

Começaremos a trabalhar com as melhores práticas a seguir com o Elasticsearch e quais problemas ele pode criar quando evitarmos esses pontos. Vamos começar.

Sempre defina mapeamentos de ES

Uma coisa que é certamente fazer é trabalhar sem mapeamentos. Portanto, quando você começa a alimentar os dados JSON para o seu índice ES, ele itera sobre os campos de dados e cria um mapeamento adequado. Isso parece direto e fácil, pois o ES está selecionando o próprio tipo de dados. Com base nos seus dados, você pode precisar de um campo para ter o tipo de dados específico.

Por exemplo, suponha que você indexe o seguinte documento:


"ID": 1,
"Title": "Instale Elasticsearch no Ubuntu",
"Link": "https: // linuxhint.com/install-elicticsearch-ubuntu/",
"Data": "2018-03-25"

Dessa forma, o Elasticsearch marcará o campo "Data" como tipo de "data". Mas quando você indexa o seguinte documento:


"ID": 1,
"Title": "ES MELHORES PRÁTICAS E DESEMPENHO",
"Data": "pendente"

Desta vez, o tipo do campo de data foi alterado e ES lançará um erro e não permitirá que seu documento seja indexado. Para facilitar as coisas, você pode indexar alguns documentos, ver quais campos são indexados por ES e pegue o mapeamento deste URL:

Get/index_name/doc_type/_mapping

Dessa forma, você não terá que construir o mapeamento completo também.

Sinalizadores de produção

O nome do cluster padrão que ES inicia é chamado Elasticsearch. Quando você tem muitos nós em seu cluster, é uma boa ideia manter as bandeiras de nomeação o mais consistente possível, como:

conjunto.Nome: APP_ES_PRODUÇÃO
nó.Nome: APP_ES_NODE_001

Além disso, as configurações de recuperação para nós também são importantes. Suponha que alguns dos nós em um reinício do cluster devido a uma falha e alguns nós reiniciem um pouco depois de outros nós. Para manter os dados consistentes entre todos esses nós, teremos que executar o programa de consistência que manterá todos os clusters em um estado consistente.

Porta de entrada.RECOBER_AFTER_NODES: 10

Também é útil quando você diz ao cluster com antecedência quantos nós estarão presentes no cluster e quanto tempo de recuperação eles precisarão:

Porta de entrada.esperado_nodes: 20
Porta de entrada.RECEBER_AFTER_TIME: 7M

Com a configuração correta, uma recuperação que levaria horas pode levar apenas um minuto e economizar muito dinheiro para qualquer empresa.

Provisionamento de capacidade

É importante saber quanto espaço seus dados terão e a taxa na qual ele flui para o Elasticsearch, porque isso decidirá a quantidade de RAM que você precisará em cada um dos nó do cluster e do nó mestre também.

Obviamente, não há diretrizes específicas para alcançar os números necessários, mas podemos tomar algumas medidas que nos proporcionam uma boa ideia. Uma das etapas será simular o caso de uso. Faça um cluster ES e alimente -o com quase a mesma taxa de dados que seria de esperar com sua configuração de produção. O conceito de Comece grande e escala também pode ajudá -lo a ser consistente sobre quanto espaço é necessário.

Grandes modelos

Ao definir grandes modelos indexados, você sempre enfrentará problemas relacionados à sincronização do modelo em seus vários nós do cluster. Sempre observe que o modelo terá que ser redefinido sempre que ocorrer uma mudança de modelo de dados. É uma ideia muito melhor Mantenha os modelos como dinâmicos. Modelos dinâmicos atualizam automaticamente os mapeamentos de campo com base nos mapeamentos que definimos anteriormente e nos novos campos. Observe que não há substituto para manter os modelos o mais pequeno possível.

2Using Mlockall nos servidores Ubuntu

O Linux usa o processo de troca quando precisa de memória para novas páginas. A troca de tornar as coisas lentas, pois os discos são mais lentos que a memória. O Mlockall A propriedade na configuração do ES diz a ES para não trocar suas páginas para fora da memória, mesmo que não sejam necessárias por enquanto. Esta propriedade pode ser definida no arquivo YAML:

Bootstrap.Mlockall: Verdadeiro

No ES V5.Versões x+, esta propriedade mudou para:

Bootstrap.Memory_lock: true

Se você estiver usando esta propriedade, apenas certifique-se de fornecer à Memória de Heap Grande o suficiente usando o -Dxmx opção ou ES_HEAP_SIZE.

Minimize as atualizações de mapeamento

O desempenho de um cluster é um pouco afetado sempre que você faz solicitações de atualização de mapeamento em seu cluster ES seu ES. Se você não pode controlar isso e ainda deseja fazer atualizações para os mapeamentos, poderá usar uma propriedade no arquivo de configuração ES YAML:

índices.conjunto.send_refresh_mapping: false

Quando a solicitação de atualização do modelo está em fila pendente para o nó principal e envia dados com o mapeamento antigo para os nós, ele também deve enviar uma solicitação de atualização posteriormente para todos os nós. Isso pode fazer as coisas lentas. Quando definimos a propriedade acima como FALSE, isso faz sentido de que uma atualização foi feita para o mapeamento e não enviará a solicitação de atualização para os nós. Observe que isso só é útil se você fizer muitas mudanças em seus mapeamentos regularmente.

Pool de rosca otimizado

Os nós ES têm muitos pools de threads para melhorar como os threads são gerenciados dentro de um nó. Mas há limitações sobre a quantidade de dados que cada thread pode cuidar. Para acompanhar esse valor, podemos usar uma propriedade ES:

Grupo de discussão.volume.Queue_size: 2000

Isso informa o número de solicitações em um fragmento que pode ser enfileirado para execução no nó quando não há thread disponível para processar a solicitação. Se o número de tarefas for superior a esse valor, você receberá um RemoteTransportException. Quanto maior esse valor, maior será a quantidade de espaço de heap em sua máquina de nós e a pilha de JVM será consumida também. Além disso, você deve manter seu código pronto, caso essa exceção seja jogada.

Conclusão

Nesta lição, analisamos como podemos melhorar o desempenho do Elasticsearch, evitando erros comuns e não tão comuns que as pessoas cometem. Leia mais artigos de pesquisa elástica no Linuxhint.