13 pontos por xguru 2023-09-22 | 4 comentários | Compartilhar no WhatsApp
  • O FUSE permite escrever drivers de sistema de arquivos sem precisar de um módulo de kernel
    • Vários clientes de sistema de arquivos, como NTFS, SFTP e S3, o utilizam
    • Também é possível criar coisas que não são sistemas de arquivos de verdade, como o WikipediaFS
  • Mas o FUSE é desconfortável para desenvolver
    • É preciso escolher entre 2 APIs: Low-Level e High-Level
    • Existem 2 versões de API incompatíveis entre si: libfuse2 e libfuse3
    • As APIs continuam mudando aos poucos (FUSE_USE_VERSION)
    • No Mac e no Windows, não é nativo; é necessário instalar drivers de terceiros, como MacFuse e WinFuse
  • Nós (XetHub) queríamos permitir o acesso prático a várias versões de datasets de imagens em notebooks pessoais, sem precisar usar comandos do S3
  • A pergunta "será que dá para criar um sistema de arquivos em espaço de usuário realmente multiplataforma?" nos levou ao NFSv3

NFS

  • O NFSv3 é um protocolo de sistema de arquivos em rede com 20 anos de existência, muito simples e amplamente adotado, implementado nativamente em quase todos os sistemas operacionais
  • Princípios de design bonitos e simples
    • O servidor é totalmente stateless
    • O servidor NFS é burro e o cliente NFS é inteligente
    • Regras simples de consistência de cache (o servidor não define a política de cache; o cliente faz como quiser)
    • O cliente NFS sabe que está se comunicando através da rede
    • Na prática, o desempenho é excelente
  • Em resumo, ao usar NFS no localhost em vez de FUSE para implementar um sistema de arquivos em modo de usuário, fica mais fácil obter desempenho e resiliência
  • Basta implementar o protocolo do servidor uma única vez para aproveitar o cache existente e os recursos amadurecidos ao longo de 20 anos

Como a XetHub usa NFS

  • Desenvolveu uma implementação nativa, multiplataforma e em modo de usuário de sistema de arquivos
  • É possível montar grandes datasets na máquina do usuário sem driver de kernel
    • Como montar o modelo Llama 2 de 660GB ou analisar grandes arquivos Parquet com consultas no DuckDB
  • Compatível com Linux, Mac e Windows Pro ou superior (Windows Home não funciona)
  • O nfsserve, servidor NFS implementado em Rust, está disponível no GitHub
  • O desempenho de leitura é bastante bom, e a escrita funciona, mas ainda precisa de otimização

4 comentários

 
ntpd3300 2023-09-22

Diferente do que o título sugere, no fim das contas não explica por que foi escrito em Rust.

 
botplaysdice 2023-09-23

O foco do texto original é o motivo de termos desenvolvido nosso próprio servidor NFS... mas parece que colocaram isso no título porque não dava para deixar de fora uma palavra da moda como Rust :-)

 
blueprajna 2023-09-22

Parece que o texto original não trata do motivo de ter sido escrito em Rust, mas sim de por que escolheram NFS em vez de FUSE.

 
xguru 2023-09-22

Ah, pensando bem, percebo que não havia nada além de dizer que era rápido simplesmente por ser Rust. Resumi isso sem pensar muito.