
Nos últimos anos o ecossistema composto pelo Elasticsearch e outros componentes que fazem parte da chamada Elastic Stack têm sido utilizados para um crescente número de casos de uso, desde pesquisas em websites ou documentos até coleta e análise de dados para business intelligence. Para descobrir o motivo do sucesso dessa ferramenta de busca tão popular vamos entender o que é de fato o Elasticsearch, como ele funciona e como ele pode ser usado.
O que é o Elasticsearch?
O Elastic é um mecanismo distribuído e open-source para buscas e análise de dados, construído no Apache Lucene e desenvolvido em Java. Ele permite que você armazene, busque e analise um grande volume de dados rapidamente. Sua busca possui um grande diferencial, pois utiliza uma estrutura baseada em documentos ao invés de tabelas e esquemas, com isso, ele se torna capaz de obter respostas rápidas para consultas mais abrangentes, semelhante a ferramentas de buscas como o Google.
Como o Elasticsearch funciona?
Para entender melhor como o Elastic funciona vamos ver alguns conceitos básicos de como ele organiza os dados e quais os seus componentes.
Documentos: eles são a unidade básica de informação que pode ser indexada no Elastic em formato JSON. Você pode pensar no documento como uma linha da tabela de um banco de dados relacional, ele representa uma dada entidade/instância. Cada documento tem um ID único e um tipo de dado, que descreve de qual entidade é aquele documento, por exemplo, um documento pode representar um artigo de blog ou um log de um servidor.
Índices: é uma coleção de documentos que possuem as mesmas características. Um índice é a entidade de nível mais alto que podemos consultar no Elastic. Você pode pensar no índice como sendo similar a tabela no banco de dados relacional, quaisquer documentos em um índice estão logicamente relacionados, por exemplo, em um contexto de e-commerce, pode-se ter um índice para clientes, outro para produtos, outro para as vendas e por aí vai. O índice é identificado por um nome que é usado para referência durante operações de indexação, busca, atualização e exclusão dos documentos contidos naquele índice.
Índice invertido: um índice no Elastic é na verdade o que chamamos de índice invertido, que é basicamente o mecanismo usado nas ferramentas de buscas mais conhecidas. É uma estrutura de dados que armazena um mapa do conteúdo, como palavras e números, e a sua respectiva localização em um ou mais documentos, bem semelhante a um hashmap que mapeia uma palavra para um ou mais documentos. Um índice invertido não armazena strings diretamente, em vez disso, divide cada documento em termos de pesquisas individuais (ou seja, cada palavra), em seguida, mapeia cada termo de pesquisa para os documentos em que esses termos de pesquisa ocorrem.
Por exemplo, na imagem abaixo, o termo “azuis” ocorre no documento 2, portanto, está mapeado para esse documento. Isso serve como uma consulta rápida de onde encontrar os termos de pesquisa em um determinado documento. Usar índices invertidos distribuídos, permite ao Elastic encontrar rapidamente as melhores correspondências para pesquisas de texto completo até mesmo em conjuntos de dados muito grandes.
Shards: o Elastic permite uma subdivisão de índices em múltiplos pedaços chamados de shards. Cada shard é em si um índice independente e plenamente funcional que pode ser hospedado em qualquer nó de uma rede se tratando de um cluster. Ao distribuir os documentos em um índice e distribuir um índice através de múltiplos shards e distribuindo estes shards através de múltiplos nós, é possível garantir redundância, o que protege o sistema contra alguma possível falha de hardware e também aumenta a capacidade de consultas conforme mais nós são adicionados ao cluster.
Elastic Stack (ELK)
O Elasticsearch é o componente central da chamada Elastic Stack, um conjunto de ferramentas open-source para armazenamento, enriquecimento, análise e visualização dos dados. A Elastic Stack é composta pelo Elasticsearch, Logstash, Kibana e agora também inclui o Beats, vamos dar uma olhada rápida no que cada um desses componentes tem a oferecer.
Kibana: é uma ferramenta para a visualização dos dados que fornece histogramas visuais em tempo real, gráficos de diversos tipos e mapas. Ele permite que você visualize os dados do seu Elastic e navegue por eles. Se você não estiver construindo uma aplicação que utiliza diretamente o Elastic, o Kibana é essencial para te permitir realizar consultas e visualizar os seus documentos. No entanto, uma desvantagem do Kibana é que cada visualização só funciona para um único padrão de índice, portanto, se você tiver índices com dados estritamente diferentes, terá que criar visualizações separadas para cada um. Para casos de uso mais avançados, o Knowi é uma boa opção, ele permite que você junte seus dados do Elasticsearch de diversos índices e combine-os com outras fontes de dados SQL / NoSQL / REST-API e em seguida te permite também criar visualizações a partir deles.
Logstash: é uma ferramenta utilizada para agregar, processar e enviar os dados para o Elasticsearch. O logstash pode ser visto como um pipeline de processamento de dados do lado do servidor que ingere os dados de diferente fontes simultaneamente, transforma e os envia para o destino, ou seja, uma vez que os dados costumam estar espalhados em diferente sistemas em vários formatos, o Logstash te permite vincular esses diferentes sistemas como servidores web, banco de dados, serviços Amazon, dentre outros e enviar os dados para qualquer lugar que seja necessário, normalmente para o Elastic.
Beats: são agentes utilizados para enviar os dados de centenas ou milhares de máquinas e sistemas para o Logstash ou Elastic. Os Beats são ótimos para coletar dados, por exemplo, o Filebeat pode ficar em seu servidor, monitorar arquivos de log do sistema de gerenciamento de banco de dados conforme eles chegam, analisá-los e importá-los para o Elasticsearch quase em tempo real.
Casos de uso do Elasticsearch
Agora que temos uma visão geral do que é o Elasticsearch e os seus principais componentes conseguimos ter uma ideia melhor de porque e como ele deveria ser utilizado, para ficar ainda mais claro vamos listar alguns exemplos de empresas que empregam na prática essa ferramenta.
Netflix: o Netflix utiliza a Elasticsearch Stack para monitorar e analisar operações de customer service e também logs de segurança. O Elasticsearch é a camada por debaixo do sistema de mensagens do Netflix. A empresa conta que as principais características que levaram a escolha foram a funcionalidade de replicação dos shards de forma automática, o esquema flexível e o ecossistema com diversos plugins.
Ebay: com incontáveis casos de uso de pesquisa e análise de texto essenciais para os negócios que utilizam Elasticsearch como backbone, o eBay criou uma plataforma customizada "Elasticsearch-as-a-Service" para permitir fácil provisionamento de cluster em sua plataforma interna de nuvem baseada em OpenStack.
Walmart: o Walmart utiliza a Elastic Stack para revelar o potencial oculto de seus dados e obter insights sobre os padrões de compra do cliente, rastrear métricas de desempenho da loja e análises de feriados - tudo quase em tempo real. Ele também aproveita os recursos de segurança da ELK para alertas de detecção de anomalias e monitoramento para DevOps.
Considerações finais
Neste artigo demos uma visão geral do Elasticsearch, o que é, os componentes, sua stack e alguns casos de uso. Podemos resumir que o Elastic é em sua essência um mecanismo de busca, cuja arquitetura e componentes subjacentes o tornam rápido e escalável, ele é o elemento principal em uma stack de ferramentas complementares que, juntas, podem ser usadas para muitos casos de uso, incluindo pesquisa, análise e processamento e armazenamento de dados. Espero que tenham gostado da postagem e nos vemos em breve, até a próxima!