Elasticsearch é um software open source, que provê uma interface RESTful de pesquisa e análise de dados capaz de solucionar um número crescente de casos de uso. Ele suporta um grande volume de dados sem perder performance, pode ser implementado em qualquer sistema independentemente da plataforma, por fornecer uma API REST. Além disso, o Elasticsearch é altamente escalável, podendo ir de um servidor a muitos servidores simultâneos.
Principais características:
1 - Pesquisa e análise em
tempo real
2 - Distribuído,
escalável e alta disponibilidade
3 - Multitenancy —
Múltiplos clientes
4 - Full-Text Search —
Pesquisa de texto completo
5 - Orientado a
documentos .json
6 - Schema-Free — Detecta
automaticamente estrutura de dados
7 - API RESTful —
Amigável para o desenvolvedor
8 - Segurança de dados,
logs de transação
9 - Disponível sob Apache
2 Open Source License
10 - Construído em cima do
Apache Lucene
Desempenho
O Elasticsearch é muito rápido, ele fica insuperável em busca de texto completo, é bem adaptado para casos de uso sensíveis ao tempo como análise de dados de segurança e monitoramento de infraestrutura.
Uma vez que é distribuído de fábrica, os documentos armazenados são distribuídos em diferentes containers conhecidos como shards permitindo fazer a escalabilidade horizontal para centenas (talvez milhares) de servidores e manipular petabytes de dados.
Ele possuí inúmeros recursos integrados avançados que tornam o armazenamento e a busca de dados ainda mais eficiente, como os rollups de dados e o gerenciamento do ciclo de vida de índices.
O Elastic Stack simplifica a ingestão, a visualização e os relatórios de dados. A integração com os Beats e o Logstash facilita o processamento dos dados antes de indexar no Elasticsearch. Já o Kibana fornece visualização em tempo real dos dados do Elasticsearch, além de UIs para acessar rapidamente os dados de APM (monitoramento de performance de aplicação), de logs e de metrics de infraestrutura.
Orientações práticas para gerenciar o Elasticsearch
Índice por período de retenção: Use índices baseados em tempo para gerenciar a retenção de dados sempre que possível, agrupe-os com base no período de retenção. Os índices baseados em tempo também tornam fácil variar o número de réplicas e shards primários com o tempo, uma vez que isso pode ser alterado para o próximo índice a ser gerado. Isso simplifica a adaptação a eventuais alterações feitas em volumes de dados e requisitos.
Os índices e shards não são gratuitos: Para reduzir o número de índices e evitar mapeamentos grandes e dispersos, avalie armazenar dados com estrutura semelhante no mesmo índice em vez de dividi-los em índices separados com base no local de origem dos dados. Mantenha um bom equilíbrio entre o número de índices e shards, e o tamanho do mapeamento para cada índice individual. Como o estado do cluster está carregado no mapa em cada nó (incluindo os mestres), e a quantidade de heap é diretamente proporcional ao número de índices, campos por índice e shards, é importante também monitorar a utilização de heap nos nós mestres e garantir que tenham tamanho apropriado.
De que maneira o tamanho do shard influencia no desempenho? A melhor maneira de determinar o tamanho máximo de shard do ponto de vista do desempenho das consultas é adotar um parâmetro de comparação usando dados e consultas realistas. Adote um parâmetro de comparação com uma consulta e um representante de carga de indexação daquilo que o nó precisaria manipular em produção, uma vez que otimizar para uma única consulta pode gerar resultados enganosos.
Gerencie o tamanho do shard: Se estiver usando índices baseados no tempo abrangendo um período fixo, ajuste o período que cada índice abrange com base no período de retenção e nos volumes de dados esperados para atingir o tamanho do shard de destino.
Se você tiver dados imutáveis baseados em tempo em que os volumes podem variar significativamente com o tempo, avalie o uso da API de índice de rollover para atingir um tamanho de shard de destino ideal variando dinamicamente o período de tempo que cada índice abrange. Isso oferece ótima flexibilidade e pode ajudar a evitar a necessidade de ter shards muito grandes ou muito pequenos quando os volumes são imprevisíveis.
Este artigo forneceu dicas e orientações práticas sobre como gerenciar melhor os dados no Elasticsearch. Se tiver interesse em saber mais sobre práticas e desempenho, clique aqui.
Para conhecer mais dos conceitos desta plataforma,
clique aqui.