Apache Ignite es una base de datos distribuida para informática de alto rendimiento con velocidad en memoria. [2]
Autor (es) original (es) | Sistemas GridGain |
---|---|
Desarrollador (es) | Fundación de software Apache |
Versión inicial | 24 de marzo de 2015 |
Lanzamiento estable | 2.10.0 / 15 de marzo de 2021 [1] |
Versión de vista previa | 3.0.0 / 11 de enero de 2021 [1] |
Repositorio | Ignite Repository |
Escrito en | Java , C # , C ++ , SQL |
Sistema operativo | Multiplataforma |
Plataforma | IA-32 , x86-64 , PowerPC , SPARC , plataforma Java , .NET Framework |
Tipo | Base de datos , plataforma informática |
Licencia | Licencia Apache 2.0 |
Sitio web | encender |
Ignite fue de código abierto de GridGain Systems a fines de 2014 y fue aceptado en el programa Apache Incubator ese mismo año. [3] [4] El proyecto Ignite se graduó el 18 de septiembre de 2015. [4]
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 informáticas en memoria . [5] El nivel de disco es opcional pero, una vez habilitado, mantendrá el conjunto de datos completo, mientras que el nivel de memoria [6] almacenará en caché el conjunto de datos completo o parcial según su capacidad.
Independientemente de la API utilizada, los datos en Ignite se almacenan en forma de pares clave-valor. El componente de la base de datos se escala horizontalmente, distribuyendo pares clave-valor en el clúster de tal manera que cada nodo posee una parte del conjunto de datos general. Los datos se reequilibran automáticamente cada vez que se agrega o se elimina un nodo del clúster.
Además de su base distribuida, Apache Ignite admite una variedad de API, incluidas las API de valor-clave que cumplen con JCache, ANSI-99 SQL con uniones, transacciones ACID y cálculos similares a MapReduce .
El clúster de Apache Ignite se puede implementar localmente en un hardware básico, en la nube (por ejemplo, Microsoft Azure , AWS , Google Compute Engine ) o en entornos de aprovisionamiento y contenedores como Kubernetes , Docker , Apache Mesos , VMWare . [7] [8]
Agrupación
El componente de agrupación en clústeres de Apache Ignite se basa en la arquitectura de nada compartido . Los nodos se dividen en dos categorías principales: servidor y cliente. Los nodos de servidor son unidades de almacenamiento y computacionales del clúster que contienen datos e índices y procesan las solicitudes entrantes junto con los cálculos. Los nodos de servidor también se conocen como nodos de datos. [9]
Los nodos de cliente son puntos de conexión de aplicaciones y servicios a la base de datos distribuida representada como un grupo de nodos de servidor. Los nodos cliente generalmente están integrados en el código de la aplicación escrito en Java , C # o C ++ que tienen bibliotecas especiales desarrolladas.
Además, Apache Ignite proporciona controladores ODBC , [10] JDBC [11] y REST como una forma de trabajar con la base de datos de otros lenguajes o herramientas de programación. Los controladores utilizan internamente nodos de 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 (la noción de caché se usa por razones históricas porque inicialmente, la base de datos admitía el nivel 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 de seguridad principal y cero o más copias de seguridad de una partición. El número de copias se configura con un parámetro de factor de replicación. [12] Si se configura el modo de replicación completa, cada nodo del clúster almacenará una copia de la partición. Las particiones se reequilibran [13] automáticamente si se agrega o 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 mantienen 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, [14] 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 (asumiendo que el nivel de disco está habilitado), mientras que la memoria virtual usa el disco cuando se queda sin RAM. solo con fines de intercambio.
El primer nivel de la arquitectura de memoria, el nivel de memoria, mantiene los datos y los índices en la RAM fuera del montón de Java en las llamadas "regiones fuera del montón". Las regiones están preasignadas y administradas por la base de datos por sí sola, lo que evita la utilización del montón de Java para las necesidades de almacenamiento, lo que ayuda a evitar largas pausas en la recolección de basura. Las regiones se dividen en páginas de tamaño fijo que almacenan datos, índices y metadatos del sistema. [15]
Apache Ignite está en pleno funcionamiento desde el nivel de memoria, pero siempre es posible utilizar el segundo nivel, el nivel de disco, en aras de la durabilidad . La base de datos viene con su propia persistencia nativa y, además, puede usar bases de datos RDBMS , NoSQL o Hadoop como nivel de disco.
Persistencia nativa
La persistencia nativa de Apache Ignite es un almacén de disco distribuido y muy coherente que siempre contiene un superconjunto de datos e índices en el disco. El nivel de memoria [6] solo almacenará en caché tantos datos como sea posible, dependiendo de su capacidad. Por ejemplo, si hay 1000 entradas y el nivel de memoria puede caber solo en 300 de ellas, entonces las 1000 se almacenarán en el disco y solo 300 se almacenará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. [16] En segundo plano, la tienda ejecuta el "proceso de comprobación" cuyo propósito es copiar páginas sucias del nivel de memoria a los archivos de partición. Una página sucia es una página que se modifica en la memoria con la modificación registrada en WAL pero no se escribe en un archivo de partición respectivo. El punto de control permite eliminar segmentos de WAL obsoletos a lo largo del tiempo y reduce el tiempo de reinicio del clúster, reproduciendo solo la parte de WAL que no se ha aplicado a los archivos de partición. [17]
Persistencia de terceros
La persistencia nativa estuvo disponible a partir de la versión 2.1. [18] Antes de eso, Apache Ignite solo admitía bases de datos de terceros como nivel de disco.
Apache Ignite se puede configurar como el nivel en memoria además de las bases de datos RDBMS , NoSQL o Hadoop , acelerando este último. [19] 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 de antemano.
Espacio de intercambio
Cuando se usa almacenamiento de memoria pura, es posible que el tamaño de los datos exceda el tamaño de la RAM física, lo que genera errores de memoria insuficiente (OOME). Para evitar esto, el enfoque ideal sería habilitar la persistencia nativa de Ignite o utilizar la persistencia de terceros. Sin embargo, si no desea utilizar la persistencia nativa o de terceros, puede habilitar el intercambio, en cuyo caso, los datos en memoria de Ignite se moverán al espacio de intercambio ubicado en el disco. Tenga en cuenta 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, Ignites almacena datos en archivos mapeados en memoria (MMF) cuyo contenido será intercambiado al disco por el sistema operativo dependiendo del consumo actual de RAM
Consistencia
Apache Ignite es una plataforma muy consistente que implementa un protocolo de confirmación de dos fases . [20] Las garantías de coherencia se cumplen tanto para la memoria como para los niveles de disco. Las transacciones en Apache Ignite son compatibles con ACID y pueden abarcar varios nodos de clúster y cachés. La base de datos compatible con los modos de concurrencia pesimista y optimista, punto muerto transacciones -free y técnicas de detección de punto muerto.
En los escenarios donde las garantías transaccionales son opcionales, Apache Ignite permite ejecutar consultas en el modo atómico que proporciona un mejor rendimiento.
SQL distribuido
Se puede acceder a Apache Ignite utilizando las API de SQL expuestas a través de controladores JDBC y ODBC, y bibliotecas nativas desarrolladas para lenguajes de programación Java , C # , C ++ . Ambos manipulación de datos y definición de datos cumple sintaxis idiomas con ANSI-99 especificación.
Al ser una base de datos distribuida, Apache Ignite admite uniones distribuidas colocadas y no colocadas . [21] Cuando los datos se colocan, 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 colocadas pueden mover los conjuntos de datos por la red para preparar un conjunto de resultados coherente.
Aprendizaje automático
Apache Ignite proporciona capacitación en aprendizaje automático y funcionalidad de inferencia, así como preprocesamiento de datos y estimación de la calidad del modelo. [22] Admite de forma nativa algoritmos de entrenamiento clásicos como Regresión lineal , Árboles de decisión , Bosque aleatorio , Aumento de gradiente , SVM , K-Means y otros. Además de eso, Apache Ignite tiene una integración profunda con TensorFlow . [23] Esta integración permite entrenar redes neuronales sobre datos almacenados en Apache Ignite de forma distribuida o de un solo nodo.
La idea clave del kit de herramientas Apache Ignite Machine Learning es la capacidad de realizar entrenamiento distribuido e inferencia instantáneamente sin transmisiones masivas de datos. Se basa en el enfoque MapReduce , resistente a fallas de nodos y reequilibrios de datos, permite evitar transferencias de datos y acelerar el preprocesamiento y el entrenamiento del modelo. [24]
Referencias
- ^ a b "Descargas - Apache Ignite" . ignite.apache.org . Consultado el 25 de marzo de 2021 .
- ^ "Sitio web de Apache Ignite" . ignite.apache.org .
- ^ "Nikita Ivanov en la plataforma de computación en memoria Apache Ignite" . InfoQ . Consultado el 2 de noviembre de 2017 .
- ^ a b "Ignite Status - Apache Incubator" . incubator.apache.org . Consultado el 2 de noviembre de 2017 .
- ^ "Nikita Ivanov en la plataforma de computación en memoria Apache Ignite" . InfoQ . Consultado el 11 de octubre de 2017 .
- ^ a b "Apache Ignite Native Persistence, una breve descripción - DZone Big Data" . dzone.com . Consultado el 11 de octubre de 2017 .
- ^ "Implementación de Apache Ignite en Kubernetes en Microsoft Azure - DZone Cloud" . dzone.com . Consultado el 11 de octubre de 2017 .
- ^ "OLTP en memoria en tiempo real y análisis con Apache Ignite en AWS | Amazon Web Services" . Servicios web de Amazon . 2016-05-14 . Consultado el 11 de octubre de 2017 .
- ^ "Clientes y Servidores" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
- ^ "Controlador ODBC" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
- ^ "Controlador JDBC" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
- ^ "Copias primarias y de respaldo" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
- ^ "Reequilibrio de datos" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
- ^ "Apache Ignite 2.0: memoria fuera del montón rediseñada, DDL y aprendizaje automático: Apache Ignite" . blogs.apache.org . Consultado el 11 de octubre de 2017 .
- ^ "Arquitectura de la memoria" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
- ^ "Encender la persistencia" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
- ^ "Encender la persistencia" . apacheignite.readme.io . Consultado el 11 de octubre de 2017 .
- ^ "Apache Ignite 2.1 - un salto de la arquitectura en memoria a la arquitectura centrada en la memoria: Apache Ignite" . blogs.apache.org . Consultado el 11 de octubre de 2017 .
- ^ "Apache Ignite para almacenamiento en caché de base de datos - Base de datos DZone" . dzone.com . Consultado el 11 de octubre de 2017 .
- ^ "Pensamientos distribuidos" . Consultado el 11 de octubre de 2017 .
- ^ "Apache Ignite 1.7: ¡Bienvenido uniones distribuidas no colocadas! - Base de datos DZone" . dzone.com . Consultado el 11 de octubre de 2017 .
- ^ "Aprendizaje automático" . apacheignite.readme.io . Consultado el 27 de diciembre de 2018 .
- ^ "TensorFlow: integración de Apache Ignite" . github.com . Consultado el 27 de diciembre de 2018 .
- ^ "Conjunto de datos basado en particiones" . apacheignite.readme.io . Consultado el 27 de diciembre de 2018 .