- 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
Diferente do que o título sugere, no fim das contas não explica por que foi escrito em Rust.
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 :-)
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.
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.