>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Java

Por qué la NSA creó su propia HBase y cómo funciona Apache Accumulo

Apache Accumulo

Cuando necesitas almacenar terabytes de datos de forma distribuida, los desarrolladores Java suelen pensar en Cassandra o Apache HBase. Pocos saben que HBase tiene un pariente más antiguo con una característica poco común que lo hace querido en proyectos específicos.

En 2008, la Agencia de Seguridad Nacional de EE.UU. se enfrentó a un desafío: necesitaban almacenar cantidades colosales de información pero otorgar acceso a diferentes celdas de la misma tabla estrictamente según los niveles de autorización de los empleados. Las soluciones NoSQL existentes no podían hacer esto. Como resultado, la agencia de inteligencia escribió su propio sistema de almacenamiento, y en 2011 lo donó a la Apache Software Foundation. El proyecto se llamó Apache Accumulo.

Bajo el Capó

En su núcleo, Accumulo es una base de datos distribuida de pares clave-valor ordenada. Fue inspirado por el mismo conocido documento de Google sobre BigTable.

Los datos no se almacenan en un solo disco. Como base, Accumulo utiliza Apache Hadoop HDFS para el almacenamiento físico de archivos y Apache ZooKeeper para la gestión del estado del clúster y la coordinación.

Si miras la estructura de claves en Accumulo, entenderás cómo difiere de los almacenes simples:

  • Row ID (identificador de fila)
  • Column Family (familia de columnas)
  • Column Qualifier (calificador de columna)
  • Column Visibility (etiqueta de seguridad)
  • Timestamp (marca de tiempo)

Es el cuarto componente, Column Visibility, el que resuelve el problema para el cual el proyecto fue creado en primer lugar.

Control de Acceso a Nivel de Celda

En la mayoría de las bases de datos, los permisos se otorgan a nivel de tabla o columna. En casos extremos, filas individuales. En Accumulo, el contexto de seguridad está incrustado directamente en cada celda.

Cada registro contiene una etiqueta como (ADMIN&SECRET)|TOP_SECRET. Cuando un cliente envía una solicitud de lectura, pasa sus tokens de autorización. El servidor Accumulo filtra el flujo de datos en sí mismo antes de enviarlo por la red. Si un usuario no tiene la autorización requerida, ni siquiera sabrá de la existencia de celdas específicas en una fila.

Este enfoque elimina la necesidad de escribir lógica de filtrado compleja en el código de la aplicación o implementar docenas de tablas separadas para cada nivel de acceso.

Iteradores: Cálculos del Lado del Servidor

La segunda fortaleza de Accumulo son los iteradores. Estos son plugins de Java del lado del servidor que se incrustan en la cadena de escaneo de datos y compactación.

Los iteradores se ejecutan directamente en los nodos de almacenamiento (Tablet Servers). Realizan varias tareas a la vez:

  1. Filtrar datos por condiciones complejas antes de enviarlos al cliente.
  2. Agregar y transformar valores sobre la marcha.
  3. Limpiar versiones obsoletas o registros eliminados durante la compactación de archivos en segundo plano.

Usando iteradores, puedes hacer que el filtrado analítico pesado ocurra justo en la capa de almacenamiento. De esta manera, la red no se congestionará con gigabytes sin procesar.

Cómo Compilar y Ejecutar

El proyecto está escrito completamente en Java. Se compila con Maven estándar. El comando para compilar el tarball se ve así:

mvn package -DskipTests

El archivo listo aparecerá en assemble/target/accumulo-<version>-bin.tar.gz.

Para desarrollo local, puedes levantar una instancia de prueba, pero para una operación completa necesitarás configurar un clúster HDFS funcional y ZooKeeper. Necesitarás asignar recursos y configurar los ajustes correctamente, ya que el sistema está diseñado para un entorno distribuido.

Dónde Resulta Útil

No tiene sentido desplegar Accumulo para un proyecto personal simple. Pero el sistema muestra su mejor lado en los siguientes escenarios:

  • Servicios multi-inquilino. Cuando una base de datos almacena datos de diferentes departamentos o clientes con permisos superpuestos.
  • Procesamiento de grafos y construcción de índices de búsqueda. Los iteradores ayudan a intersectar conjuntos rápidamente del lado del servidor.
  • Almacenamiento de logs y eventos de telemetría. Cuando las escrituras llegan como un flujo continuo, pero las lecturas deben estar estrictamente restringidas por roles de usuario.

¿Vale la Pena el Esfuerzo?

El proyecto tiene alrededor de 11,000 estrellas en GitHub, pero detrás de la modesta popularidad hay una herramienta madura con lanzamientos frecuentes y soporte de la Apache Foundation.

Si tu sistema no necesita etiquetas de seguridad a nivel de celda individual o procesamiento específico del lado del servidor a través de iteradores, es más fácil elegir HBase o Cassandra. Tienen comunidades más grandes e integración más simple con frameworks populares. Sin embargo, si la seguridad de datos a nivel de celda es una prioridad máxima, prácticamente no hay alternativas a Accumulo.

Proyectos relacionados