>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Java

Pourquoi la NSA a créé son propre HBase et comment fonctionne Apache Accumulo

Apache Accumulo

Lorsque vous devez stocker des téraoctets de données de manière distribuée, les développeurs Java pensent généralement à Cassandra ou Apache HBase. Peu de gens savent qu'HBase a un aîné méconnu avec une fonctionnalité rare qui le rend apprécié dans certains projets.

En 2008, l'Agence nationale de sécurité américaine (NSA) a fait face à un défi : elle devait stocker des quantités colossales d'informations tout en accordant l'accès aux différentes cellules d'une même table strictement en fonction des niveaux d'habilitation des employés. Les solutions NoSQL existantes ne pouvaient pas répondre à ce besoin. Par conséquent, l'agence de renseignement a écrit son propre système de stockage, et en 2011, elle l'a donate à la Apache Software Foundation. Le projet a été nommé Apache Accumulo.

Sous le capot

En son cœur, Accumulo est une base de données clé-valeur distribuée et triée. Il a été inspiré par le célèbre article de Google sur BigTable.

Les données ne sont pas stockées sur un seul disque. Comme base, Accumulo utilise Apache Hadoop HDFS pour le stockage physique des fichiers et Apache ZooKeeper pour la gestion de l'état du cluster et la coordination.

Si vous examinez la structure de clé dans Accumulo, vous comprendrez en quoi il diffère des magasins simples :

  • Row ID (identifiant de ligne)
  • Column Family (famille de colonnes)
  • Column Qualifier (qualificateur de colonne)
  • Column Visibility (étiquette de sécurité)
  • Timestamp (horodatage)

C'est le quatrième composant, Column Visibility, qui résout le problème pour lequel le projet a été créé en premier lieu.

Contrôle d'accès au niveau des cellules

Dans la plupart des bases de données, les permissions sont accordées au niveau de la table ou de la colonne. Dans les cas extrêmes — au niveau des lignes individuelles. Dans Accumulo, le contexte de sécurité est intégré directement dans chaque cellule.

Chaque enregistrement contient une étiquette comme (ADMIN&SECRET)|TOP_SECRET. Lorsqu'un client envoie une requête de lecture, il transmet ses jetons d'autorisation. Le serveur Accumulo filtre lui-même le flux de données avant de l'envoyer sur le réseau. Si un utilisateur n'a pas l'habilitation requise, il ne connaîtra même pas l'existence de cellules spécifiques dans une ligne.

Cette approche élimine la nécessité d'écrire une logique de filtrage complexe dans le code de l'application ou de déployer des dizaines de tables séparées pour chaque niveau d'accès.

Itérateurs : calculs côté serveur

Le deuxième point fort d'Accumulo est ses itérateurs. Ce sont des plugins Java côté serveur intégrés dans la chaîne de parcours et de compaction des données.

Les itérateurs s'exécutent directement sur les nœuds de stockage (Tablet Servers). Ils effectuent plusieurs tâches à la fois :

  1. Filtrer les données selon des conditions complexes avant de les envoyer au client.
  2. Agréger et transformer les valeurs à la volée.
  3. Nettoyer les versions obsolètes ou les enregistrements supprimés lors de la compaction des fichiers en arrière-plan.

En utilisant des itérateurs, vous pouvez effectuer un filtrage analytique lourd directement au niveau de la couche de stockage. Ainsi, le réseau n'est pas encombré de gigaoctets de données brutes.

Comment compiler et exécuter

Le projet est entièrement écrit en Java. Il est compilé avec Maven standard. La commande pour créer le tarball ressemble à ceci :

mvn package -DskipTests

L'archive prête apparaîtra dans assemble/target/accumulo-<version>-bin.tar.gz.

Pour le développement local, vous pouvez démarrer une instance de test, mais pour un fonctionnement complet, vous devrez configurer un cluster HDFS fonctionnel et ZooKeeper. Vous devrez allouer des ressources et configurer les paramètres correctement, car le système est conçu pour un environnement distribué.

Où cela s'avère utile

Il n'y a aucun intérêt à déployer Accumulo pour un simple projet personnel. Mais le système montre ses meilleures capacités dans les scénarios suivants :

  • Services multi-locataires. Lorsqu'une même base de données stocke des données de différents départements ou clients avec des permissions qui se chevauchent.
  • Traitement de graphes et construction d'index de recherche. Les itérateurs aident à intersecter rapidement des ensembles côté serveur.
  • Stockage de logs et d'événements de télémétrie. Lorsque les écritures arrivent sous forme de flux continu, mais que les lectures doivent être strictement restreintes par rôle utilisateur.

Cela en vaut-il la peine

Le projet compte environ 11 000 étoiles sur GitHub, mais derrière cette popularité modeste se cache un outil mature avec des versions fréquentes et le soutien de la Fondation Apache.

Si votre système n'a pas besoin d'étiquettes de sécurité au niveau des cellules individuelles ou de traitement spécifique côté serveur via des itérateurs, il est plus simple de choisir HBase ou Cassandra. Ils ont des communautés plus importantes et une intégration plus simple avec les frameworks populaires. Cependant, si la sécurité des données au niveau des cellules est une priorité absolue, il n'y a practically aucune alternative à Accumulo.

Projets similaires