Elasticsearch

May 17, 2017 | TIC-tek

Elasticsearch es un proyecto Open Source altamente escalable que permite realizar búsquedas de texto optimizadas y ofrece una analítica de todos sus datos. Generalmente se utiliza para ofrecer búsquedas de texto complejas a nuestra aplicación. Gracias a Elasticsearch podemos almacenar documentos (estructurados o no) e indexar todos los campos de estos documentos en casi tiempo real. Además, a diferencia de otros sistemas parecidos, no necesita declarar un esquema de la información que añadamos.

Para poder hablar sobre cómo funciona su sistema distribuido, necesitamos aclarar antes los conceptos sobre los que se basa.

Conceptos
  • Cluster: es una colección de uno o más nodos (servidores) que contienen toda la información. Se identifica por su nombre, por defecto “elasticsearch”. Cada nodo solo puede tener un cluster y se une a él mediante su nombre.
  • Nodo: es un servidor que forma parte del cluster donde se guarda toda la información. Se identifica por su nombre, por defecto es un personaje de Marvel. Cada nodo tiene un “cluster_name”, por defecto “elasticsearch”, y todos los nodos con el mismo nombre se unen automáticamente al mismo cluster.
  • Índice: colección de documentos con características similares. Se identifican por su nombre, siempre en minúsculas. Su nombre es el que se usa para indexar, buscar, borrar, filtrar…
  • Tipo: dentro de un índice, se pueden definir uno o más tipos. Un tipo es una categoría/partición de un índice.
  • Documento: es una unidad de información, representada en formato JSON, que puede ser indexada. Dentro de un índice podemos guardar tantos documentos como queramos, siempre que tengan asignados un tipo y éste, a su vez, un índice.
  • Shard y Réplicas: un índice puede almacenar gran cantidad de datos, que pueden exceder los límites de un nodo. Para resolver este problema, Elasticsearch divide esta información en trozos, llamados shards. Cada shard es completamente funcional e independiente y puede ser almacenado en cualquier nodo del cluster.

Para proporcionar alta disponibilidad (control a fallos), Elasticsearch crea réplicas de estos shards. Por defecto, se crea una réplica por cada shard aunque podemos cambiarlo dinámicamente.

Modelo Distribuido

Elasticsearch puede trabajar como un sistema standalone, pero para poder trabajar con gran cantidad de datos es recomendable usar un Cluster de instancias.

Cada vez que se inicia una instancia de Elasticsearch, se inicia un nodo. Si hemos iniciado un solo nodo, entonces tendremos un cluster de Elasticsearch con un solo nodo. Por defecto, Elasticsearch es de naturaleza distribuida y realiza de manera automática todas las operaciones de descubrimiento, balanceo de carga y comunicación entre sus nodos.

Cada vez que añadimos un nuevo índice a nuestro nodo, Elasticsearch crea por defecto 5 shards y 1 réplica por cada uno (tanto el número de shards como el de réplicas es configurable), y dependiendo de cuántos nodos dispongamos se encarga de balancearlos. Aunque cada shard tenga su réplica, solo uno será primary. Si el primary se cae, automáticamente su réplica es promovida. Elasticsearch intenta separar los shard en distintos nodos y sus réplicas para proporcionar alta disponibilidad y que la caía de un nodo en nuestro sistema no nos suponga una pérdida de datos.

Dentro de este modelo distribuido, Elasticsearch realiza de manera automática muchas operaciones: particionamiento de shards y almacenamiento en nodos, balanceo de shards para aumentar el rendimiento en búsquedas, duplicado de shards para proporcionar alta disponibilidad, enrutamiento de peticiones de cualquier nodo en el cluster, aumento del lustre de forma dinámica y redistribución de shards en los nuevos nodos.

Operaciones

Todas las operaciones que podemos hacer con Elasticsearch las hacemos mediante llamadas http: o bien desde nuestra consola o bien desde su plugin para chrome sense. Sense nos facilita las llamadas a la API de Elasticsearch, dispone de autocompletado, ayuda y un panel visual bastante intuitivo a la hora de ver las respuestas.

Las operaciones que hacemos con Elasticsearch las hacemos con su DSL específico, tanto para crear documentos, como para realizar búsquedas sobre ellos.

Elastic Stack

Conjunto de aplicaciones Elasticsearch, kibana y logstash, antigüamente llamado ELK. Ofrece información útil y muy visual casi en tiempo real, gracias a la unión de estos tres proyectos Open Source. Hace la búsqueda y el análisis de datos más fácil que nunca.

Con Logstash administramos los logs de nuestras aplicaciones, recolectamos, paseamos y guardamos los logs, tanto de Elasticsearch,como de cualquier aplicación para su posterior análisis.

Gracias a Kibana podemos visualizar y explorar los datos indexados en Elasticsearch y Logstash. Ofrece una interface muy potente, permitiendo crear visualizaciones de datos a medida y realizar consultas personalizadas sobre todos los datos indexados.

Conclusión

Elasticsearch nos ofrece la posibilidad de realizar búsquedas de texto tan complejas como requiera nuestra aplicación. Permite un manejo de su modelo distribuido muy sencillo y rápido, casi automático. Pero Elasticsearch solo sirve para esto, no deberíamos usarlo nunca como alternativa a una base de datos relacional.

Catálogo 2021

Conoce nuestra oferta formativa para este año

Últimas entradas