Está en la página 1de 12

SERVIDORES WEB DE ALTAS

PRESTACIONES
21/22

Trabajo:
Elasticsearch

Alberto Pérez Morales 26519334N


albertopm97@correo.ugr.es

David Pérez Capilla 75935159S


davidetsinf@correo.ugr.es

Juan Manuel García Ortega 77024079T


juanma7685@correo.ugr.es

1
Introducción 3

Antecedentes 3
Índice Invertido 3

Desarrollo y/o análisis 5


¿Qué es? 5
Características Elasticsearch 5
Orientación a Documentos 5
Escalabilidad 5
Lenguajes de programación que soporta 6
¿Cómo Funciona Elasticsearch? 6
Herramientas 8
Arquitectura de Elasticsearch 9
Roles del Clúster 10

Conclusiones 11

Bibliografía 12

2
Introducción
En 2004, Shay Bannon se encontraba realizando un viaje con su mujer en Londres en el
cual ella estaba estudiando para convertirse en chef. Mientras trataba de encontrar trabajo,
comenzó a practicar con las primeras versiones de Lucene, una biblioteca java para
motores de búsqueda y recuperación de información, con el objetivo de crear un motor de
búsqueda de recetas para su mujer. En este proceso se da cuenta que trabajar con esta
biblioteca es bastante complejo así que comienza a desarrollar en una capa de abstracción
superior a Lucene, que se llamó Compass, que permitiera a los desarrolladores incorporar
motores de búsqueda en sus aplicaciones de forma más simple.

Años después, Shay comienza a trabajar en un entorno de alto rendimiento, y esto le lleva a
darse cuenta de que Compass no es escalable, lo cual puede ser un gran problema de cara
a futuro. En 2010 finalmente se da cuenta que por su arquitectura Compass no le permite
hacer lo que quiere, y decide destruirlo por completo para crear en su lugar Elasticsearch
con tres objetivos básicos: que sea un sistema distribuido, escalable, y de fácil uso.

Antecedentes
Lucene es, como se indicó previamente, una biblioteca de Java gratuita y de código abierto
que facilita la recuperación de información y permite crear motores de búsqueda.
Sus principales características son:
- Es open source
- Escalable
- Proporciona búsquedas de alto rendimiento
- Usa índices invertidos para la búsqueda.

Índice Invertido
Es el corazón de Lucene y, por tanto, también de Elasticsearch. En él se almacenan todos
los términos que aparecen en todos los documentos.
El índice clásico consiste en una tabla en la cual tienes como primer campo un identificador
y otro en el que almacenas el término a buscar. Estos índices son muy buenos para realizar
búsquedas por identificador, pero para búsquedas por término se vuelven más complejos y
bajan mucho el rendimiento.

3
En cambio, en los índices invertidos, en el primer campo se almacena el término, y en el
segundo los índices de los documentos en los que aparece. Este tipo de índices mejoran de
forma notoria las búsquedas por términos en conjuntos de documentos.

Este índice puede mejorarse si en vez de solo almacenar el identificador del documento,
almacenamos un par identificador, posición del término dentro del documento. En este caso
la búsqueda es directa y tendría tiempos constantes.

4
Desarrollo y/o análisis

¿Qué es?
Elasticsearch es una base de datos que utiliza NoSQL open source ,algo muy popular en
Big Data basado en Apache Lucene como motor de búsqueda. La empresa que da soporte
al producto se llama Elastic, en la cual se encuentran la mayor parte de los programadores
del proyecto, el cual utiliza el lenguaje de programación Java.

Además, Elasticsearch nos permite almacenar datos de una forma escalable y realizar
búsquedas de texto más avanzadas que las disponibles en SQL o con expresiones
regulares. Esto resulta muy útil, por ejemplo para realizar búsquedas y análisis en nuestra
base de datos.

También, permite reconocer lexemas, abreviaturas, extraer las posiciones de las palabras,
sus frecuencias de aparición, etc

Características Elasticsearch

Orientación a Documentos
- Es una base de datos implementada en NoSQL, el cual está orientado a
documentos JSON, como MongoDB. Por lo cual no necesita que se definan
esquemas a la hora de insertar los datos.

- Nos permite indexar grandes cantidades de datos, para poder consultarlos


posteriormente cuando sea necesario. Elasticsearch se basa en los documentos
JSON para poder realizar esta indexación. El documento JSON es un conjunto de
pares clave/valor. Las claves son cadenas de texto y los valores pueden ser
cadenas, números, fechas o listas.

- Elasticsearch, al estar basado en modelos NoSQL, almacena la información de


forma desnormalizada. Es por ello que no se pueden realizar joins o subqueries.

Escalabilidad
- Elasticsearch es una base de datos distribuida que escala de manera dinámica de
forma horizontal, por lo que a mayor demanda, mayor número de nodos iremos
creando.

- Llegando a poder almacenar más de 1000 Terabytes de información.

- Elasticsearch se organiza mediante nodos, los cuales se encuentran dentro de un


cluster. Podemos añadir nuevos nodos al cluster para poder realizar nuevas cargas.

5
- Los documentos son divididos mediante técnicas de sharding, por lo cual los va
distribuyendo a diferentes nodos. Esta distribución permite que las cargas de
búsqueda se distribuyan por los diferentes nodos, mejorando los tiempos de
respuesta.

- Pero a parte de distribuir los documentos mediante sharding aplica técnicas de


réplica. Estas técnicas hacen que los documentos estén replicados en varios nodos.
Esto permite que el sistema disponga de alta disponibilidad y tolerancia a fallos.

- Elasticsearch enruta las peticiones al nodo específico del cluster el cual tenga la
información necesaria que necesitemos.

- En el caso de que haya algún problema, Elasticsearch puede detectar que nodo está
fallando. De esta manera es capaz de reorganizar la información y conseguir que los
datos siempre sean accesibles.

Lenguajes de programación que soporta


Los lenguajes de programación que soporta son los siguientes:
- Java
- JavaScript (Node.js)
- Go
- .NET (C#)
- PHP
- Perl
- Python
- Ruby

¿Cómo Funciona Elasticsearch?


La información se recopila en Elasticsearch mediante índices. Cada documento se
considera un índice. Dentro del documento hay campos que contienen las propiedades del
mismo.
Un documento es autocontenido ya que contiene toda la información importante sobre su
estructura. Elasticsearch puede definir dinámicamente los documentos llamados mappings
desde los que los documentos se indexan.

6
Por ejemplo, podemos usar la API para crear un nuevo índice con un mapping explícito de
la siguiente forma:

Si queremos interaccionar mediante la API, podemos hacerlo con una llamada CURL desde
la consola especificando nuestro endpoint (localhost) y el content-type (JSON):

7
De esta forma, crearemos índices con tres campos con sus tipos de datos: edad (entero),
correo electrónico (contraseña) y nombre (texto). Posteriormente, es posible cambiar este
índice agregando nuevos campos.
En cualquier momento podemos hacer una consulta GET en la API para saber el mapping
de un índice:

También podemos usar la API GET /cat/indices para listar los índices.

Herramientas
Elasticsearch dispone de diversas herramientas para realizar consultas y trabajar con los
datos almacenados. Por un lado, existen clientes REST como curl o Postman los cuales nos
permiten interaccionar con la API directamente. Por otro lado, tenemos clientes para
diferentes lenguajes de programación como Python o Java. También tenemos la posibilidad
de realizar consultas ODBC o JDBC usando SQL.
También tenemos Kibana, la interfaz oficial de Elastic, que es un proyecto muy popular. Es
una aplicación de servidor que requiere Elasticsearch la cual nos permite implementar
interfaces para visualizar y monitorizar los datos.

8
Ejemplo de Dashboard en Kibana

Kibana pertenece a un conjunto de herramientas muy populares conocido como ELK, el


cual está compuesto por las tecnologías Elasticsearch, Logstash y Kibana. Elasticsearch es
el motor de búsqueda analítico, Logstash se encarga de recibir los datos y transformarlos y
Kibana permite visualizar estos datos y diversas métricas relevantes acerca de los mismos.
También se suele introducir dentro de este conjunto Apache Kafka para servir de buffer para
los datos entre Elasticsearch y Logstash, de forma que aumentamos la capacidad del
sistema y su tolerancia a fallos.
Para la visualización existe una alternativa a Kibana llamada Grafana, la cual es similar a
Kibana pero algo más orientada a monitorización de métricas.

Arquitectura de Elasticsearch
Es imprescindible entender el concepto de “shard” si queremos entender la arquitectura de
Elasticsearch. Un shard es una instancia de un índice de Lucene que contiene un
subconjunto de los datos. También son las unidades de distribución de datos del clúster.
Por defecto hay 5 shards por índice.
Este diseño permite a Elasticsearch usar cada shard en hebras diferentes, aumentando la
paralelización del algoritmo de búsquedas para aumentar de forma significativa el
rendimiento.

Existen dos tipos de sards:


- Primarios: son los primeros en indexar un documento
- Réplicas: replican la indexación y las búsquedas a partir de las operaciones de los
shards primarios.

9
Por defecto existe 1 réplica por cada shard primario. Además, es posible realizar snapshots
y restaurar backups de todos los datos e índices.

Cada índice de Lucene se corresponde con un shard en Elasticsearch. A su vez, Lucene


divide el shard en segmentos y puntos de commit (commit points). Los segmentos son
índices invertidos, que aceleran las búsquedas y dependen de puntos de commit que
forman las estructuras de datos con los documentos.

En el esquema podemos ver la relación entre los segmentos y los índices de Elasticsearch y
Lucene.

Roles del Clúster


Cuando se despliega como clúster, debemos considerar los roles que pueden tomar los
nodos. Cada nodo del clúster puede ejecutar uno o varios roles.
- Master node: Se encarga de realizar la gestión de los índices, la distribución de los
shards en los nodos de datos (data nodes) y su seguimiento.
- Data node: Encargados de almacenar los shards y ejecutar los procesos de
búsqueda y de indexación.
- Ingest node: Este tipo de nodo se encarga de realizar la ingesta de los datos. Para
ello, escucha las entradas de datos que se producen y los escribe. Estas
operaciones las realiza en memoria.
- Coordinating node: Nodos encargados de balancear la carga y de preprocesar los
datos en las fases de agregación.

10
Es recomendado separar estos roles en diferentes nodos en clústeres grandes (a partir de
10 nodos).
Los servicios del clúster se comunican entre ellos por el puerto TCP 9300. También se
puede habilitar el autodescubrimiento de nodos, de forma que se facilita la configuración del
clúster.
La configuración de Elasticsearch es muy flexible, y merece la pena investigar en la
documentación por las posibilidades que ofrece. El formato de esta configuración es YAML
(yml).

Conclusiones

11
Bibliografía
Parte alberto
- https://www.ecured.cu/Elasticsearch#:~:text=Historia,b%C3%BAsqueda%20de%20r
ecetas%20para%20ella.

- https://www.youtube.com/watch?v=ehCMj7E51bs&ab_channel=OpenWebinars

- https://www.youtube.com/watch?v=UIN2NeMb7xc&t=1247s&ab_channel=Paradigma
Digital

- https://www.ionos.es/digitalguide/servidores/configuracion/apache-lucene/

https://www.elastic.co/es/elasticsearch/
https://www.davincigroup.es/elastic/
https://www.youtube.com/watch?v=UIN2NeMb7xc(Curso ElasticSearch de Paradigma
Digital)
https://www.redhat.com/es/topics/api/what-is-a-rest-api#:~:text=Una%20API%20de%20RES
T%2C%20o,de%20estado%20representacional%20(REST)

https://www.elastic.co/es/what-is/elasticsearch

https://aprenderbigdata.com/elasticsearch/

https://www.arquitectoit.com/elasticsearch/que-es-elasticsearch/

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html

12

También podría gustarte