Elasticsearch se lanzó en 2010 y fue uno de los primeros motores de búsqueda distribuidos creados para la consulta rápida de los datos que se muestran en los análisis o en la salida de macrodatos. En ese momento, más empresas acumulaban cantidades enormes de datos, pero los motores de bases de datos tradicionales no eran capaces de seguir el ritmo. Elasticsearch se introdujo como una base de datos vectorial capaz de almacenar datos estructurados y no estructurados. Fue el primer gran salto hacia la indexación de macrodatos y las consultas más rápidas cuando las analíticas empresariales superaron los terabytes de datos, lo que provocó problemas de rendimiento.
¿Qué es Elasticsearch?
Elasticsearch es un almacén de datos que se utiliza para juntar los datos y hacer que se puedan buscar a través de una API. Se basa en Apache Lucene, que es un servicio de indexación y almacenamiento que distribuye los datos en fragmentos. Cada fragmento contiene sus propios datos, pero los fragmentos se mantienen separados entre sí para distribuir los datos entre nodos. Elasticsearch agrupa todos los fragmentos y proporciona una API para que los desarrolladores consulten los datos. Con la API, los administradores pueden establecer permisos para usuarios específicos para proteger aún más los datos y dar acceso a datos específicos solo a usuarios autorizados.
Los desarrolladores no se limitan a los datos estructurados o no estructurados. Elasticsearch permite que los usuarios extraigan datos estructurados y no estructurados, pero consulta los datos en sus fragmentos distribuidos como si el almacenamiento fuera una base de datos grande. La manera en que Elasticsearch maneja los datos hace que sean mucho más rápidos que un motor de base de datos estándar, por lo que es mejor para las aplicaciones con analíticas, funcionalidad de búsqueda en muchos datos o análisis de tráfico de red.
Componentes principales de la arquitectura de Elasticsearch
El primer componente central de Elasticsearch es el nodo . Un nodo es un servidor o dispositivo en el que se almacenan los datos. Los clústeres están formados por un conjunto de nodos. Los nodos y los clústeres pueden distribuirse entre los centros de datos para lograr redundancia, pero los datos distribuidos son lo que mejora el rendimiento en las consultas de datos. Elasticsearch es una base de datos vectorial, pero almacena los datos como un documento. Un documento es una entidad que almacena datos no estructurados, aunque los datos estructurados también pueden almacenarse en él.
Los datos se fragmentan en los nodos. Los fragmentos son una parte de los datos para segmentar grandes almacenes de datos en porciones más pequeñas, lo que facilita la distribución y la consulta simultánea para reunir los datos en un conjunto de resultados para la aplicación front-end. Logstash se utiliza como canal de datos, que toma los datos en su forma bruta y los transforma en una forma utilizable.
Elasticsearch también tiene una API que es la puerta de entrada a los datos. Los desarrolladores deben autenticarse en la API y consultarla con una clave. La API controla el acceso a los datos y la manera en que los desarrolladores pueden consultarlos. Tener una API también oculta la arquitectura back-end y la protege, lo que hace que sea accesible para los desarrolladores que no están familiarizados con el funcionamiento de Apache Lucene y otros componentes.
Nodos y clústeres
Un clúster es un grupo de nodos, pero los nodos tienen su propio papel específico en un clúster. El nodo maestro, en términos generales, controla el clúster. El nodo maestro puede crear o eliminar índices y realizar un seguimiento de otros nodos que participan en el clúster. Cada clúster tiene un nodo maestro.
Un nodo de datos almacena los datos. Cualquier manipulación o cambio en los datos es responsabilidad del nodo de datos. A medida que agrega datos, los agrega al nodo de datos. La funcionalidad de búsqueda también se produce en el nodo de datos.
Piense en la coordinación de los nodos como las puertas de enlace que controlan el tráfico al nodo correcto. Un nodo de coordinación envía solicitudes al nodo maestro o a los nodos de datos, en función de su destino. Por ejemplo, cuando se envía una búsqueda al clúster, el nodo coordinador gestiona su solicitud.
Elasticsearch tiene un pipeline para transformar y mover los datos. El nodo de incorporación es el responsable de gestionar los documentos y transformarlos para la indexación. Elasticsearch recomienda tener un nodo de entrada independiente de los nodos maestro y de datos en entornos con transferencias de datos pesadas.
Los nodos elegibles para remoto envían solicitudes a otros clústeres del sistema Elasticsearch. Las consultas de búsqueda pueden encontrar datos usando la funcionalidad de clúster cruzado con un nodo apto para remoto. La replicación de los datos entre clústeres también es responsabilidad de los nodos que pueden optar a la opción remota.
Fragmentos y réplicas
Las búsquedas y las consultas rápidas requieren índices. Los índices son la manera en que un almacén de datos organiza los datos de un modo que hace que las búsquedas sean más rápidas. En Elasticsearch, cada índice está formado por una serie de fragmentos. Los fragmentos se almacenan en nodos, donde Elasticsearch los distribuye por el clúster para un procesamiento más rápido. Los fragmentos contienen una copia de los datos, pero Elasticsearch puede realizar búsquedas simultáneas en múltiples fragmentos.
La redundancia es necesaria para la conmutación por error y la tolerancia a fallos, por lo que las réplicas manejan una copia de fragmentos. Las réplicas se almacenan en diferentes nodos, de manera que los datos no se pierden cuando falla un nodo. Si un nodo falla, Elasticsearch podrá acceder a los datos en una réplica en un nodo diferente.
Flujo de datos en Elasticsearch
Elasticsearch proporciona una API para que los desarrolladores envíen sus consultas. La API protege a los desarrolladores de la complejidad del backend. El back-end, tal como hemos comentado, está formado por varios componentes, incluidos fragmentos, nodos, índices y réplicas. En lugar de obligar a los desarrolladores a gestionar los investigadores de Elasticsearch, el flujo de datos empieza con una consulta a la API.
La API envía la consulta primero a un coordinador. El coordinador lo envía al nodo adecuado donde se encuentran los fragmentos. También se puede enviar una consulta a múltiples fragmentos, cada uno con su propio conjunto de datos. El enrutamiento lo realiza el coordinador, que determina los fragmentos correctos para la consulta.
Después de que los fragmentos recogen documentos, los índices de los documentos se devuelven al coordinador. Cuando varios fragmentos envían datos de vuelta al coordinador, este organiza los índices, los fusiona y los clasifica. Con los índices ordenados, el coordinador recupera los documentos reales de los fragmentos. Una vez que se recuperan los datos, se devuelven a la aplicación a través de la API.
Mejores prácticas para optimizar la arquitectura de Elasticsearch
Elasticsearch es mucho más complejo que el motor de base de datos medio, por lo que la optimización de este proceso requiere un enfoque distinto. Primero tiene que asegurarse de que se ejecutan suficientes recursos en el back-end. Si las consultas son demasiado lentas, considere aumentar la capacidad de CPU, memoria o almacenamiento del servidor.
Los índices son necesarios para buscar datos, pero algunos datos no se utilizan con tanta frecuencia como otros datos. Elasticsearch le permite congelar los índices, lo que mueve los índices no utilizados a otro fragmento. Luego, los coordinadores tienen menos fragmentos para buscar cada consulta, mejorando el rendimiento.
Los grupos de subprocesos en los tamaños de consulta de control de Elasticsearch y deben optimizarse para soportar la cantidad de datos manejados en cada consulta. Configure los conjuntos de subprocesos para gestionar suficientes datos para sus consultas, pero también se vinculan con los recursos de los nodos. Tanto los nodos como los conjuntos de subprocesos deberían tener suficientes recursos o podría ver un rendimiento degradado durante las consultas de gran volumen.
Conclusión
Elasticsearch es mucho más complejo que una base de datos estándar, por lo que es necesario tener la arquitectura y los recursos informáticos adecuados para un rendimiento óptimo. Utilice las mejores prácticas cuando configure Elasticsearch, pero también es importante tener los recursos informáticos adecuados para soportar las consultas y el almacenamiento de datos necesarios para el back-end.
Una manera de asegurarse de que tiene suficientes recursos de almacenamiento es utilizar FlashBlade® de Pure Storage®. FlashBlade admite un crecimiento exponencial para empresas de todos los tamaños. Sus aplicaciones pueden escalarse a medida que más usuarios almacenan datos y dan soporte a cualquier número de clientes.