适用于SAN / NAS系统的RESTful API

时间:2013-06-23 16:17:29

标签: api cloud storage media

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

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

3 个答案:

答案 0 :(得分:4)

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

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

现在假设您不想要完整的DAV - 但更简单一些,那么我会研究一些可以帮助我构建类似API的库。看看这些:Jackrabbit WebDAV Librarymilton.io。当然还有来自钢铁代码的Jigsaw项目。使用它们通过http公开您的ad-hoc APU或一系列StorNext API调用。

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

Amazon S3 API作为灵感,将littles3之类的代码作为实施示例。有很多像这样的项目,请查看search

请注意您想要的内容介于现有内容之间:

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

如果您需要根据自己的域定制API

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

  • 最小/最大/平均文件大小
  • 使用模式,读/写i / o
  • 无需流式传输
  • 文件内容的不变性(无增量更改)

答案 1 :(得分: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可能会导致冲突,因此您可能需要使用其他哈希方案或两个或更多的组合来防止从发生。

答案 2 :(得分:0)

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

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

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

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

相关问题