JaDFS - Sistema de Almacenamiento Distribuido de Archivos de Jacobo
Un proyecto de aprendizaje para construir un sistema de almacenamiento distribuido de archivos en Go, progresando desde un servidor de archivos simple hasta un sistema de almacenamiento completamente distribuido y tolerante a fallos.
Visi贸n del Proyecto
JaDFS pretende ser un servidor de almacenamiento distribuido de archivos que:
- Divide archivos grandes en fragmentos a trav茅s de m煤ltiples nodos
- Replica cada fragmento 3 veces para tolerancia a fallos
- Usa consenso Raft para gesti贸n de metadatos
- Proporciona replicaci贸n sincr贸nica/asincr贸nica configurable
- Maneja fallos de nodos de forma elegante
Principios B谩sicos de Dise帽o
Estrategia de Almacenamiento
- Fragmentaci贸n: Fragmentos de tama帽o fijo (64MB por defecto) permitiendo archivos m谩s grandes que cualquier nodo individual
- Almacenamiento H铆brido: SQLite para metadatos + sistema de archivos para datos
- Bytes de fragmentos almacenados como archivos en disco para transmisi贸n r谩pida
- Metadatos locales en SQLite para consultas y transacciones
- Metadatos distribuidos en Raft para coordinaci贸n a nivel de cl煤ster
- Direccionamiento por Contenido: ID de fragmento = SHA256(datos) habilitando deduplicaci贸n autom谩tica
Replicaci贸n y Metadatos
- Factor de Replicaci贸n: 3 copias por fragmento
- Gesti贸n de Metadatos: Consenso distribuido basado en Raft
- Arquitectura de Dos Planos: Plano de control (Raft) separado del plano de datos (transferencias directas)
Arquitectura
El sistema usa una arquitectura de metadatos de tres capas:
- SQLite Local (por nodo): Consultas locales r谩pidas con seguridad transaccional
- Cl煤ster Raft (distribuido): Vista a nivel de cl煤ster con consistencia fuerte
- Sistema de Archivos: Bytes de fragmentos reales para transmisi贸n r谩pida
Estado Actual
Fase 1 (Implementaci贸n Completa): Servidor de Archivos Simple
- Almacenamiento y recuperaci贸n de archivos en un solo nodo con soporte de streaming
- API REST HTTP para carga/descarga (endpoints PUT, GET, DELETE)
- Almacenamiento h铆brido SQLite + sistema de archivos con seguridad transaccional
- Fragmentaci贸n direccionable por contenido (basada en SHA256) con deduplicaci贸n autom谩tica
- Gesti贸n de archivos y endpoints de estad铆sticas del nodo
- Detecci贸n de hu茅rfanos para recolecci贸n de basura
Fase 2 (Planificada): Coordinaci贸n Multi-Nodo
- Protocolo de comunicaci贸n nodo a nodo
- Elecci贸n simple de l铆der (basada en heartbeat, evitando la complejidad completa de Raft)
- Difusi贸n y sincronizaci贸n de metadatos entre nodos
- Operaciones de archivos distribuidos con replicaci贸n 3x
- Arquitectura centrada en nodos usando concurrencia nativa de Go (goroutines + canales)
驴Por Qu茅 Este Proyecto?
JaDFS es una exploraci贸n pr谩ctica de conceptos de sistemas distribuidos:
- Entender c贸mo funcionan sistemas de archivos distribuidos como HDFS y Ceph
- Aprender sobre algoritmos de consenso y tolerancia a fallos
- Practicar primitivas de concurrencia de Go (goroutines y canales)
- Construir sistemas de nivel de producci贸n desde primeros principios