【大家的项目】NFS FUSE: 为什么我们用Rust实现了自己的NFS服务器

news2024/11/24 15:55:51

5406b3ac9840a6a4a82b404c6e6e5da8.png

乐观地看FUSE

我喜欢文件。每个计算机系统都理解文件。每个程序都知道如何读取和写入文件。这是一个真正通用的API。因此,我喜欢FUSE的想法。FUSE的名字来源于Filesystem in Userspace,也就是“用户态文件系统”,是一套允许用户模式程序定义文件系统的Linux接口。

7b52ab8cde0e6089313882bb171c20c2.png

有了FUSE,不需要内核模块就可以构建文件系统驱动程序。Fuse是大量文件系统客户端的基础,包括NTFS甚至像SFTP或Amazon S3这样的远程“文件系统”。它还可以用来制作奇怪的文件系统。这些文件系统实际上并不是真正的文件系统,比如WikipediaFS,它允许人们使用自己的文本编辑器编辑维基百科文章。

在Xethub,我们想要帮你用已有的工具本地访问任何版本的数据集。不用通过S3命令就能够直接浏览图像数据集还是很香的。

34dbed383c7bb779b4f18245bf3a2d5c.png

 Webflow图片说明: 想象一下,如果你可以这样与任何文件互动

启用这种超能力的明显解决方案是FUSE。

然而,FUSE是一个对着写起来很麻烦的API:

  • 要在底层和更抽象的两种API类中选择

  • 有两个不兼容的API版本 (libfuse2和libfuse3)

  • 随着时间的推移还有很多其他的小变化 (参见FUSE_USE_VERSION)。

而且FUSE在Mac和Windows上不能原生地用,需要用户安装第三方驱动程序(MacFuse, WinFuse)。每一个这种驱动程序都可能存在细微的API不兼容性。

问题的关键

基于这些问题,我问自己:

是否有可能构建一个真正跨平台的用户空间文件系统接口?

为了回答这个问题,我回看了20年计算机科学历史并偶然发现了NFSv3

NFS

NFSv3是一个已经有20年历史的网络文件系统协议。它如此简单和普遍,以至于几乎每个操作系统都把它实现了一遍。

d4d5716fd3ce113d335be6ec62a3d19b.png

NFSv3协议有一套简洁优雅的设计原则:

  1. 服务器是完全无状态的:这大大简化了实现。

  2. 傻瓜服务器,智能客户端: (RFC 1813在第1.6节第4段中有明确说明) 这很好,因为我们只需要实现服务器,而智能的客户端已经被实现并优化了20多年。

  3. 简单的缓存一致性规则: ****服务器不定义缓存策略。客户端多智能都无所谓。因为协议定义了一种机制让服务器一有变化就通知客户端。这种实现比FUSE更简单、更高效。在实际应用中,FUSE守护进程本身必须明确地实现大量的缓存。使用NFS,我们可以避免所有这些额外的复杂性。

  4. NFS客户端知道它在通过网络通信: 这意味着NFS客户端和协议内置了我们可以现成用的超时、重试和失败的机制。无状态协议使得这些机制非常简洁。用在FUSE上,超时/失败行为必须在守护进程的每个地方都被可靠地实现。如果你卡在一次API调用,很容易就连带卡住守护进程和所有读取文件系统的程序。

  5. 实际上性能非常好。 至少在*nix上,本地网络与管道一样快。 Windows的话不确定,但我会很惊讶如果它不快。

总而言之,使用本地NFS而不是FUSE实现用户态文件系统使得更容易获得性能和韧性。我们可以利用现有的缓存支持和超过20年的强化而只需要实现一次服务器协议。

所以去年当我感染新冠隔离的时候,我试了试用Rust实现了一个NFSv3服务器,结果非常好。

我们在XetHub是怎么用NFS的

XetHub做出了世界上第一个原生、跨平台、用户态的文件系统实现,让你不需要任何内核驱动程序就可以挂载任意大的数据集。

这使你能够在几秒钟内本地挂载约660 GB的 Llama 2模型或查询DuckDB数据库来分析parquet大文件并选出你需要的数据。

所有这些目前都支持Linux、Mac 和Windows Pro(不幸的是不支持Windows Home)。Windows在体验上有一些小的奇特之处,但总体上是可用的。

开源nfsserve

我们在Github上开源了我们的Rust NFS服务器实现nfsserve。如果你也是一个🦀Rust-acean,你可以使用cargo安装nfsserve="0.10"

aa00522136f651f3f606b7d53bda4a2e.png

文档绝对需要多多维护,我们也欢迎接受任何的PR优化!你可以在readme中找到一些贡献的线索。

我们会持续维护这个库,因为我们在pyxet中的xet mount实现和xet-core(我们同样开源了)实际上都依赖它。

我们已经达到的初步效果是:

  • 读取性能相当好

  • 写入功能可用,但仍然需要大量的优化

我确信nfsserve还有很多重构和性能提升的空间,希望大家从这篇文章中有所收获!

注解: XetHub开发了一个使用NFSv3协议而不是FUSE的跨平台用户态文件系统,从而实现了更好的性能和可靠性。他们已经开源了他们的NFS服务器Rust实现,用于他们的xet mount实现,并且支持Linux、Mac和Windows Pro。

https://about.xethub.com/blog/nfs-fuse-why-we-built-nfs-server-rust

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gwas数据根据eaf Z 和N 求beta和se

https://www.nature.com/articles/s41590-023-01588-w#Sec10

基于Java的汽车票网上预订系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【计算机网络】应用层协议原理

文章目录 网络应用程序体系结构客户-服务器体系结构P2P体系结构 进程通信客户和服务器进程进程与计算机网络之间的接口进程寻址 可供应用程序使用的运输服务可靠数据传输吞吐量定时安全性 因特网提供的运输服务TCP服务面向连接的服务可靠数据传输服务TCP安全 UDP服务因特网运输…

Redis实现API访问频率限制

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

phpstudy_pro高效率建一个属于自己的网站

1.下载phpStudy_32 2.下载wordpress-6.3-zh_CN 安装好phpstudy后启动phpstudy中对应的服务,并在网站中配置好对一个的应用的路径 ps:根目录中的路径是你想要通过phpstudy部署应用的路径 这里以wordpress为例 将下载wordpress的压缩包解压后,需要修改…

Python海洋专题六之Cartopy画地形水深图

Python海洋专题六之Cartopy画地形水深图 海洋与大气科学 上期读取nc水深文件,并出图 但是存在一些不完美,本期修饰 本期内容 1:使用Cartopy画出范围图 导入函数包 import matplotlib.pyplot as plt import cartopy.crs as ccrs import c…

上机实验一 顺序表的基本操作和简单程序 西安石油大学数据结构

上机一 实验名称:顺序表的基本操作和简单程序 题目:设计一个有序顺序表,实现以下操作: 1.将元素x插入表中并保持有序; 2.查找值为x的元素,若找到则将其删除; 3.输出表中所有元素。 要求&a…

当面试被问到jvm(Java虚拟机)时,如何将面试官引入自己的节奏?

本文目录 前言快问快答抛砖引玉锦上添花好书推荐总结 前言 作为一名Java开发工程师,不管是校招还是社招jvm一定是必问必会的知识点。虽然说真正开发中用到的不多,甚至可以说用不到(对于刚入行或者Java初级),但是当面试…

mathtype试用期后如何继续使用?

MathType7已经正式发布,作为一款强大的数学公式编辑器可以将编辑好的公式保存成多种图片格式或透明图片模式,可以很方便的添加或移除符号、表达式等模板(只需要简单地用鼠标拖进拖出即可),也可以很方便地修改模板,为理…

AdaBoost算法解密:从基础到应用的全面解析

目录 一、简介什么是AdaBoostAdaBoost的历史和重要性定义 二、基础概念集成学习(Ensemble Learning)定义示例 弱学习器和强学习器定义示例 三、AdaBoost算法原理样本权重(Sample Weights)定义示例 学习器权重(Learner …

大麦订单截图生成 大麦一键生成订单截图

新版大麦订单生成 图样式展示 这个样式图就是在大麦生成完的一个订单截图,它的状态是等待卖家发货 后台一键生成,独立后台管理 教程:修改conf数据库账号密码 不会的可以看源码里有搭建教程 下载程序:https://pan.baidu.com/…

python自动解析301、302重定向链接

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 使用模块requests 方式代码如下: import requests url_string"http://******" r requests.head(url_string, streamTrue) print r.h…

测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)

文章目录 一、任务描述二、指标分析2.1 TP/FP/FN/TN2.2 精准率2.3 召回率 三、接口处理四、数据集处理五、开始计算指标五、实用工具5.1 移动文件5.2 可视化JSON标签5.3 可视化TXT标签 一、任务描述 通过给定的算法接口,对算法的输出(置信度、检测框、告…

【教学类-38-02】20230724京剧脸谱2.0——竖版(小彩图 大面具)(Python 彩图彩照转素描线描稿)

结果展示 背景需求: 前文体运用Python颜色提取功能,将“京剧脸谱”彩色图片转化为线描图案。 【教学类-38】20230724京剧脸谱1.0——横版“彩图线图等大”(Python 彩图彩照转素描线描稿)_reasonsummer的博客-CSDN博客 存在问题&…

大语言模型之十二 SentencePiece扩充LLama2中文词汇

大语言模型的发展潜力已经毋庸置疑了,如何让中文大语言模型更适合中小公司使用这是一道难题。在模型的选择上我们倾向于选择国外的LLama或者BLoom之类的,而不是百川之类的中文大模型,原因在于从基建到框架到数据国外的开源资料非常多&#xf…

背诵不等于理解,深度解析大模型背后的知识储存与提取

自然语言模型的背诵 (memorization) 并不等于理解。即使模型能完整记住所有数据,也可能无法通过微调 (finetune) 提取这些知识,无法回答简单的问题。 随着模型规模的增大,人们开始探索大模型是如何掌握大量知识的。一种观点认为这归功于 “无…

国庆共68条评论《乡村振兴战略下传统村落文化旅游旅游设计》许少辉八一新书

国庆共68条评论《乡村振兴战略下传统村落文化旅游旅游设计》许少辉八一新书 国庆共68条评论《乡村振兴战略下传统村落文化旅游旅游设计》许少辉八一新书

【STM32】IAP升级03关闭总中断,检测栈顶指针

IAP升级方法 IAP升级时需要关闭总中断 TM32在使用时有时需要禁用全局中断,比如MCU在升级过程中需禁用外部中断,防止升级过程中外部中断触发导致升级失败。 ARM MDK中提供了如下两个接口来禁用和开启总中断: __disable_irq(); // 关闭总中…

函数指针详解和简单使用

概念 函数指针&#xff1a;首先它是一个指针&#xff0c;一个指向函数的指针&#xff0c;在内存空间中存放的是函数的地址&#xff1b; 引入 #include <stdio.h>void test() {printf("hehe\n"); } int main() {printf("%p\n", test);printf(&quo…

基于 SpringBoot+Vue 的大学生租房网站

1 简介 本大学生租房系统使用简洁的框架结构&#xff0c;专门用于用户浏览首页&#xff0c;房屋信息&#xff0c;房屋评价&#xff0c;公告资讯&#xff0c;个人中心&#xff0c;后台管理&#xff0c;意见反馈等信息&#xff0c;对个人信息进行修改等&#xff0c;以及系统管理…