Lanzamiento de Apache Ignite 2.9.0 - ¿que hay de nuevo?

Apache Ignite es una base de datos distribuida de código abierto y de alto rendimiento diseñada para almacenar y procesar grandes cantidades de datos en un grupo de nodos. En Sberbank lo usamos activamente y tenemos un equipo que desarrolla este producto. El 23 de octubre de 2020, se lanzó una nueva versión de Apache Ignite 2.9.0. Como gerente de esta versión en nombre de todo el equipo de desarrollo de Apache Ignite, quiero compartir información sobre las principales innovaciones.



  • Instantáneas (copia de seguridad)
  • Rastreo
  • Nuevas funciones para clientes ligeros
  • Modo de funcionamiento de clúster "Solo lectura"
  • Ejecutando código personalizado en la zona de pruebas
  • Cifrado de datos transparente: rotación de la clave maestra
  • Herramientas para interrumpir las tareas y solicitudes de los usuarios
  • Almacenamiento en caché del lado de la plataforma (.NET)
  • Conexión de nodos de cliente a nodos de servidor a través de NAT




Instantáneas (copia de seguridad)



En Ignite 2.9.0, fue posible crear una copia de seguridad de todos los cachés almacenados en el disco (es decir, los cachés que funcionan en el modo Ignite Native Persistence ) de todo el clúster. Las instantáneas se pueden crear en línea, en un clúster activo con una carga de usuarios. Esto crea una copia completamente coherente de todos los datos del clúster.



Puede comenzar a crear una copia de seguridad de una de las siguientes maneras:



  • utilizando un control.sh utilidad de línea de comandos: control.sh --snapshot create <snapshot name>;
  • Operación JMX: MBean group="Snapshot", name=SnapshotMXBeanImpl, createSnapshot(<snapshot name>);
  • la API a través del Java: Ignite.snapshot().createSnapshot("<snapshot name>").


¿Dónde <snapshot name>está el nombre único de la instantánea?



Una vez completada la formación de la instantánea en el directorio work/snapshots/<snapshot name>(con la configuración predeterminada) de cada nodo, se volverá a crear la estructura del almacenamiento de archivos de este nodo en el momento del inicio de la instantánea. La estructura de archivos generada se puede usar en el futuro para restaurar desde una copia de respaldo reemplazando archivos con datos de nodo con archivos del directorio de instantáneas.



Puede encontrar información más detallada sobre cómo trabajar con instantáneas en la documentación oficial .



Rastreo



El sistema de monitoreo Ignite continúa mejorando y una de las innovaciones significativas en la versión 2.9 es el subsistema de rastreo. El rastreo permite obtener información útil tanto para depurar en fase de desarrollo como para analizar incidencias. Con la ayuda del seguimiento, fue posible recopilar información distribuida de bajo nivel sobre el progreso de varias tareas que se ejecutan en el clúster y utilizar esta información para diagnosticar problemas de rendimiento. Se forma un rastro que muestra la ruta de una tarea en el sistema en forma de árbol, cada nivel siguiente proporciona información más detallada que el anterior.



En Ignite 2.9.0, el rastreo cubre los siguientes componentes internos:



  • Mensajes de descubrimiento;
  • Mensajes de comunicacion
  • Proceso de intercambio;
  • actas.


Para ver las trazas, deben exportarse a un sistema externo. Para estos fines, Ignite utiliza la biblioteca OpenCensus, que de fábrica proporciona varios exportadores a varios sistemas (por ejemplo, en Zipkin).



Puede limitar la cantidad de información exportada configurando uno o más de los componentes anteriores como el alcance y configurando la frecuencia de muestreo (las configuraciones están disponibles para cambiar en tiempo de ejecución).



Puede encontrar información más detallada sobre el rastreo en la documentación oficial .



Nuevas funciones para clientes ligeros



Los clientes ligeros java y .NET ahora tienen la funcionalidad Ignite que antes solo estaba disponible en el cliente pesado.



La capacidad de usar:



  • cluster API & cluster group API ( .NET java):
    • ;
    • ;
    • , ;
    • ;
  • compute API ( .NET java):
    • . , p2p class loader , class-path ( );
  • Service Grid ( java):
    • Ignite. compute API, , .


Además, el cliente ligero .NET ha recibido la función Detección automática de nodos de servidor, que está habilitada junto con la función de reconocimiento de particiones. Cuando se utiliza el "reconocimiento de partición", el cliente establece una conexión no con un nodo del servidor, sino con varios a la vez, para, si es posible, enviar una solicitud al nodo que es el principal para los datos de esta solicitud. Al mismo tiempo, el descubrimiento automático de los nodos del clúster permite no enumerar todas las direcciones de los nodos del clúster en la configuración del cliente. Es suficiente que el cliente pueda conectarse al menos a un host en vivo utilizando las direcciones que figuran en la configuración. El cliente recibirá las direcciones de los nodos restantes del clúster.



Para obtener más información sobre cómo utilizar las nuevas funciones, consulte las subsecciones correspondientes de la documentación del cliente ligero java y del cliente ligero .NET .



Modo de funcionamiento de clúster "Solo lectura"



Antes de la versión 2.9.0, Ignite tenía solo dos estados del clúster: el clúster podía estar inactivo (los nodos se recopilaron en una topología, pero se prohibieron las acciones con cachés) o activo (se permitieron las acciones). En la versión 2.9.0, se agregó un nuevo estado de clúster: "solo lectura". Será útil para realizar algunos trabajos de mantenimiento (como comprobar la integridad de los datos).



Puede encontrar información más detallada sobre los estados del clúster en la documentación oficial .



Ejecutando código personalizado en la zona de pruebas



Ignite puede ejecutar código personalizado (como tareas de cómputo, detectores de eventos, varios filtros) en los nodos del servidor. Dicho código se ejecutó con los mismos derechos que el código del sistema Ignite y toda la API de Java estuvo disponible sin restricciones. El código potencialmente inseguro podría interrumpir el rendimiento del clúster (por ejemplo, eliminar archivos de datos de Ignite, finalizar la JVM, etc.).



En la versión 2.9.0, fue posible ejecutar dicho código en la "caja de arena" con los derechos que se asignaron explícitamente al sujeto de acceso que solicitó la ejecución de este código (por ejemplo, un nodo cliente). Los derechos asignados a un descriptor de acceso son una colección de objetos de clase java.security.Permissionque java comprueba antes de realizar alguna acción.



Para que Ignite Sandbox funcione, se deben instalar y habilitar dos componentes:



  • Gerente de seguridad de Java. Responsable de autorizar sujetos al realizar llamadas a bibliotecas java del sistema. Desactivado por defecto;
  • Encienda el procesador de seguridad. Responsable de autenticar los sujetos de acceso. "Fuera de la caja" con Ignite no se suministra, requiere implementación independiente y conexión mediante un complemento.


Puede encontrar información más detallada sobre Ignite Sandbox en la documentación oficial .



Cifrado de datos transparente: rotación de la clave maestra



El cifrado de datos transparente (TDE) es una funcionalidad que le permite no almacenar datos en el disco en texto sin cifrar. Se requiere cifrar datos en un disco usando un DBMS, por ejemplo, para la certificación de seguridad de datos PCI DSS. En Apache Ignite, la funcionalidad básica de TDE (fase 1) se implementó en la versión 2.7. En la versión actual, se implementó la segunda fase de TDE: la rotación de la clave maestra (las claves de caché almacenadas en el disco están encriptadas con la clave maestra). La tercera fase de TDE (rotación de claves de caché) se implementará en la próxima versión.



Puede encontrar información más detallada sobre la rotación de la llave maestra en la documentación oficial .



Herramientas para interrumpir las tareas y solicitudes de los usuarios



Las versiones anteriores de Ignite no tenían un mecanismo coherente para interrumpir las tareas del usuario y las solicitudes del administrador. Los usuarios tenían la opción de cancelar sus tareas y solicitudes. Para los administradores, estaban disponibles herramientas separadas que no se correlacionaban entre sí (por ejemplo, era posible interrumpir transacciones por lista, filtro, a través de JMX o la utilidad control.sh, y "matar" una consulta SQL usando un comando SQL KILL QUERY). En la versión actual, el administrador tiene la capacidad de interrumpir



  • varios tipos de consultas (SQL, escaneo, continuo),
  • actas,
  • calcular tareas,
  • Ignite servicios,


utilizando una interfaz unificada.



Todos estos tipos de tareas y solicitudes pueden interrumpirse mediante cualquiera de los siguientes métodos:



  • la utilidad control.sh;
  • a través de JMX;
  • Comando SQL.


Para obtener más información sobre cómo interrumpir las tareas y solicitudes de los usuarios, consulte la documentación oficial .



Almacenamiento en caché del lado de la plataforma (.NET)



En Ignite.NET, se ha agregado la capacidad de usar una capa de almacenamiento en caché adicional en el lado de la plataforma .NET. Los datos en la memoria .NET en esta capa se almacenan en forma deserializada, por lo que puede leer los datos ya almacenados en caché sin llamadas JNI ni deserialización adicionales. Esto aumenta significativamente la velocidad de las lecturas no transaccionales.



Para obtener más información sobre el almacenamiento en caché del lado de la plataforma, consulte la documentación oficial .



Conexión de nodos de cliente a nodos de servidor a través de NAT



En Ignite 2.9.0 apareció un modo de interacción de red, en el que las conexiones entre el cliente "fat" y el servidor se inician solo en el lado del cliente (el servidor no inicia las conexiones con el cliente, pero, si hay necesidad de interacción directa con el cliente, le pide al cliente que se conecte a él a través de la conexiones de cliente a otros servidores). Este modo de operación permite el uso de configuraciones de clúster en las que NAT se encuentra entre los nodos del cliente y del servidor (por ejemplo, cuando los clientes se ejecutan en un entorno virtual).



Puede encontrar información más detallada sobre la conexión de nodos cliente a través de NAT en la documentación oficial .



Conclusión



Los anteriores son los cambios más significativos en la versión Apache Ignite 2.9.0. Pero la lista de cambios no se limita a ellos. Como de costumbre, hemos corregido muchos errores y realizado muchas otras mejoras útiles. Se puede encontrar una lista completa de cambios en las notas de la versión .



All Articles