7

我需要为集群文件系统卷上的文件构建 RESTful API。我有 20 台服务器,它们共享相同的文件系统。我需要的只是 RESTful API 服务,它允许我进行 stat()、read()、write()、listFolder()、delete()、setacl() 等。其他一切都由集群文件系统处理,所以我只需要具备以上功能。我需要一些非常成熟的东西,因此它支持访问控制列表,它具有高性能 API(如 java 的 API),维护库或项目,并且运行 Linux,锁定支持也将非常有用。我想自己添加额外的函数,比如 getDuration(),所以如果它是开源的,那将是一个优势。如果您知道这样的代码可以帮助我构建这样的东西,我将不胜感激。

它的目的是允许 BPM 系统检查文件在各种 Stornext 卷上是否正常。由于这些系统位于各种防火墙之后,并且由于高可用性而将 NFS 或 SMB 挂载并不是很好,因此最好的选择似乎是 RESTful API 作为防火墙区域之间所有文件操作的单一来源,以某种方便的方式通过 HTTP(S) 请求代替做 NFS 或 SSH。

4

3 回答 3

4

如果您想要一个非常通用的基于 Web 的 API 来操作文件

研究WebDAV api的设计如果您不想按原样使用它也没关系,您只需将其视为 API 灵感即可。看看如何stat()listFolders()可能setacl()只是一个命令。如果您正在研究经过时间考验的东西-就是这样。这个 API 是为基于 Web 的文件访问而设计的,人们在它周围放置了一些包装器,使其可以像任何其他文件系统一样挂载 - 请参阅davfs2,对我来说,这是一个可靠且完整的 API 的证明。

现在假设您不想要完整的 DAV - 但更简单一些,然后我会研究一些可以帮助我构建类似 API 的库。查看这些:Jackrabbit WebDAV 库milton.io。当然也有Jigsaw项目从钢码而来。使用它们通过 http 公开您的 ad-hoc APU 或选择的 StorNext API 调用。

如果您想要一个不太通用的 API 来操作 blob

查看Amazon S3 API作为灵感,以及littles3 之类的代码作为实施示例。有很多这样的项目,检查这个搜索

注意你想要的东西是如何落在已经可用的东西之间的:

  • webDAV(全栈,从 API 到服务器实现),它隐藏和抽象出底层文件系统。级别非常高,因此您无法利用 StorNext 功能
  • StorNext API 非常低级,因此不存在合适的 Web 层

如果您想要为您的域量身定制的 API

通常,当面临像您这样的类似挑战时,人们会利用他们的领域知识和用例。如果您需要此 API 来存储和检索图片,请忘记通用文件操作并围绕图像集合对您的 API 建模。您预先了解了很多使 API 设计变得更简单的信息,例如:

  • 最小/最大/平均文件大小
  • 使用模式,读/写 i/o
  • 无需流式传输
  • 文件内容的不变性(无增量更改)
  • ETC
于 2014-02-18T08:45:26.420 回答
0

你看过rails-api吗?我不确定它是否支持你需要的所有功能,但它是维护和开源的。

https://github.com/rails-api/rails-api

您还可以包含一个 ruby​​ gem 来处理访问控制列表。

https://www.ruby-toolbox.com/projects/acl9

于 2014-02-18T00:39:31.577 回答
0

我建议研究 WebDAV 实现——它们通常集成到 Web 服务器(如 Apache)中,并支持您需要的大多数标准文件系统操作。

如果您真的想自己构建它,您还可以启动一个对象存储平台,例如 OpenStack 的“Swift”项目,由您的 SAN 或 NAS 设备通过 NFS/iSCSI 提供支持。

编辑:您要存储大量照片。有各种 NoSQL 数据库也可以解决这个问题。但是,您也可以使用 NFS 等本地网络文件系统协议来解决问题。

NFS 将在大多数典型的读写文件系统操作上表现良好(无论如何都是 v4.1+)。但是,您还需要一种方法来索引和检索照片元数据并提供访问控制机制,而这些正是性能变得复杂的地方。

当文件上传到您的 HTTP API 时,您应该计算其内容的 MD5 哈希值,同时将原始文件名、所有者 UID 和其他元数据存储在关系数据库中。然后将照片写入特定“存储桶”中的 NFS 挂载。

例如,假设您有一张照片,其内容具有 MD5 哈希值:e240a38624f4a370bd2ec65cf771134b。假设您的 NFS 挂载在/srv/content您将照片写入路径/srv/content/e240/a38624f4/a370bd2ec65cf771134b.jpg- 拆分 MD5 哈希以创建前缀文件夹。

当您的用户稍后想要检索图像时,他们可以通过存储在关系数据库中的数据请求它,您的 API 可以查找照片的 MD5 哈希,然后使用类似的操作在文件系统上定位它。

请注意,如果您有大量不同的文件,使用 MD5 可能会导致冲突因此您可能需要使用另一种散列方案或两种或更多的组合来防止这种情况发生。

于 2014-02-16T21:58:13.860 回答