- O 3FS é um sistema de arquivos distribuído open source de alto desempenho desenvolvido pela DeepSeek, com suporte a processamento de dados em larga escala e alta taxa de transferência
- Ele funciona como um sistema de arquivos comum, mas na prática distribui os dados entre várias máquinas, oferecendo uma camada de abstração que dispensa o usuário de se preocupar com isso
- Opera com 4 componentes principais (Meta, Mgmtd, Storage, Client), separando metadados, gerenciamento de nós, armazenamento real dos dados e tratamento das requisições dos usuários
- Alcança consistência forte e tolerância a falhas com o algoritmo CRAQ, propagando com segurança as requisições de escrita por meio de uma estrutura em cadeia
- O 3FS se diferencia de outros sistemas de arquivos distribuídos pela viabilidade de uso no mundo real e pela escalabilidade de desempenho
O que é o 3FS?
- 3FS é a sigla de Fire-Flyer File System, um sistema de arquivos distribuído lançado pela DeepSeek
- Foi lançado junto com a semana de open source da DeepSeek
- Embora pareça um caminho de arquivo comum, na prática ele abstrai e disponibiliza dados armazenados de forma distribuída em várias máquinas
O que é um sistema de arquivos distribuído?
- Para o usuário, parece um sistema de arquivos local, mas os dados na verdade ficam distribuídos entre vários servidores
- Ex.: o caminho
/3fs/stage/notes.txt parece um único arquivo, mas na prática está dividido e armazenado em vários servidores
- O usuário pode usá-lo como um arquivo normal com comandos como
mkdir e cat
Por que usar um sistema de arquivos distribuído?
- Suporte a grandes volumes de dados (na escala de petabytes) e alta taxa de transferência
- Garante estabilidade por meio de tolerância a falhas (fault tolerance) e redundância
- Exemplos de uso real:
- Frameworks de processamento paralelo como HDFS + Spark
- Checkpointing em pipelines de treinamento de ML
- Colossus, do Google
- Haystack, o repositório de fotos da Meta
- Exemplos de storage para IA: JuiceFS vs CephFS
Componentes do 3FS
- É composto por 4 tipos principais de nós
Meta
- Responsável pelo gerenciamento de metadados como caminhos de arquivos, atributos e localização
- Processa requisições de clientes via RPC (
open, stat, close etc.)
- As informações de metadados são armazenadas no FoundationDB
Inode armazena informações como tamanho do arquivo e proprietário
DirEntry conecta o caminho ao inode (como em links simbólicos, um único arquivo pode existir em vários caminhos)
Mgmtd
- Responsável pelo registro de nós e verificação de estado do cluster
- Os nós se registram ao inicializar e enviam heartbeats periodicamente
- Atua como um roteador central, eliminando a necessidade de manter conexões diretas entre todos os nós
- Também gerencia as informações de configuração da cadeia CRAQ
Storage
- Responsável pelo armazenamento real dos dados
- Gerencia blocos de disco por meio do ChunkEngine baseado em Rust
- Rastreia tamanho, offset, checksum, versão etc. dos blocos de disco
- Fornece uma interface para que o usuário não precise interagir diretamente com os blocos
- Os metadados são armazenados no LevelDB
- Há vários workers diferentes
AllocateWorker aloca novos blocos
PunchHoleWorker recupera blocos não utilizados
AioReadWorker processa leituras assíncronas por meio da fila io_uring
- Durante a escrita, os dados são encaminhados ao próximo nó seguindo a cadeia CRAQ
Client
- Processa as requisições do usuário e se comunica com os outros nós
- Fluxo de trabalho:
- Consulta ao Mgmtd sobre a localização dos nós
- Requisição ao Meta para operações de arquivo
- Transferência de dados com o Storage
Algoritmo CRAQ
- Sigla de Chain Replication with Apportioned Queries, oferecendo consistência forte (linearizability)
- Fluxo de escrita:
- Propagação da escrita em ordem Head → Middle → Tail
- Nas etapas intermediárias, os dados são marcados como dirty (não podem ser lidos)
- Após o commit no Tail, o estado clean é propagado de volta
- Fluxo de leitura:
- Se estiver clean, retorna imediatamente
- Se estiver dirty, consulta o tail para obter os dados mais recentes
CRAQ do ponto de vista de desempenho
- A velocidade de escrita é limitada pelo nó mais lento
- Dados dirty acessados com frequência podem concentrar leituras no tail, gerando possível gargalo de leitura
- Ex.: queda de desempenho em workloads Zipfianos
- Em um cluster com 5 nós, a replicação em 3 nós minimiza a perda de desempenho em caso de falha
Diferenças em relação a outros sistemas de arquivos distribuídos
- A estrutura é semelhante, mas há diferenças na aplicabilidade real e na forma de implementação
- Itens de comparação:
- Em quais workloads ele se destaca
- Flexibilidade no ajuste de desempenho
- Facilidade de implantação
- Escalabilidade de throughput
- Gerenciamento de latência dentro do SLO
- Confiabilidade
- Elementos técnicos em detalhe:
- Causas de gargalos e como são tratadas
- Presença ou ausência de locks
- Estruturas de dados utilizadas
- Hardware-alvo
- Algoritmos de tolerância a falhas ou métodos de correção de erros usados
Próximo tema da série de blog
- Está prevista uma verificação das alegações da DeepSeek por meio de análise de desempenho real
- Itens a revisar:
- Alegações da DeepSeek sobre gargalos do FUSE
- Reprodutibilidade dos gráficos de desempenho
- Análise de cenários de degradação de desempenho
- Fatores de gargalo (CPU, memória, disco, rede)
- Em quais workloads o desempenho é superior
- Comparação com sistemas existentes
- Diferenças em relação às abordagens usadas para resolver problemas em sistemas existentes
- Avaliação de possibilidades de melhoria direta
Materiais adicionais
2 comentários
Era um problema sobre o qual eu também estava pensando, e isso...
Comentários do Hacker News
O S3FS é um sistema de arquivos de metadados escalável, comparado a vários sistemas de arquivos distribuídos
Ao avaliar esses sistemas, é preciso considerar limites teóricos, eficiência e limitações práticas
Há interesse em uma comparação com o SeaweedFS
Pergunta sobre por que não usar o CephFS
Pergunta sobre comparação com o JuiceFS
Como operador de pequeno porte e usuário de homelab, provavelmente não haverá necessidade de usar um sistema de arquivos distribuído em larga escala
A configuração é complexa, mas não está claro quais recursos são essenciais para workloads de deep learning
Pergunta sobre quão fácil é desativar o sistema de arquivos distribuído da DeepSeek
Pergunta se isso poderia ser replicado com discos ZFS distribuídos em vários dispositivos