适用于SAN / NAS系统的RESTful API
我需要为集群文件系统卷上的文件构建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。
如果你想要一个非常通用的基于Web的API来操作文件
研究WebDAV api的设计如果你不想按原样使用它,那么你可以将它看作API灵感。 看看stat()
, listFolders()
和setacl()
可能只是一个命令。 如果你正在考虑经过时间考验的东西 - 这是一个。 这个API是为基于Web的文件访问而设计的,人们为它安装了一些包装器 ,就像任何其他文件系统一样 - 请参阅davfs2,对我来说,这是一个可靠且完整的API的证明。
现在假设你不想要完整的DAV - 但更简单些,那么我会研究一些可以帮助我构建类似API的库。 看看这些:Jackrabbit WebDAV Library,milton.io。 Jigsaw项目当然也包含代码。 使用它们通过http公开您的特设APU或一系列StorNext API调用。
如果你想要一个不太通用的API来操作blob
作为一个灵感来看看Amazon S3 API,以及一个像littles3这样的代码作为实现示例。 有很多像这样的项目,请检查此搜索
注意你想要的东西落在已有的东西之间:
如果你想为你的域定制一个API
通常,当面临与您类似的挑战时,人们会利用其领域知识和使用案例。 如果您需要此API来存储和检索图片,请忘记使用通用文件操作,并围绕图像集合对API进行建模。 你知道很多信息让API设计变得更简单,例如:
你看过rails-api吗? 我不确定它是否支持您需要的所有功能,但是维护和开放源代码。
https://github.com/rails-api/rails-api
你也可以包含一个ruby gem来处理访问控制列表。
https://www.ruby-toolbox.com/projects/acl9
我建议查看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可能会导致冲突,因此您可能需要使用其他散列方案或两者或更多的组合来防止发生这种情况。
链接地址: http://www.djcxy.com/p/72235.html