Construido desde los Primeros Principios

Sin runtime. Sin recolector de basura. Sin sobrecarga de framework. Cada línea de Flashstor está escrita en C11 para el máximo control sobre memoria, E/S y recursos del sistema.

Fundamento Tecnológico

Cuatro pilares de excelencia en ingeniería

C11 (ISO/IEC 9899:2011)
Estándar C moderno con tipos _Atomic, static_assert, structs anónimas. Compatible con POSIX con -Wall -Wextra -Wpedantic. Compilado con -fstack-protector-strong, -D_FORTIFY_SOURCE=3 y RELRO completo.
Intel ISA-L & ISA-L Crypto
Erasure coding acelerado por SIMD (Reed-Solomon sobre GF(2^8)) con AVX2/AVX-512 y cifrado AES-256-GCM acelerado por hardware vía AESNI. Hasta 65x más rápido que C puro.
Bucle de eventos epoll / kqueue
E/S nativa basada en eventos: epoll en Linux, kqueue en BSD/macOS, event ports en SunOS. Pool de hilos worker configurable (por defecto: cpu_count × 2) con pool de E/S dedicado para operaciones de shards.
HTTP/2 vía nghttp2
Soporte completo de HTTP/2 sobre TLS (h2 vía ALPN) y texto plano (h2c prior-knowledge). Keep-alive HTTP/1.1 con máximo de solicitudes por conexión configurable (por defecto: 1.000).

Ciclo de Vida de la Solicitud

Cada solicitud S3 sigue un pipeline determinístico de cuatro fases

1

Aceptación y Análisis

El bucle de eventos acepta la conexión vía epoll/kqueue. Los encabezados HTTP se analizan en búferes arena preasignados. Timeout anti-slowloris aplicado en la recepción de encabezados. La solicitud se enruta al manejador mediante tabla de dispatch.

2

Autenticación y Autorización

Firma SigV4 verificada con CRYPTO_memcmp timing-safe. Política IAM evaluada en el contexto de la solicitud con caché epoch por hilo (tasa de acierto cercana al 100 % en conexiones keep-alive). Tokens STS validados.

3

Ejecución y Respuesta

La operación se despacha al manejador. Los datos se fragmentan vía enrutamiento CRC32, se codifican con erasure coding ISA-L SIMD y se escriben en discos en paralelo mediante el pool de hilos de E/S. La respuesta se ensambla con envío zero-copy writev().

4

Limpieza y Reciclaje

El asignador arena libera en bloque toda la memoria por solicitud en una sola operación — cero llamadas free() individuales. La conexión se devuelve al bucle de eventos para reutilización keep-alive. Entrada de registro de auditoría asíncrona encolada en el ring buffer SPSC lock-free.

Memoria

Asignación Arena: Cero Fragmentación por Diseño

Cada conexión obtiene un asignador arena dedicado con bloques reutilizables de 64 KiB. Todas las asignaciones por solicitud ocurren dentro del arena. Cuando la solicitud se completa, el arena completo se reinicia en O(1) — sin llamadas free() por objeto, sin fragmentación, sin GC.

  • Bloques arena de 64 KiB — reutilizados entre solicitudes, nunca devueltos al SO
  • ~75 KiB de base por conexión (arena + búferes de E/S)
  • Desasignación masiva al completar la solicitud — reinicio de un solo puntero
  • Modo debug: seguimiento por asignación con detección de fugas
// Asignador arena — simplificado
arena_t *a = arena_create(65536);
// Fast bump allocation
void *buf = arena_alloc(a, size);
void *hdr = arena_alloc(a, hdr_sz);
// Request complete — free everything
arena_reset(a); // O(1), no free()

Arquitectura de Cluster Distribuida

Conjuntos de erasure distribuidos entre nodos con consenso basado en quórum

Nodo Pasarela

Acepta solicitudes S3 API, realiza autenticación SigV4, enruta operaciones al conjunto de erasure correcto mediante hashing determinístico basado en CRC32.

Nodo de Almacenamiento

Gestiona discos locales con implementación vtable xl_storage. Maneja erasure coding, verificación de bitrot y E/S a nivel de shard con operaciones de disco paralelas.

Nodo Par

Almacenamiento remoto accesible vía vtable rest_storage sobre HTTP. Participa en bloqueo distribuido, quórum de metadatos y replicación entre nodos.

Canales de Comunicación

Port 9000
S3 API
API REST S3 orientada al cliente con soporte HTTP/1.1 y HTTP/2.
Port 9001
Admin API
API de administración con autenticación por token portador HMAC-SHA256 para operaciones de cluster.
Port Internal
Peer RPC
Comunicación REST entre nodos para bloqueo distribuido, sincronización de metadatos y replicación de datos.
Seguridad

Modelo de Separación de Privilegios

Flashstor sigue el principio de mínimo privilegio con un ciclo de vida de seguridad de cuatro fases que minimiza la superficie de ataque en tiempo de ejecución.

Phase 1

Inicialización como Root

  • • Enlace al puerto privilegiado (ej. 443 para HTTPS)
  • • Carga de certificados TLS desde --certs-dir
  • • Inicialización de tablas de dispatch ISA-L SIMD
Phase 2

Abandono de Privilegios

  • • Cambio a FLASHSTORE_RUN_USER / FLASHSTORE_RUN_GROUP
  • • Configuración de PR_SET_NO_NEW_PRIVS en Linux (previene re-escalación)
  • • Uso del modelo de capabilities en SunOS/illumos
Phase 3

Endurecimiento en Tiempo de Ejecución

  • • RELRO completo — sin entradas GOT escribibles después del inicio
  • • -fstack-protector-strong con protección de canario de pila
  • • Integridad de flujo de control (-fcf-protection en x86_64)
  • • -D_FORTIFY_SOURCE=3 para detección de desbordamiento de búfer
Phase 4

Auditoría y Monitoreo

  • • Registros de auditoría JSON asíncronos vía ring buffer SPSC lock-free
  • • IDs de traza por solicitud con temporización de operaciones
  • • Métricas Prometheus para eventos relevantes de seguridad

¿Preguntas Técnicas? Hablemos de Arquitectura.

Nuestro equipo de ingeniería está disponible para discusiones técnicas profundas sobre gestión de memoria, modelos de E/S, endurecimiento de seguridad y diseño de sistemas distribuidos.