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
Ciclo de Vida de la Solicitud
Cada solicitud S3 sigue un pipeline determinístico de cuatro fases
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.
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.
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().
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.
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
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
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.
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
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
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
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.