Lancez le traitement du Big Data avec Apache Ignite

Apache Ignite est une plate-forme informatique en mémoire qui peut être insérée de manière transparente entre la couche d'application et la couche de données d'un utilisateur. Apache Ignite charge les données de la couche de stockage sur disque existante dans la RAM, améliorant les performances jusqu'à six ordres de grandeur (1 million de fois).

La capacité des données en mémoire peut être facilement mise à l'échelle pour gérer des pétaoctets de données simplement en ajoutant plus de nœuds au cluster. De plus, les transactions ACID et les requêtes SQL sont prises en charge. Ignite offre des performances, une évolutivité et des capacités complètes bien au-delà de ce que les bases de données en mémoire traditionnelles, les grilles de données en mémoire et d'autres solutions ponctuelles en mémoire peuvent offrir par elles-mêmes.

Apache Ignite ne demande pas aux utilisateurs d'extraire et de remplacer leurs bases de données existantes. Il fonctionne avec les magasins de données SGBDR, NoSQL et Hadoop. Apache Ignite permet des transactions hautes performances, un streaming en temps réel et des analyses rapides dans une seule couche complète d'accès aux données et de traitement. Il utilise une architecture distribuée massivement parallèle sur du matériel abordable et de base pour alimenter des applications existantes ou nouvelles. Apache Ignite peut s'exécuter sur site, sur des plates-formes cloud telles que AWS et Microsoft Azure, ou dans un environnement hybride.

L'API unifiée Apache Ignite prend en charge SQL, C ++, .Net, Java, Scala, Groovy, PHP et Node.js. L'API unifiée connecte les applications à l'échelle du cloud à plusieurs magasins de données contenant des données structurées, semi-structurées et non structurées. Il offre un environnement de données haute performance qui permet aux entreprises de traiter des transactions ACID complètes et de générer des informations précieuses à partir de requêtes en temps réel, interactives et par lots.

Les utilisateurs peuvent garder leur SGBDR existant en place et déployer Apache Ignite en tant que couche entre celui-ci et la couche application. Apache Ignite s'intègre automatiquement à Oracle, MySQL, Postgres, DB2, Microsoft SQL Server et d'autres SGBDR. Le système génère automatiquement le modèle de domaine d'application en fonction de la définition de schéma de la base de données sous-jacente, puis charge les données. Les bases de données en mémoire ne fournissent généralement qu'une interface SQL, tandis qu'Ignite prend en charge un groupe plus large de paradigmes d'accès et de traitement en plus de ANSI SQL. Apache Ignite prend en charge les magasins de clés / valeurs, l'accès SQL, MapReduce, le traitement HPC / MPP, le traitement de streaming / CEP, le clustering et l'accélération Hadoop dans une seule plate-forme informatique intégrée en mémoire.

GridGain Systems a fait don du code original d'Apache Ignite à l'Apache Software Foundation au cours du second semestre 2014. Apache Ignite est rapidement passé d'un projet en incubation à un projet Apache de haut niveau en 2015. Au deuxième trimestre de 2016, Apache Ignite a été téléchargé près de 200 000 fois. Il est utilisé par des organisations du monde entier.

Architecture

Apache Ignite est un middleware distribué basé sur JVM basé sur une implémentation de topologie de cluster homogène qui ne nécessite pas de nœuds serveur et client séparés. Tous les nœuds d'un cluster Ignite sont égaux et peuvent jouer n'importe quel rôle logique par exigence d'application d'exécution.

Une conception d'interface de fournisseur de services (SPI) est au cœur d'Apache Ignite. La conception basée sur SPI rend chaque composant interne d'Ignite entièrement personnalisable et enfichable. Cela permet une énorme configurabilité du système, avec une adaptabilité à toute infrastructure de serveur existante ou future.

Apache Ignite fournit également une prise en charge directe de la parallélisation des calculs distribués basés sur un traitement de type fork-join, MapReduce ou MPP. Ignite utilise largement les calculs parallèles distribués et ils sont entièrement exposés au niveau de l'API pour les fonctionnalités définies par l'utilisateur.

Principales caractéristiques

Grille de données en mémoire. Apache Ignite comprend une grille de données en mémoire qui gère la gestion distribuée des données en mémoire, y compris les transactions ACID, le basculement, l'équilibrage de charge avancé et une prise en charge étendue de SQL. La grille de données Ignite est un magasin de valeurs-clés en mémoire, distribué, basé sur des objets, transactionnel ACID. Contrairement aux systèmes de gestion de base de données traditionnels, qui utilisent le disque comme mécanisme de stockage principal, Ignite stocke les données en mémoire. En utilisant la mémoire plutôt que le disque, Apache Ignite est jusqu'à 1 million de fois plus rapide que les bases de données traditionnelles.

Prise en charge SQL. Apache Ignite prend en charge les requêtes conformes ANSI SQL-99 de forme libre sans pratiquement aucune limitation. Ignite peut utiliser n'importe quelle fonction, agrégation ou regroupement SQL et prend en charge les jointures SQL distribuées et non colocalisées et les jointures inter-cache. Ignite prend également en charge le concept de requêtes sur le terrain pour aider à minimiser la surcharge de réseau et de sérialisation.

Grille de calcul en mémoire. Apache Ignite comprend une grille de calcul qui permet le traitement parallèle en mémoire des tâches gourmandes en ressources processeur ou autres, telles que le traitement HPC traditionnel, MPP, fork-join et MapReduce. Un support est également fourni pour le traitement asynchrone Java ExecutorService standard.

Grille de service en mémoire. La grille de services Apache Ignite offre un contrôle complet sur les services déployés sur le cluster. Les utilisateurs peuvent contrôler le nombre d'instances de service à déployer sur chaque nœud de cluster, garantissant ainsi un déploiement et une tolérance aux pannes appropriés. La grille de services garantit la disponibilité continue de tous les services déployés en cas de défaillance des nœuds. Il prend également en charge le déploiement automatique de plusieurs instances d'un service, d'un service en tant que singleton et de services au démarrage du nœud.

Diffusion en mémoire. Le traitement de flux en mémoire s'adresse à une grande famille d'applications pour lesquelles les méthodes de traitement traditionnelles et le stockage sur disque, comme les bases de données sur disque ou les systèmes de fichiers, sont inadéquats. Ces applications repoussent les limites des infrastructures de traitement de données traditionnelles.

La prise en charge de la diffusion en continu permet aux utilisateurs d'interroger les fenêtres déroulantes des données entrantes. Cela permet aux utilisateurs de répondre à des questions telles que "Quels sont les 10 produits les plus populaires au cours de la dernière heure?" ou "Quel est le prix moyen d'une certaine catégorie de produits au cours des 12 dernières heures?"

Un autre cas d'utilisation courant du traitement de flux est la mise en pipeline d'un flux de travail d'événements distribués. À mesure que les événements arrivent dans le système à des taux élevés, le traitement des événements est divisé en plusieurs étapes, dont chacune doit être correctement acheminée dans un cluster pour traitement. Ces flux de travail d'événements personnalisables prennent en charge les applications de traitement d'événements complexes (CEP).

Accélération Hadoop en mémoire. L'Apache Ignite Accelerator pour Hadoop permet un traitement rapide des données dans les environnements Hadoop existants via les outils et la technologie qu'une organisation utilise déjà.

L'accélération Hadoop en mémoire Ignite est basée sur le premier système de fichiers en mémoire haute performance à double mode qui est 100% compatible avec Hadoop HDFS et sur une implémentation MapReduce optimisée en mémoire. Offrant des performances jusqu'à 100 fois plus rapides, le HDFS en mémoire et MapReduce en mémoire fournissent des extensions faciles à utiliser au HDFS sur disque et à MapReduce traditionnel. Cette fonctionnalité plug-and-play nécessite une intégration minimale ou nulle. Il fonctionne avec n'importe quelle version open source ou commerciale de Hadoop 1.x ou Hadoop 2.x, y compris Cloudera, Hortonworks, MapR, Apache, Intel et AWS. Le résultat est des performances jusqu'à 100 fois plus rapides pour les tâches MapReduce et Hive.

Système de fichiers en mémoire distribué. Une caractéristique unique d'Apache Ignite est le système de fichiers Ignite (IGFS), qui est une interface de système de fichiers pour les données en mémoire. IGFS offre des fonctionnalités similaires à Hadoop HDFS. Il inclut la possibilité de créer un système de fichiers entièrement fonctionnel en mémoire. IGFS est au cœur de l'accélérateur en mémoire Apache Ignite pour Hadoop.

Les données de chaque fichier sont réparties sur des blocs de données séparés et stockées dans le cache. Les données de chaque fichier sont accessibles avec une API de streaming Java standard. Pour chaque partie du fichier, un développeur peut calculer une affinité et traiter le contenu du fichier sur les nœuds correspondants pour éviter une mise en réseau inutile.

API unifiée. L'API unifiée Apache Ignite prend en charge une grande variété de protocoles communs permettant à la couche application d'accéder aux données. Les protocoles pris en charge incluent SQL, Java, C ++, .Net, PHP, MapReduce, Scala, Groovy et Node.js. Ignite prend en charge plusieurs protocoles de connectivité client aux clusters Ignite, notamment les clients natifs Ignite, REST / HTTP, SSL / TLS et Memcached.SQL.

Clustering avancé. Apache Ignite fournit l'une des technologies de clustering les plus sophistiquées sur les JVM. Les nœuds Ignite peuvent se découvrir automatiquement, ce qui permet de mettre à l'échelle le cluster en cas de besoin sans avoir à redémarrer l'ensemble du cluster. Les développeurs peuvent également profiter de la prise en charge du cloud hybride d'Ignite, qui permet aux utilisateurs d'établir des connexions entre des clouds privés et des clouds publics tels qu'AWS ou Microsoft Azure.

Caractéristiques supplémentaires. Apache Ignite fournit des fonctionnalités de messagerie hautes performances à l'échelle du cluster. Il permet aux utilisateurs d'échanger des données via des modèles de communication par publication-abonnement et direct point à point.

La fonctionnalité d'événements distribués dans Ignite permet aux applications de recevoir des notifications sur les événements de cache se produisant dans un environnement de grille distribuée. Les développeurs peuvent utiliser cette fonctionnalité pour être avertis de l'exécution de tâches distantes ou de toute modification des données de cache au sein du cluster. Les notifications d'événements peuvent être regroupées et envoyées par lots et à intervalles réguliers. Les notifications par lots aident à atteindre des performances de cache élevées et une faible latence.

Ignite permet à la plupart des structures de données du framework java.util.concurrent d'être utilisées de manière distribuée. Par exemple, vous pouvez ajouter à une file d'attente à deux extrémités (java.util.concurrent.BlockingDeque) sur un nœud et l'interroger à partir d'un autre nœud. Ou vous pourriez avoir un générateur de clé primaire distribué, qui garantirait l'unicité sur tous les nœuds.

Les structures de données distribuées Ignite incluent la prise en charge de ces API Java standard: mappe simultanée, files d'attente et ensembles distribués, AtomicLong, AtomicSequence, AtomicReference et CountDownLatch.

Intégrations clés

Apache Spark. Apache Spark est un moteur rapide et polyvalent pour le traitement de données à grande échelle. Ignite et Spark sont des solutions informatiques complémentaires en mémoire. Ils peuvent être utilisés ensemble dans de nombreux cas pour obtenir des performances et des fonctionnalités supérieures.

Apache Spark et Apache Ignite traitent des cas d'utilisation quelque peu différents et sont rarement en concurrence pour la même tâche. Le tableau ci-dessous présente certaines des principales différences.

 
  Apache Spark Apache Ignite
La conservation des données Charge les données à traiter à partir du stockage externe, généralement sur disque, et supprime les données une fois le traitement terminé. Pas de stockage de données. Fournit un magasin de valeurs-clés en mémoire distribué (cache distribué ou grille de données) avec des transactions ACID et des capacités d'interrogation SQL. Conserve les données en mémoire et peut écrire dans une base de données sous-jacente.
OLAP / OLTP Pour les données non transactionnelles en lecture seule, elles sont donc utilisées pour OLAP. Les ensembles de données distribués résilients Spark (RDD) ne prennent pas en charge la mutation sur place. Prend en charge les charges utiles non transactionnelles (OLAP), ainsi que les transactions entièrement compatibles ACID (OLTP).
Types de données Basé sur les RDD. Fonctionne uniquement sur les charges utiles basées sur les données. Prend entièrement en charge les charges utiles informatiques pures (HPC / MPP) qui peuvent être «sans données».

Apache Spark ne fournit pas de stockage partagé, donc les données de HDFS ou d'un autre stockage sur disque doivent être chargées dans Spark pour être traitées. L'état peut être transmis d'une tâche Spark à une tâche uniquement en enregistrant les données traitées dans le stockage externe. Ignite peut partager l'état Spark directement en mémoire, sans stocker l'état sur le disque.

L'une des principales intégrations pour Ignite et Spark est l'API Apache Ignite Shared RDD. Les RDD Ignite sont essentiellement des wrappers autour des caches Ignite qui peuvent être déployés directement à l'intérieur de l'exécution de travaux Spark. Les RDD Ignite peuvent également être utilisés avec le modèle de mise en cache, où les clusters Ignite sont déployés séparément de Spark, mais toujours en mémoire. Les données sont toujours accessibles à l'aide des API Spark RDD.

Spark prend en charge une syntaxe SQL assez riche, mais ne prend pas en charge l'indexation des données, il doit donc effectuer des analyses complètes tout le temps. Les requêtes Spark peuvent prendre quelques minutes, même sur des ensembles de données modérément petits. Ignite prend en charge les index SQL, ce qui entraîne des requêtes beaucoup plus rapides, donc l'utilisation de Spark avec Ignite peut accélérer Spark SQL plus de 1000 fois. L'ensemble de résultats renvoyé par les RDD partagés Ignite est également conforme à l'API Spark Dataframe, de sorte qu'il peut être analysé plus en détail à l'aide des dataframes Spark standard. Spark et Ignite s'intègrent de manière native à Apache YARN et Apache Mesos, il est donc plus facile de les utiliser ensemble.

Lorsque vous travaillez avec des fichiers au lieu de RDD, il est toujours possible de partager l'état entre les travaux Spark et les applications à l'aide du système de fichiers Ignite In-Memory (IGFS). IGFS implémente l'API Hadoop FileSystem et peut être déployé en tant que système de fichiers Hadoop natif, exactement comme HDFS. Ignite se connecte nativement à n'importe quel environnement Hadoop ou Spark. IGFS peut être utilisé sans changement de code en mode plug-and-play.

Apache Cassandra. Apache Cassandra peut servir de solution haute performance pour les requêtes structurées. Mais les données de Cassandra doivent être modélisées de telle sorte que chaque requête prédéfinie entraîne une extraction de ligne. Ainsi, vous devez savoir quelles requêtes seront nécessaires avant de modéliser les données.