Elasticsearch

Publicado por

Hace años, un desarrollador recién casado y sin trabajo llamado Shay Bannon se fue con su mujer a Londres, donde ella estaba estudiando para ser chef. Mientras buscaba un empleo, empezó a jugar con las primeras versiones de Lucene con la intención de construir un motor de búsqueda de recetas para su mujer.

Índice

  1. Historia
  2. Introducción
  3. Características
  4. Conceptos
  5. Arquitectura
  6. Logstash
  7. Kibana

1. Historia

Trabajar directamente con Lucene puede ser complicado así que Shay comenzó a trabajar en una capa de abstración que facilitará a los programadores en Java realizar búsquedas en sus aplicaciones. Bannon lanzó su primer proyecto open-source llamado Compass.

Cuando pasado un tiempo encontró trabajo en un entorno de alto rendimiento distribuido con procesamiento en memoria decidió reescribir Compass y llamarlo Elasticsearch.

2. Introducción

Elasticsearch es un motor de búsqueda en tiempo real y de analítica. Permite explorar datos a una velocidad y a una escala que antes no era posible. Se utiliza para búsqueda de texto completo, búsquedas estructuradas, analítica en tiempo real, o una combinación de las tres.

Wikipedia utiliza Elasticsearch para proporcionar búsquedas de texto completo con el fragmento a buscar resaltado, búsquedas mientras se escribe el término (Search as you type) y para proporcionar sugerencias de búsqueda (Did you mean…).

Stackoverflow combina la búsqueda completa de texto con consultas de geolocalización y utiliza el método “mas como este” (More like this…) para encontrar preguntas y respuestas relacionadas.

Github utiliza Elastic para consultar sobre 130 billones de líneas de código.

Elasticsearch puede ser utilizado en un portatil o escalar a un sistema con cientos de nodos y petabytes de datos.

Ninguna pieza individual de Elasticsearch es nueva o revolucionaria. La búsqueda de texto completo ya se ha hecho antes desde que tenemos sistemas analíticos y bases de datos distribuidas. Lo revolucionario es la combinación de estas piezas en una sola aplicación coherente y en tiempo real.

3. Características

Elastisearch es un motor de búsqueda open-source construido sobre Apache Lucene, una librería con un motor de búsqueda completa de texto. Lucene es sin duda el motor mas avanzado para esta misión por su alto rendimiento. Esta escrito en Java y programar en Lucene es muy complejo porque hay que entender muy bien como funciona.

Elasticsearch también está escrito en Java y utiliza internamente Lucene para sus indexados y búsquedas, pero su objetivo es que la búsqueda de texto completo sea fácil escondiendo la complejidad de Lucene en una API RESTful simple y coherente.

Elasticsearch es mucho más que un motor de búsqueda de texto, podríamos decir que:

  • Es un almacén de documentos distribuidos en tiempo real donde cada campo es indexado y buscable
  • Motor de búsqueda distribuido con analítica en tiempo real
  • Capacidad de escalar hasta cientos de servidores y petabytes de datos

4. Conceptos

Índice invertido

Un índice invertido asigna términos a documentos (y posiblemente posiciones en los documentos) que contienen el termino. Dado que los términos del diccionario están ordenados, podemos encontrar rápidamente un término y posteriormente sus ocurrencias en la estructura de contabilizaciones. Esto es contrario a un índice directo, que enumera los términos relacionados con un documento específico.

captura-de-pantalla-2017-02-22-a-las-11-03-34http://www.elastic.co/blog/

Index

Un índice se almacena en un conjunto de shards, que son en si mismo índices de Lucene. Esto da una idea de los limites de usar un nuevo índice cada vez: Lucene tiene una sobrecarga fija en termino de espacio en disco, uso de memoria y en descriptores de archivo usados. Por esta razón, un solo índice grande, es más eficiente que muchos índices pequeños. El coste fijo del índice de Lucene es amortizado mejor con muchos documentos.

Otro aspecto importante es planear como se van a realizar las búsquedas sobre los datos. Mientras cada shards se busca de forma independiente, Elasticsearch finalmente necesita combinar resultados de todos los shards buscados.

Por ejemplo: si buscas en 10 índices donde cada uno tiene 5 shards, el nodo que coordina la ejecución de la búsqueda necesita combinar 5×10=50 shards. Mezclar conjuntos de datos grandes puede llevar a un uso intensivo en CPU y memoria. Teniendo esto en cuenta, cuantos menos índices tengamos mejor.

Para resolver el problema anterior existe los types que son una manera de almacenar diferentes tipos de datos en el mismo índice para mantener el número total de índices bajo. En términos de implementación funciona añadiendo un campo “_type” a cada documento que se utiliza automáticamente para filtrar cuando se busca en un tipo especifico.

5. Arquitectura

La topología de clúster para Elastic puedes ser la de la siguiente figura. Tenemos un índice de Elasticsearch con dos shards, replicado a través de los nodos en dos “zonas” diferentes para aumentar la disponiblidad, con un solo master para las tres zonas. También tenemos dos nodos de cliente que mandaran peticiones.

Captura de pantalla 2017-02-22 a las 11.18.55.pnghttp://www.elastic.co/blog/

Cuando se envía una petición a un nodo de Elasticsearch, este nodo adquiere el rol de coordinador de la petición. Va a decidir a que nodos y shards dirigir la solicitud, como combinar las respuestas de los diferentes nodos, así como decidir cuando la solicitud se ha terminado. Mientrás que Elasticsearch se encarga de esto de forma transparente, los esquemas de particionamiento avanzados requieren conocimientos sobre procesamiento interno y enrutamiento.

Para poder actuar como coordinador, el nodo necesita saber el estado del cluster, por eso el estado del cluster se replica en cada nodo. Tiene información sobre la tabla de enrutamiento de shards, metadatos sobre cada nodo (donde se ejecuta y que atributos tiene) y los mapas de índice.

6. Logstash

Logstash es una herramienta para la administración de logs. Se puede utilizar para obtener, transformar y guardar los logs para futuras búsquedas. La aplicación corre sobre la Máquina Virtual Java.

Soporta multitud de entradas de fuentes de datos, codecs para transformar distintos tipos de formato de fichero a formato logstash, filtros que aplicar sobre los datos y diferentes tipos de salidas.

7. Kibana

Kibana es una herramienta open source que pertenece a Elastic y permite visualizar la información almacenada e indexada en Elasticsearch. Es una herramienta muy buena para la agregación de losgs, visualización y análisis.

Fuentes

Elasticsearch Book
Elastic blog top down
Kafka and Elasticsearch

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s