Apache Ignite 2.9.0 - Quoi de neuf?

Apache Ignite est une base de données distribuée open source hautes performances conçue pour le stockage et le traitement distribué de grandes quantités de données sur un cluster de nœuds. Chez Sberbank, nous l'utilisons activement et nous avons une équipe qui développe ce produit. Le 23 octobre 2020, une nouvelle version d'Apache Ignite 2.9.0 a été publiée. En tant que responsable de cette version au nom de toute l'équipe de développement d'Apache Ignite, je souhaite partager des informations sur les principales innovations.



  • Instantanés (sauvegarde)
  • Tracé
  • Nouvelles fonctionnalités pour les clients légers
  • Mode de fonctionnement du cluster "Lecture seule"
  • Exécuter du code personnalisé dans le bac à sable
  • Chiffrement transparent des données: rotation de la clé principale
  • Outils pour interrompre les tâches et les demandes des utilisateurs
  • Mise en cache côté plateforme (.NET)
  • Connexion des nœuds clients aux nœuds de serveur via NAT




Instantanés (sauvegarde)



Dans Ignite 2.9.0, il est devenu possible de créer une copie de sauvegarde de tous les caches stockés sur le disque (c'est-à-dire les caches fonctionnant en mode Ignite Native Persistence ) à partir de l'ensemble du cluster. Les instantanés peuvent être créés en ligne, sur un cluster actif avec une charge utilisateur. Cela crée une copie complètement cohérente de toutes les données du cluster.



Vous pouvez commencer à créer une sauvegarde de l'une des manières suivantes:



  • à l' aide d' un utilitaire de ligne de commande control.sh: control.sh --snapshot create <snapshot name>;
  • Opération JMX: MBean group="Snapshot", name=SnapshotMXBeanImpl, createSnapshot(<snapshot name>);
  • l'API par Java: Ignite.snapshot().createSnapshot("<snapshot name>").


<snapshot name>est le nom unique de l'instantané.



Une fois la formation du snapshot terminée dans le répertoire work/snapshots/<snapshot name>(avec les paramètres par défaut) de chaque nœud, la structure du stockage de fichiers de ce nœud au moment du démarrage du snapshot sera recréée. La structure de fichiers générée peut être utilisée à l'avenir pour restaurer à partir d'une copie de sauvegarde en remplaçant les fichiers par des données de noeud par des fichiers du répertoire d'instantanés.



Vous pouvez trouver des informations plus détaillées sur l'utilisation des instantanés dans la documentation officielle .



Tracé



Le système de surveillance Ignite continue de s'améliorer et l'une des innovations importantes de la version 2.9 est le sous-système de traçage. Le traçage vous permet d'obtenir des informations utiles à la fois pour le débogage au stade du développement et pour l'analyse des incidents. À l'aide du traçage, il est devenu possible de collecter des informations de bas niveau distribuées sur la progression de diverses tâches exécutées dans le cluster et d'utiliser ces informations pour diagnostiquer les problèmes de performances. Une trace montrant le chemin d'une tâche dans le système est formée sous la forme d'un arbre, dont chaque niveau suivant donne des informations plus détaillées que le précédent.



Dans Ignite 2.9.0, le traçage couvre les composants internes suivants:



  • Messages de découverte;
  • Messages de communication
  • Processus d'échange;
  • transactions.


Pour afficher les traces, elles doivent être exportées vers un système externe. À ces fins, Ignite utilise la bibliothèque OpenCensus, qui, prête à l'emploi, fournit plusieurs exportateurs vers divers systèmes (par exemple, dans Zipkin).



Vous pouvez limiter la quantité d'informations exportées en définissant un ou plusieurs des composants ci-dessus comme champ d'application et en définissant la fréquence d'échantillonnage (les paramètres peuvent être modifiés au moment de l'exécution).



Vous pouvez trouver des informations plus détaillées sur le traçage dans la documentation officielle .



Nouvelles fonctionnalités pour les clients légers



Les clients légers java et .NET disposent désormais de la fonctionnalité Ignite qui n'était auparavant disponible que dans le client lourd.



La possibilité d'utiliser:



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


De plus, le client léger .NET a reçu la fonction Automatic Server Node Discovery, qui est activée en conjonction avec la fonctionnalité de reconnaissance de partition. Lors de l'utilisation de la "reconnaissance de partition", le client établit une connexion non pas avec un nœud de serveur, mais avec plusieurs à la fois, afin, si possible, d'envoyer une requête au nœud qui est le principal pour les données de cette requête. Dans le même temps, la découverte automatique des nœuds de cluster permet de ne pas répertorier toutes les adresses des nœuds de cluster dans la configuration client. Il suffit que le client puisse se connecter à au moins un hôte en direct en utilisant les adresses répertoriées dans la configuration. Le client recevra les adresses des nœuds restants du cluster.



Pour plus d'informations sur l'utilisation des nouvelles fonctionnalités, consultez les sous-sections correspondantes de la documentation du client léger java et du client léger .NET .



Mode de fonctionnement du cluster "Lecture seule"



Avant la version 2.9.0, Ignite n'avait que deux états du cluster: le cluster pouvait être soit inactif (les nœuds étaient collectés dans une topologie, mais toute action avec des caches était interdite), soit actif (toutes les actions étaient autorisées). Dans la version 2.9.0, un nouvel état de cluster a été ajouté - "lecture seule". Il sera utile pour effectuer certains travaux de maintenance (comme la vérification de l'intégrité des données).



Vous pouvez trouver des informations plus détaillées sur les états du cluster dans la documentation officielle .



Exécuter du code personnalisé dans le bac à sable



Ignite peut exécuter du code personnalisé (comme des tâches de calcul, des écouteurs d'événements, divers filtres) sur les nœuds de serveur. Un tel code a été exécuté avec les mêmes droits que le code système Ignite et toute l'API Java était disponible sans restrictions. Un code potentiellement dangereux pourrait perturber les performances du cluster (par exemple, supprimer les fichiers de données Ignite, arrêter la JVM, etc.).



Dans la version 2.9.0, il est devenu possible d'exécuter un tel code dans le "sandbox" avec les droits qui étaient explicitement attribués au sujet d'accès qui a demandé l'exécution de ce code (par exemple, un nœud client). Les droits attribués à un accesseur sont une collection d'objets de classe java.security.Permissionqui sont vérifiés par java avant d'effectuer une action.



Pour qu'Ignite Sandbox fonctionne, deux composants doivent être installés et activés:



  • Gestionnaire de sécurité Java. Responsable de l'autorisation des sujets lors des appels aux bibliothèques système java. Désactivé par défaut;
  • Allumez le processeur de sécurité. Responsable de l'authentification des sujets d'accès. "Out of the box" avec Ignite n'est pas fourni, nécessite une implémentation indépendante et une connexion à l'aide d'un plugin.


Vous pouvez trouver des informations plus détaillées sur Ignite Sandbox dans la documentation officielle .



Chiffrement transparent des données: rotation de la clé principale



Le cryptage transparent des données (TDE) est une fonctionnalité qui vous permet de ne pas stocker de données sur disque en texte clair. Le chiffrement des données sur un disque à l'aide d'un SGBD est requis, par exemple, pour la certification de sécurité des données PCI DSS. Dans Apache Ignite, la fonctionnalité TDE de base (Phase 1) a été implémentée dans la version 2.7. Dans la version actuelle, la deuxième phase de TDE a été implémentée - la rotation de la clé principale (les clés de cache stockées sur le disque sont chiffrées avec la clé principale). La troisième phase de TDE (rotation des clés de cache) sera implémentée dans la prochaine version.



Vous pouvez trouver des informations plus détaillées sur la rotation des clés principales dans la documentation officielle .



Outils pour interrompre les tâches et les demandes des utilisateurs



Dans les versions précédentes d'Ignite, il n'existait pas de mécanisme cohérent pour interrompre les tâches utilisateur et les demandes de l'administrateur. Les utilisateurs avaient la possibilité d'annuler leurs tâches et demandes. Pour les administrateurs, séparés, nullement corrélés les uns aux autres, des outils étaient disponibles (par exemple, il était possible d'annuler les transactions par liste, filtrer, via JMX ou l'utilitaire control.sh, et de «tuer» une requête SQL à l'aide d'une commande SQL KILL QUERY). Dans la version actuelle, l'administrateur a la possibilité d'interrompre



  • différents types de requêtes (SQL, scan, continu),
  • transactions,
  • calculer des tâches,
  • Ignite les services,


en utilisant une interface unifiée.



Tous ces types de tâches et de demandes peuvent être interrompus par l'une des méthodes suivantes:



  • l'utilitaire control.sh;
  • via JMX;
  • Commande SQL.


Pour plus d'informations sur l'interruption des tâches et des demandes des utilisateurs, consultez la documentation officielle .



Mise en cache côté plateforme (.NET)



Ignite.NET ajoute la possibilité d'utiliser une couche de mise en cache supplémentaire du côté .NET. Les données de la mémoire .NET de cette couche sont stockées sous une forme désérialisée, vous pouvez donc lire les données déjà mises en cache sans appel JNI supplémentaire et désérialisation. Cela augmente considérablement la vitesse des lectures non transactionnelles.



Pour plus d'informations sur la mise en cache côté plateforme, consultez la documentation officielle .



Connexion des nœuds clients aux nœuds de serveur via NAT



Dans Ignite 2.9.0, un mode d'interaction réseau est apparu, dans lequel les connexions entre le client "fat" et le serveur sont initiées uniquement côté client (le serveur n'initie pas les connexions avec le client, mais, s'il est nécessaire d'interagir directement avec le client, il demande au client de s'y connecter via le déjà établi connexions client à d'autres serveurs). Ce mode de fonctionnement permet l'utilisation de configurations de cluster dans lesquelles NAT est situé entre les nœuds client et serveur (par exemple, lorsque les clients s'exécutent dans un environnement virtuel).



Vous pouvez trouver des informations plus détaillées sur la connexion des nœuds clients via NAT dans la documentation officielle .



Conclusion



Les changements ci-dessus sont les plus importants dans la version Apache Ignite 2.9.0. Mais la liste des changements ne se limite pas à eux. Comme d'habitude, nous avons corrigé de nombreux bugs et apporté de nombreuses autres améliorations utiles. Une liste complète des modifications se trouve dans les notes de publication .



All Articles