Articulo de referencia

Apache Ignite

{{cite web\n | url = https://ignite.apache.org/download.cgi#sources\n | title = Downloads - Apache Ignite\n | website = ignite.apache.org\n | access-date = 2025-08-05\n}} "},"la...

Apache Ignite es un sistema de gestión de bases de datos distribuidas para computación de alto rendimiento.

La base de datos de Apache Ignite utiliza RAM como nivel predeterminado de almacenamiento y procesamiento, por lo que pertenece a la clase de plataformas de computación en memoria . [ 2 ] El nivel de disco es opcional, pero una vez habilitado, contendrá el conjunto de datos completo, mientras que el nivel de memoria [ 3 ] almacenará en caché el conjunto de datos completo o parcial según su capacidad.

En Ignite, los datos se almacenan en forma de pares clave-valor. El componente de base de datos distribuye estos pares entre los nodos del clúster de manera que cada nodo posee una parte del conjunto de datos total. Los datos se reequilibran automáticamente cada vez que se agrega o elimina un nodo del clúster.

El clúster Apache Ignite se puede implementar en las instalaciones con hardware estándar, en la nube (por ejemplo, Microsoft Azure , AWS , Google Compute Engine ) o en entornos de contenedores y aprovisionamiento como Kubernetes , Docker , Apache Mesos , VMware . [ 4 ] [ 5 ]

Historia

Apache Ignite fue desarrollado por GridGain Systems, Inc. y se convirtió en software de código abierto en 2014. GridGain sigue siendo el principal contribuyente al código fuente y ofrece tanto una versión comercial como servicios profesionales relacionados con Apache Ignite.

Una vez donado como código abierto, Ignite fue aceptado en el programa Apache Incubator en octubre de 2014. [ 6 ] [ 7 ] El proyecto Ignite se graduó del programa incubador para convertirse en un proyecto Apache de nivel superior el 18 de septiembre de 2015. [ 7 ]

En los últimos años, Apache Ignite se ha convertido en uno de los 5 proyectos más activos [ 8 ] según algunas métricas, incluyendo la actividad de la base de usuarios y el tamaño del repositorio.

GridGain fue fundada en 2010 por Nikita Ivanov y Dmitriy Setrakyan en Pleasanton, California . En noviembre de 2011 se anunció una ronda de financiación de entre 2 y 3 millones de dólares. [ 9 ] Para 2013, ya estaba ubicada en Foster City, California, cuando anunció una financiación de 10 millones de dólares. [ 10 ]

Agrupamiento

El componente de clúster Apache Ignite utiliza una arquitectura sin recursos compartidos . Los nodos de servidor son unidades de almacenamiento y computación del clúster que contienen tanto datos como índices y procesan las solicitudes entrantes junto con los cálculos. Los nodos de servidor también se conocen como nodos de datos. [ 11 ]

Los nodos cliente son puntos de conexión desde aplicaciones y servicios a la base de datos distribuida en un clúster de nodos servidor. Los nodos cliente suelen estar integrados en el código de la aplicación, escrito en Java , C# o C++, que cuenta con bibliotecas específicas. Sobre su base distribuida, Apache Ignite admite interfaces que incluyen API de clave-valor compatibles con JCache, SQL ANSI-99 con uniones, transacciones ACID y cálculos tipo MapReduce . Ignite proporciona controladores ODBC , [ 12 ] JDBC [ 13 ] y REST para trabajar con la base de datos desde otros lenguajes o herramientas de programación. Los controladores utilizan internamente nodos cliente o conexiones de socket de bajo nivel para comunicarse con el clúster.

Particionamiento y replicación

La base de datos Ignite organiza los datos en forma de pares clave-valor en "cachés" distribuidos (el término "caché" se utiliza por razones históricas, ya que inicialmente la base de datos admitía la capa de memoria). Generalmente, cada caché representa un tipo de entidad, como un empleado o una organización.

Cada caché se divide en un conjunto fijo de "particiones" que se distribuyen uniformemente entre los nodos del clúster mediante el algoritmo de hash de encuentro . Siempre hay una copia primaria y cero o más copias de respaldo de una partición. El número de copias se configura con un parámetro de factor de replicación. [ 14 ] Si se configura el modo de replicación completa, cada nodo del clúster almacenará una copia de una partición. Las particiones se reequilibran [ 15 ] automáticamente si se agrega o se elimina un nodo del clúster para lograr una distribución uniforme de los datos y distribuir la carga de trabajo.

Los pares clave-valor se almacenan en las particiones. Apache Ignite asigna un par a una partición tomando el valor de la clave y pasándolo a una función hash especial .

Arquitectura de memoria

La arquitectura de memoria en Apache Ignite consta de dos niveles de almacenamiento y se denomina "memoria duradera". Internamente, utiliza paginación para la gestión del espacio de memoria y la referencia de datos, [ 16 ] similar a la memoria virtual de sistemas como Unix . Sin embargo, una diferencia significativa entre las arquitecturas de memoria duradera y virtual es que la primera siempre mantiene todo el conjunto de datos con índices en el disco (siempre que el nivel de disco esté habilitado), mientras que la memoria virtual utiliza el disco cuando se queda sin RAM, únicamente para fines de intercambio.

La primera capa de la arquitectura de memoria, la capa de memoria, mantiene los datos e índices en la RAM fuera del montón de Java en las llamadas "regiones fuera del montón". Estas regiones son preasignadas y administradas por la propia base de datos, lo que evita la utilización del montón de Java para necesidades de almacenamiento y, en consecuencia, ayuda a evitar largas pausas de recolección de basura. Las regiones se dividen en páginas de tamaño fijo que almacenan datos, índices y metadatos del sistema. [ 17 ]

Apache Ignite funciona perfectamente desde la capa de memoria, pero siempre es posible utilizar la segunda capa, la de disco, para mayor durabilidad . La base de datos incluye su propia persistencia nativa y, además, puede utilizar bases de datos RDBMS , NoSQL o Hadoop como capa de disco.

persistencia nativa

La persistencia nativa de Apache Ignite es un sistema de almacenamiento en disco distribuido y con alta consistencia que mantiene siempre un superconjunto de datos e índices en disco. La capa de memoria [ 3 ] solo almacenará en caché la cantidad de datos que pueda, según su capacidad. Por ejemplo, si hay 1000 entradas y la capa de memoria solo puede almacenar 300, las 1000 se almacenarán en disco y solo 300 se guardarán en caché en la RAM.

La persistencia utiliza la técnica de registro de escritura anticipada (WAL) para mantener las modificaciones de datos inmediatas en el disco. [ 18 ] En segundo plano, el almacén ejecuta el "proceso de punto de control", cuyo propósito es copiar las páginas modificadas del nivel de memoria a los archivos de partición. Una página modificada es una página que se modifica en memoria y cuya modificación se registra en WAL, pero no se escribe en el archivo de partición correspondiente. El punto de control permite eliminar segmentos WAL obsoletos con el tiempo y reduce el tiempo de reinicio del clúster al reproducir solo la parte de WAL que no se ha aplicado a los archivos de partición. [ 19 ]

Persistencia de terceros

La persistencia nativa estuvo disponible a partir de la versión 2.1. [ 20 ] Antes de eso, Apache Ignite solo admitía bases de datos de terceros como su nivel de disco.

Apache Ignite se puede configurar como la capa en memoria sobre bases de datos RDBMS , NoSQL o Hadoop , acelerando estas últimas. [ 21 ] Sin embargo, existen algunas limitaciones en comparación con la persistencia nativa. Por ejemplo, las consultas SQL se ejecutarán solo en los datos que estén en la RAM, por lo que es necesario precargar todo el conjunto de datos del disco a la memoria con antelación.

Intercambiar espacio

Al utilizar almacenamiento en memoria pura, es posible que el tamaño de los datos supere la capacidad de la RAM física, lo que provoca errores de falta de memoria (OOME). Para evitarlo, lo ideal sería habilitar la persistencia nativa de Ignite o utilizar una solución de persistencia de terceros. Sin embargo, si no desea utilizar ninguna de estas soluciones, puede habilitar el intercambio de memoria (swapping), en cuyo caso, los datos en memoria de Ignite se moverán al espacio de intercambio ubicado en el disco. Cabe destacar que Ignite no proporciona su propia implementación de espacio de intercambio. En su lugar, aprovecha la funcionalidad de intercambio proporcionada por el sistema operativo (SO). Cuando el espacio de intercambio está habilitado, Ignite almacena los datos en archivos mapeados en memoria (MMF), cuyo contenido será intercambiado al disco por el SO en función del consumo actual de RAM.

Consistencia

Apache Ignite es una plataforma de consistencia fuerte que implementa el protocolo de confirmación en dos fases . [ 22 ] Las garantías de consistencia se cumplen tanto para la memoria como para el disco. Las transacciones en Apache Ignite cumplen con las propiedades ACID y pueden abarcar varios nodos y cachés del clúster. La base de datos admite modos de concurrencia pesimistas y optimistas, transacciones sin interbloqueos y técnicas de detección de interbloqueos.

En los casos en que las garantías transaccionales son opcionales, Apache Ignite permite ejecutar consultas en modo atómico, lo que proporciona un mejor rendimiento.

SQL distribuido

Se puede acceder a Apache Ignite mediante las API SQL expuestas a través de los controladores JDBC y ODBC, así como mediante bibliotecas nativas desarrolladas para los lenguajes de programación Java , C# y C++ . La sintaxis de los lenguajes de manipulación y definición de datos cumple con la especificación ANSI-99 .

Al ser una base de datos distribuida, Apache Ignite admite uniones distribuidas tanto colocalizadas como no colocalizadas . [ 23 ] Cuando los datos están colocalizados, las uniones se ejecutan en los datos locales de los nodos del clúster, evitando el movimiento de datos a través de la red. Las uniones no colocalizadas pueden mover los conjuntos de datos a través de la red para preparar un conjunto de resultados consistente.

Aprendizaje automático

Apache Ignite proporciona funcionalidades de entrenamiento e inferencia de aprendizaje automático, así como preprocesamiento de datos y estimación de la calidad del modelo. [ 24 ] Admite de forma nativa algoritmos de entrenamiento clásicos como regresión lineal , árboles de decisión , bosques aleatorios , potenciación de gradiente , SVM , K-Means y otros. Además, Apache Ignite cuenta con una profunda integración con TensorFlow . [ 25 ] Esta integración permite entrenar redes neuronales con datos almacenados en Apache Ignite de forma distribuida o en un solo nodo.

La idea clave del kit de herramientas Apache Ignite Machine Learning es la capacidad de realizar entrenamiento e inferencia distribuidos instantáneamente sin transmisiones masivas de datos. Se basa en el enfoque MapReduce , resistente a fallos de nodos y reequilibrios de datos, lo que permite evitar transferencias de datos y, por lo tanto, acelerar el preprocesamiento y el entrenamiento del modelo. [ 26 ]

Referencias

  1. 1 2 "Descargas - Apache Ignite" . ignite.apache.org . Consultado el 5 de agosto de 2025 .
  2. "Nikita Ivanov sobre la plataforma de computación en memoria Apache Ignite" . InfoQ . Consultado el 11 de octubre de 2017 .
  3. 1 2 "Apache Ignite Native Persistence, una breve descripción general - DZone Big Data" . dzone.com . Consultado el 11 de octubre de 2017 .
  4. "Implementación de Apache Ignite en Kubernetes en Microsoft Azure - DZone Cloud" . dzone.com . Consultado el 11 de octubre de 2017 .
  5. "OLTP y análisis en memoria en tiempo real con Apache Ignite en AWS | Amazon Web Services" . Amazon Web Services . 14 de mayo de 2016. Consultado el 11 de octubre de 2017 .
  6. "Nikita Ivanov sobre la plataforma de computación en memoria Apache Ignite" . InfoQ . Consultado el 2 de noviembre de 2017 .
  7. 1 2 "Estado de Ignite - Incubadora Apache" . incubator.apache.org . Consultado el 2 de noviembre de 2017 .
  8. "Apache Ignite Momentum: Lo más destacado de 2020-2021 : Apache Ignite" . blogs.apache.org . 14 de septiembre de 2021. Consultado el 13 de junio de 2022 . 
  9. "Formulario D - Aviso de oferta exenta de valores" . Comisión de Bolsa y Valores de los Estados Unidos. 8 de noviembre de 2011. Consultado el 16 de febrero de 2022 .
  10. "Formulario D - Aviso de oferta exenta de valores" . Comisión de Bolsa y Valores de los Estados Unidos. 7 de mayo de 2013. Consultado el 16 de febrero de 2022 .
  11. "Clientes y servidores" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
  12. "Controlador ODBC" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
  13. "Controlador JDBC" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
  14. "Copias primarias y de respaldo" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
  15. "Reequilibrio de datos" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
  16. "Apache Ignite 2.0: Memoria fuera del montón rediseñada, DDL y aprendizaje automático : Apache Ignite" . blogs.apache.org . 5 de mayo de 2017. Consultado el 11 de octubre de 2017 . 
  17. "Arquitectura de memoria" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
  18. "Ignite Persistence" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
  19. "Ignite Persistence" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
  20. "Apache Ignite 2.1 - Un salto de la arquitectura en memoria a la arquitectura centrada en la memoria : Apache Ignite" . blogs.apache.org . 27 de julio de 2017. Consultado el 11 de octubre de 2017 . 
  21. "Apache Ignite para almacenamiento en caché de bases de datos - Base de datos DZone" . dzone.com . Consultado el 11 de octubre de 2017 .
  22. "Pensamientos distribuidos" . Consultado el 11 de octubre de 2017 .
  23. "Apache Ignite 1.7: ¡Bienvenido a las uniones distribuidas no colocalizadas! - Base de datos DZone" . dzone.com . Consultado el 11 de octubre de 2017 .
  24. "Aprendizaje automático" . apacheignite.readme.io . Consultado el 27 de diciembre de 2018 .
  25. "TensorFlow: Integración con Apache Ignite" . github.com . Consultado el 27 de diciembre de 2018 .
  26. "Conjunto de datos basado en particiones" . apacheignite.readme.io . Consultado el 27/12/2018 .