>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Java

Waarom de NSA zijn eigen HBase bouwde en hoe Apache Accumulo werkt

Apache Accumulo

Wanneer je terabytes aan data gedistribueerd moet opslaan, denken Java-ontwikkelaars meestal aan Cassandra of Apache HBase. Weinig mensen weten dat HBase een oudere verwant heeft met een zeldzame functie die het geliefd maakt in specifieke projecten.

In 2008 stond de Amerikaanse National Security Agency voor een uitdaging: ze moesten enorme hoeveelheden informatie opslaan, maar toegang verlenen tot verschillende cellen van dezelfde tabel strikt op basis van het autorisatieniveau van medewerkers. Bestaande NoSQL-oplossingen konden dit niet. Als gevolg daarvan schreef het inlichtingenbureau zijn eigen opslagsysteem, en in 2011 schonk het het aan de Apache Software Foundation. Het project werd Apache Accumulo genoemd.

Onder de motorkap

In de kern is Accumulo een gesorteerde gedistribueerde key-value database. Het werd geïnspireerd door hetzelfde bekende Google-paper over BigTable.

Data wordt niet op één schijf opgeslagen. Als basis gebruikt Accumulo Apache Hadoop HDFS voor fysieke bestandsopslag en Apache ZooKeeper voor clusterstatusbeheer en coördinatie.

Als je naar de sleutelstructuur in Accumulo kijkt, begrijp je hoe het verschilt van eenvoudige stores:

  • Row ID (rij-identifier)
  • Column Family (kolomfamilie)
  • Column Qualifier (kolomkwalificatie)
  • Column Visibility (beveiligingslabel)
  • Timestamp (tijdstempel)

Het is het vierde onderdeel, Column Visibility, dat het probleem oplost waarvoor het project oorspronkelijk werd gemaakt.

Toegang op celniveau

In de meeste databases worden machtigingen verleend op tabel- of kolomniveau. In extreme gevallen — individuele rijen. In Accumulo is de beveiligingscontext direct ingebed in elke cel.

Elke record bevat een label zoals (ADMIN&SECRET)|TOP_SECRET. Wanneer een client een leesaanvraag verzendt, geeft het zijn autorisatietokens door. De Accumulo-server filtert de datastroom zelf voordat deze over het netwerk wordt verzonden. Als een gebruiker niet over de vereiste autorisatie beschikt, zal hij zelfs niet weten dat specifieke cellen in een rij bestaan.

Deze aanpak elimineert de noodzaak om complexe filterlogica in applicatiecode te schrijven of tientallen aparte tabellen voor elk toegangsniveau te deployen.

Iterators: server-side berekeningen

Het tweede sterke punt van Accumulo zijn iterators. Dit zijn server-side Java-plugins die zijn ingebed in de datascan- en compactieketen.

Iterators draaien direct op opslagnodes (Tablet Servers). Ze voeren tegelijkertijd verschillende taken uit:

  1. Filter data op complexe condities voordat het naar de client wordt verzonden.
  2. Agregeer en transformeer waarden on the fly.
  3. Ruim verouderde versies of verwijderde records op tijdens achtergrondbestandscompactie.

Met iterators kun je zware analytische filtering laten plaatsvinden right op de opslaglaag. Zo wordt het netwerk niet verstopt met ruwe gigabytes.

Hoe te bouwen en uit te voeren

Het project is volledig geschreven in Java. Het wordt gebouwd met standaard Maven. Het commando om de tarball te bouwen ziet er zo uit:

mvn package -DskipTests

Het klaar archief verschijnt op assemble/target/accumulo-<version>-bin.tar.gz.

Voor lokale ontwikkeling kun je een testinstantie opstarten, maar voor volwaardige operatie moet je een werkend HDFS-cluster en ZooKeeper opzetten. Je moet resources toewijzen en de instellingen correct configureren, aangezien het systeem ontworpen is voor een gedistribueerde omgeving.

Waar het van pas komt

Er is geen punt bij het deployen van Accumulo voor een eenvoudig pet project. Maar het systeem toont zijn beste kant in de volgende scenario's:

  • Multi-tenant services. Wanneer één database data opslaat van verschillende afdelingen of klanten met overlappende machtigingen.
  • Grafiekverwerking en zoekindexbouw. Iterators helpen om snel sets te intersecteren aan de serverkant.
  • Logs en telemetry events opslaan. Wanneer writes als een continue stroom binnenkomen, maar reads strikt beperkt moeten worden door gebruikersrollen.

Is het de moeite waard

Het project heeft ongeveer 11.000 sterren op GitHub, maar achter de bescheiden populariteit schuilt een volwassen tool met frequente releases en Apache Foundation-ondersteuning.

Als je systeem geen beveiligingslabels op individueel celniveau of specifieke server-side verwerking via iterators nodig heeft, is het gemakkelijker om voor HBase of Cassandra te kiezen. Ze hebben grotere communities en eenvoudigere integratie met populaire frameworks. Echter, als datasbeveiliging op celniveau een topprioriteit is, zijn er praktisch geen alternatieven voor Accumulo.

Gerelateerde projecten