- 3FS es un sistema de archivos distribuido, open source y de alto rendimiento desarrollado por DeepSeek, con soporte para procesamiento de datos a gran escala y alto throughput
- Funciona como un sistema de archivos común, pero en realidad almacena los datos de forma distribuida en varias máquinas y ofrece una capa de abstracción para que el usuario no tenga que preocuparse por ello
- Opera separando 4 componentes principales (Meta, Mgmtd, Storage, Client) para manejar por separado los metadatos, la administración de nodos, el almacenamiento real de datos y el procesamiento de solicitudes de usuario
- Logra consistencia fuerte y tolerancia a fallas mediante el algoritmo CRAQ, propagando de forma segura las solicitudes de escritura a través de una estructura en cadena
- 3FS se diferencia de otros sistemas de archivos distribuidos por su viabilidad de uso real y su escalabilidad de rendimiento
¿Qué es 3FS?
- 3FS significa Fire-Flyer File System y es un sistema de archivos distribuido publicado por DeepSeek
- Fue lanzado durante la semana de publicación open source de DeepSeek
- Aunque parece una ruta de archivo normal, en realidad ofrece una abstracción sobre datos almacenados de forma distribuida en varias máquinas
¿Qué es un sistema de archivos distribuido?
- Para el usuario parece un sistema de archivos local, pero en realidad almacena los datos de forma distribuida en varios servidores
- Ejemplo: la ruta
/3fs/stage/notes.txt parece un solo archivo, pero en realidad está dividida y almacenada en varios servidores
- El usuario puede manejarlo como un archivo normal con comandos como
mkdir y cat
¿Por qué usar un sistema de archivos distribuido?
- Soporta grandes volúmenes de datos (a nivel de petabytes) y alto throughput
- Garantiza estabilidad mediante tolerancia a fallas (fault tolerance) y redundancia (redundancy)
- Ejemplos de uso real:
- Frameworks de procesamiento paralelo como HDFS + Spark
- Checkpointing en pipelines de entrenamiento de ML
- Colossus de Google
- Haystack, el repositorio de fotos de Meta
- Ejemplos de almacenamiento para IA: JuiceFS vs CephFS
Componentes de 3FS
- Está compuesto por 4 tipos principales de nodos
Meta
- Gestiona metadatos como rutas de archivos, atributos y ubicación
- Procesa solicitudes del cliente por RPC (
open, stat, close, etc.)
- La información de metadatos se almacena en FoundationDB
Inode guarda información como el tamaño del archivo y el propietario
DirEntry conecta la ruta con el inode (pueden existir varias rutas para un mismo archivo, como con los enlaces simbólicos)
Mgmtd
- Se encarga del registro de nodos y verificación de estado del clúster
- Los nodos se registran al arrancar y envían heartbeats periódicamente
- Cumple el papel de router central, por lo que no hace falta mantener conexiones directas entre nodos
- También administra la información de configuración para construir la cadena CRAQ
Storage
- Se encarga del almacenamiento real de los datos
- Administra bloques de disco mediante ChunkEngine basado en Rust
- Rastrea tamaño, offset, checksum, versión y otros datos de los bloques de disco
- El usuario no interactúa directamente con los bloques; se le ofrece una interfaz
- La información de metadatos se almacena en LevelDB
- Existen varios workers
AllocateWorker asigna bloques nuevos
PunchHoleWorker recupera bloques sin uso
AioReadWorker procesa lecturas asíncronas a través de la cola de io_uring
- Durante las escrituras, los datos se reenvían al siguiente nodo siguiendo la cadena CRAQ
Client
- Procesa las solicitudes del usuario y se comunica con los demás nodos
- Flujo de trabajo:
- Consulta a Mgmtd la ubicación de los nodos
- Solicita operaciones de archivo a Meta
- Transfiere datos con Storage
Algoritmo CRAQ
- Significa Chain Replication with Apportioned Queries y ofrece consistencia fuerte (linearizability)
- Flujo de escritura:
- La escritura se propaga en orden Head → Middle → Tail
- En las etapas intermedias, los datos se marcan como dirty (no se pueden leer)
- Tras el commit en Tail, el estado clean se propaga hacia atrás
- Flujo de lectura:
- Si está clean, se devuelve de inmediato
- Si está dirty, se consulta al tail para obtener los datos más recientes
CRAQ desde el punto de vista del rendimiento
- La velocidad de escritura queda limitada por el nodo más lento
- Cuando se accede con frecuencia a datos dirty, las lecturas pueden concentrarse en el tail y provocar un cuello de botella de lectura
- Ejemplo: degradación de rendimiento con una carga de trabajo Zipfian
- En un clúster de 5 nodos, se replica en 3 para minimizar la pérdida de rendimiento en caso de falla
Diferencias frente a otros sistemas de archivos distribuidos
- La estructura es similar, pero hay diferencias en la aplicabilidad real y en la forma de implementación
- Elementos de comparación:
- En qué tipos de workload destaca
- Flexibilidad para ajustar el rendimiento
- Facilidad de despliegue
- Escalabilidad del throughput
- Gestión de latencia dentro del SLO
- Confiabilidad
- Elementos técnicos en detalle:
- Causas de los cuellos de botella y cómo se manejan
- Presencia o ausencia de locks
- Estructuras de datos utilizadas
- Hardware objetivo
- Algoritmos de tolerancia a fallas o métodos de corrección de errores utilizados
Próximo tema de la serie del blog
- Se planea verificar las afirmaciones de DeepSeek mediante un análisis de rendimiento real
- Puntos de revisión:
- La afirmación de DeepSeek sobre el cuello de botella de FUSE
- Posibilidad de reproducir las gráficas de rendimiento
- Análisis de escenarios de degradación de rendimiento
- Factores de cuello de botella (CPU, memoria, disco, red)
- En qué workloads ofrece mejor rendimiento
- Comparación con sistemas existentes
- Diferencias frente a cómo los sistemas existentes resuelven esos problemas
- Revisión de posibles mejoras directas
Material adicional
2 comentarios
Era un problema sobre el que también estaba pensando, pero esto...
Comentarios en Hacker News
S3FS es un sistema de archivos de metadatos escalable, comparado con varios sistemas de archivos distribuidos
Al evaluar estos sistemas hay que considerar los límites teóricos, la eficiencia y las limitaciones prácticas
Hay interés en compararlo con SeaweedFS
Pregunta sobre por qué no usar CephFS
Pregunta sobre la comparación con JuiceFS
Como operador pequeño y usuario de homelab, parece poco probable que alguna vez use un sistema de archivos distribuido a gran escala
Aunque es una configuración compleja, no está claro qué funciones son esenciales para cargas de trabajo de deep learning
Pregunta sobre qué tan fácil es desactivar el sistema de archivos distribuido de DeepSeek
Pregunta sobre si esto podría replicarse con unidades ZFS distribuidas en varios dispositivos