>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Java

Por que a NSA criou seu próprio HBase e como o Apache Accumulo funciona

Apache Accumulo

Quando você precisa armazenar terabytes de dados de forma distribuída, desenvolvedores Java geralmente pensam em Cassandra ou Apache HBase. Poucas pessoas sabem que o HBase tem um parente mais antigo com um recurso raro que o torna querido em projetos específicos.

Em 2008, a Agência de Segurança Nacional dos EUA enfrentou um desafio: precisavam armazenar quantidades colossais de informações, mas conceder acesso a diferentes células da mesma tabela estritamente com base nos níveis de autorização dos funcionários. As soluções NoSQL existentes não conseguiam fazer isso. Como resultado, a agência de inteligência escreveu seu próprio sistema de armazenamento e, em 2011, doou-o para a Apache Software Foundation. O projeto foi nomeado Apache Accumulo.

Por baixo do capô

Em seu núcleo, o Accumulo é um banco de dados distribuído ordenado de chave-valor. Ele foi inspirado pelo mesmo artigo bem conhecido do Google sobre BigTable.

Os dados não são armazenados em um único disco. Como base, o Accumulo usa o Apache Hadoop HDFS para armazenamento físico de arquivos e o Apache ZooKeeper para gerenciamento de estado do cluster e coordenação.

Se você olhar a estrutura de chave no Accumulo, entenderá como ele difere de armazenamentos simples:

  • Row ID (identificador de linha)
  • Column Family (família de colunas)
  • Column Qualifier (qualificador de coluna)
  • Column Visibility (rótulo de segurança)
  • Timestamp (timestamp)

É o quarto componente, Column Visibility, que resolve o problema para o qual o projeto foi criado em primeiro lugar.

Controle de acesso em nível de célula

Na maioria dos bancos de dados, as permissões são concedidas no nível da tabela ou da coluna. Em casos extremos — linhas individuais. No Accumulo, o contexto de segurança é incorporado diretamente em cada célula.

Cada registro contém um rótulo como (ADMIN&SECRET)|TOP_SECRET. Quando um cliente envia uma solicitação de leitura, ele passa seus tokens de autorização. O servidor Accumulo filtra o fluxo de dados em si mesmo antes de enviá-lo pela rede. Se um usuário não tiver a autorização necessária, ele nem saberá da existência de células específicas em uma linha.

Essa abordagem elimina a necessidade de escrever lógica de filtragem complexa no código da aplicação ou implantar dezenas de tabelas separadas para cada nível de acesso.

Iteradores: Computações do lado do servidor

O segundo ponto forte do Accumulo são os iteradores. Esses são plugins Java do lado do servidor que são incorporados na cadeia de varredura e compactação de dados.

Os iteradores são executados diretamente nos nós de armazenamento (Tablet Servers). Eles executam várias tarefas ao mesmo tempo:

  1. Filtrar dados por condições complexas antes de enviá-los ao cliente.
  2. Agregar e transformar valores em tempo real.
  3. Limpar versões obsoletas ou registros excluídos durante a compactação de arquivos em segundo plano.

Usando iteradores, você pode fazer filtragem analítica pesada acontecer diretamente na camada de armazenamento. Dessa forma, a rede não fica sobrecarregada com gigabytes brutos.

Como compilar e executar

O projeto é inteiramente escrito em Java. Ele é compilado com Maven padrão. O comando para compilar o tarball fica assim:

mvn package -DskipTests

O arquivo compactado pronto aparecerá em assemble/target/accumulo-<version>-bin.tar.gz.

Para desenvolvimento local, você pode iniciar uma instância de teste, mas para operação completa, você precisará configurar um cluster HDFS funcional e ZooKeeper. Você precisará alocar recursos e configurar as definições corretamente, já que o sistema é projetado para um ambiente distribuído.

Onde isso é útil

Não faz sentido implantar o Accumulo para um projeto pessoal simples. Mas o sistema mostra seu melhor lado nos seguintes cenários:

  • Serviços multi-inquilino. Quando um banco de dados armazena dados de diferentes departamentos ou clientes com permissões sobrepostas.
  • Processamento de grafos e construção de índices de busca. Iteradores ajudam a intersectar conjuntos rapidamente no lado do servidor.
  • Armazenamento de logs e eventos de telemetria. Quando as gravações vêm como um fluxo contínuo, mas as leituras devem ser estritamente restritas por funções de usuário.

Vale a pena o esforço

O projeto tem cerca de 11.000 estrelas no GitHub, mas por trás da popularidade modesta está uma ferramenta madura com lançamentos frequentes e suporte da Apache Foundation.

Se o seu sistema não precisa de rótulos de segurança no nível de células individuais ou processamento específico do lado do servidor através de iteradores, é mais fácil escolher HBase ou Cassandra. Eles têm comunidades maiores e integração mais simples com frameworks populares. No entanto, se a segurança de dados no nível de células é uma prioridade máxima, praticamente não há alternativas ao Accumulo.

Projetos relacionados