>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
Java

Warum die NSA ihr eigenes HBase gebaut hat und wie Apache Accumulo funktioniert

Apache Accumulo

Wenn Sie Terabytes an Daten verteilt speichern müssen, denken Java-Entwickler normalerweise an Cassandra oder Apache HBase. Nur wenige wissen, dass HBase ein älteres Verwandtschaftsverhältnis mit einer seltenen Funktion hat, das es in bestimmten Projekten beliebt macht.

Im Jahr 2008 stand die US-amerikanische National Security Agency vor einer Herausforderung: Sie musste gewaltige Datenmengen speichern, aber den Zugriff auf verschiedene Zellen derselben Tabelle streng nach Mitarbeiter-Freigabestufen gewähren. Existierende NoSQL-Lösungen konnten dies nicht leisten. Infolgedessen schrieb die Geheimdienstbehörde ihr eigenes Speichersystem und spendete es 2011 der Apache Software Foundation. Das Projekt wurde Apache Accumulo genannt.

Unter der Haube

Im Kern ist Accumulo eine sortierte, verteilte Key-Value-Datenbank. Es wurde durch dasselbe bekannte Google-Paper über BigTable inspiriert.

Daten werden nicht auf einer einzelnen Festplatte gespeichert. Als Grundlage verwendet Accumulo Apache Hadoop HDFS für die physische Dateispeicherung und Apache ZooKeeper für die Verwaltung des Cluster-Zustands und die Koordination.

Wenn Sie sich die Schlüsselstruktur in Accumulo ansehen, werden Sie verstehen, wie sie sich von einfachen Speichern unterscheidet:

  • Row ID (Zeilen-ID)
  • Column Family (Spaltenfamilie)
  • Column Qualifier (Spaltenqualifizierer)
  • Column Visibility (Sicherheitskennzeichnung)
  • Timestamp (Zeitstempel)

Es ist die vierte Komponente, Column Visibility, die das Problem löst, für das das Projekt ursprünglich entwickelt wurde.

Zugriffskontrolle auf Zellebene

In den meisten Datenbanken werden Berechtigungen auf Tabellen- oder Spaltenebene gewährt. In extremen Fällen — einzelne Zeilen. In Accumulo ist der Sicherheitskontext direkt in jede Zelle eingebettet.

Jeder Datensatz enthält eine Kennzeichnung wie (ADMIN&SECRET)|TOP_SECRET. Wenn ein Client eine Leseanfrage sendet, übergibt er seine Autorisierungstokens. Der Accumulo-Server filtert den Datenstrom selbst, bevor er ihn über das Netzwerk sendet. Wenn ein Benutzer nicht über die erforderliche Freigabe verfügt, wird er nicht einmal von der Existenz bestimmter Zellen in einer Zeile erfahren.

Dieser Ansatz eliminiert die Notwendigkeit, komplexe Filterlogik im Anwendungscode zu schreiben oder Dutzende separater Tabellen für jede Zugriffsebene bereitzustellen.

Iteratoren: Serverseitige Berechnungen

Die zweite große Stärke von Accumulo sind Iteratoren. Dies sind serverseitige Java-Plugins, die in die Daten-Scan- und Kompaktierungskette eingebettet sind.

Iteratoren werden direkt auf Speicherknoten (Tablet-Servern) ausgeführt. Sie führen gleichzeitig mehrere Aufgaben aus:

  1. Daten nach komplexen Bedingungen filtern, bevor sie an den Client gesendet werden.
  2. Werte bei Bedarf aggregieren und transformieren.
  3. Veraltete Versionen oder gelöschte Datensätze während der Hintergrund-Dateikompaktierung bereinigen.

Mit Iteratoren können Sie umfangreiche analytische Filterung direkt auf der Speicherschicht durchführen. So wird das Netzwerk nicht mit rohen Gigabytes überlastet.

Wie man es baut und ausführt

Das Projekt ist vollständig in Java geschrieben. Es wird mit Standard-Maven gebaut. Der Befehl zum Erstellen des Tarballs sieht folgendermaßen aus:

mvn package -DskipTests

Das fertige Archiv erscheint unter assemble/target/accumulo-<version>-bin.tar.gz.

Für die lokale Entwicklung können Sie eine Testinstanz starten, aber für einen vollwertigen Betrieb benötigen Sie einen funktionierenden HDFS-Cluster und ZooKeeper. Sie müssen Ressourcen zuweisen und die Einstellungen korrekt konfigurieren, da das System für eine verteilte Umgebung ausgelegt ist.

Wo es zum Einsatz kommt

Es macht keinen Sinn, Accumulo für ein einfaches Hobbyprojekt bereitzustellen. Aber das System zeigt seine beste Seite in folgenden Szenarien:

  • Multi-Tenant-Services. Wenn eine Datenbank Daten von verschiedenen Abteilungen oder Kunden mit überlappenden Berechtigungen speichert.
  • Graph-Verarbeitung und Search-Index-Erstellung. Iteratoren helfen, Mengen serverseitig schnell zu schneiden.
  • Speicherung von Logs und Telemetrie-Events. Wenn Schreibzugriffe als kontinuierlicher Stream erfolgen, aber Lesezugriffe streng nach Benutzerrollen eingeschränkt werden müssen.

Lohnt sich der Aufwand

Das Projekt hat etwa 11.000 Sterne auf GitHub, aber hinter der bescheidenen Popularität verbirgt sich ein ausgereiftes Tool mit häufigen Releases und Unterstützung durch die Apache Foundation.

Wenn Ihr System keine Sicherheitskennzeichnungen auf individueller Zellebene oder spezifische serverseitige Verarbeitung durch Iteratoren benötigt, ist es einfacher, sich für HBase oder Cassandra zu entscheiden. Sie haben größere Communities und eine einfachere Integration mit beliebten Frameworks. Wenn jedoch Datensicherheit auf Zellebene oberste Priorität hat, gibt es praktisch keine Alternativen zu Accumulo.

Ähnliche Projekte