>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

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

Perché la NSA ha creato il proprio HBase e come funziona Apache Accumulo

Apache Accumulo

Quando hai bisogno di archiviare terabyte di dati in modo distribuito, gli sviluppatori Java di solito pensano a Cassandra o Apache HBase. Pochi sanno che HBase ha un parente più anziano con una caratteristica rara che lo rende adorato in progetti specifici.

Nel 2008, la National Security Agency degli Stati Uniti ha affrontato una sfida: doveva archiviare quantità colossali di informazioni ma concedere l'accesso a celle diverse della stessa tabella strettamente in base ai livelli di autorizzazione dei dipendenti. Le soluzioni NoSQL esistenti non potevano farlo. Di conseguenza, l'agenzia di intelligence ha scritto il proprio sistema di archiviazione e nel 2011 lo ha donato alla Apache Software Foundation. Il progetto è stato chiamato Apache Accumulo.

Sotto il cofano

Nel suo nucleo, Accumulo è un database distribuito key-value ordinato. È stato ispirato dal famoso paper di Google su BigTable.

I dati non vengono archiviati su un singolo disco. Come base, Accumulo utilizza Apache Hadoop HDFS per l'archiviazione fisica dei file e Apache ZooKeeper per la gestione dello stato del cluster e il coordinamento.

Se guardi la struttura della chiave in Accumulo, capirai come differisce dagli archivi semplici:

  • Row ID (identificatore di riga)
  • Column Family (famiglia di colonne)
  • Column Qualifier (qualificatore di colonna)
  • Column Visibility (etichetta di sicurezza)
  • Timestamp (timestamp)

È il quarto componente, Column Visibility, che risolve il problema per cui il progetto è stato creato fin dall'inizio.

Controllo di accesso a livello di cella

Nella maggior parte dei database, i permessi vengono concessi a livello di tabella o colonna. Nei casi estremi — righe individuali. In Accumulo, il contesto di sicurezza è incorporato direttamente in ogni cella.

Ogni record contiene un'etichetta come (ADMIN&SECRET)|TOP_SECRET. Quando un client invia una richiesta di lettura, passa i propri token di autorizzazione. Il server Accumulo filtra autonomamente il flusso di dati prima di inviarlo sulla rete. Se un utente non ha l'autorizzazione richiesta, non saprà nemmeno dell'esistenza di celle specifiche in una riga.

Questo approccio elimina la necessità di scrivere logiche di filtraggio complesse nel codice dell'applicazione o di distribuire decine di tabelle separate per ogni livello di accesso.

Iteratori: calcoli lato server

Il secondo punto di forza di Accumulo sono gli iteratori. Questi sono plugin Java lato server incorporati nella catena di scansione e compattazione dei dati.

Gli iteratori vengono eseguiti direttamente sui nodi di archiviazione (Tablet Server). Eseguono diverse attività contemporaneamente:

  1. Filtrare i dati in base a condizioni complesse prima di inviarli al client.
  2. Aggregare e trasformare i valori al volo.
  3. Pulire le versioni obsolete o i record eliminati durante la compattazione dei file in background.

Utilizzando gli iteratori, puoi far sì che il filtraggio analitico pesante avvenga proprio a livello di archiviazione. In questo modo, la rete non si intasa con gigabyte grezzi.

Come compilare ed eseguire

Il progetto è interamente scritto in Java. Viene compilato con Maven standard. Il comando per compilare il tarball è il seguente:

mvn package -DskipTests

L'archivio pronto apparirà in assemble/target/accumulo-<version>-bin.tar.gz.

Per lo sviluppo locale, puoi avviare un'istanza di test, ma per un'operatività completa dovrai configurare un cluster HDFS funzionante e ZooKeeper. Dovrai allocare le risorse e configurare correttamente le impostazioni, poiché il sistema è progettato per un ambiente distribuito.

Dove si rivela utile

Non ha senso distribuire Accumulo per un semplice progetto personale. Ma il sistema mostra il suo lato migliore nei seguenti scenari:

  • Servizi multi-tenant. Quando un database archivia dati di diversi reparti o client con permessi sovrapposti.
  • Elaborazione di grafi e costruzione di indici di ricerca. Gli iteratori aiutano a intersecare rapidamente gli insiemi lato server.
  • Archiviazione di log ed eventi di telemetria. Quando le scritture arrivano come flusso continuo, ma le letture devono essere strettamente limitate per ruolo utente.

Vale la pena sforzo

Il progetto ha circa 11.000 stelle su GitHub, ma dietro la modesta popolarità si nasconde uno strumento maturo con release frequenti e supporto della Apache Foundation.

Se il tuo sistema non ha bisogno di etichette di sicurezza a livello di cella individuale o di elaborazioni lato server specifiche tramite iteratori, è più facile scegliere HBase o Cassandra. Hanno comunità più grandi e un'integrazione più semplice con i framework popolari. Tuttavia, se la sicurezza dei dati a livello di cella è una priorità assoluta, non ci sono praticamente alternative ad Accumulo.

Progetti correlati