nodejs 在本地文件系统和 Amazon S3 文件系统之间切换的最佳方法是什么?

What is the best approach in nodejs to switch between the local filesystem and Amazon S3 filesystem?

我正在寻找在使用本地文件系统和 Amazon S3 文件系统之间切换的最佳方式。

我认为理想情况下,我想要一个我可以针对其编码的两个文件系统的包装器。配置更改会告诉包装器使用哪个文件系统。这对我很有用,因为开发人员可以使用他们的本地文件系统,但我们的托管环境只需更改配置选项即可使用 Amazon S3。

是否有任何现有的包装器可以执行此操作?我应该编写自己的包装器吗? 还有其他我不知道的方法会更好吗?

有一个名为 s3fs 的项目在 S3 之上提供 POSIX 文件系统功能的一个子集。没有本地亚马逊提供的方法来执行此操作。

但是,您应该仔细考虑这是否是一个明智的选择。 S3 是一个对象存储,而不是一个普通的文件系统,它具有完全不同的性能和延迟特性。

如果您正在寻找高 iops、NAS 式存储,那么 Amazon EFS(预览版)会更合适。或者自己滚动 NFS/CIFS solution using EBS volumes or SoftNAS or Gluster.

我喜欢你构建一个可以使用本地文件系统或 S3 的包装器的想法。我不知道现有的任何东西可以为您提供这些,但如果您找到任何东西,我肯定会很想听听。

另一种方法是使用某种 S3 文件系统挂载,这样您的应用程序就可以始终使用标准文件系统 I/O 但如果您的系统将该位置配置为,则数据可能会写入 S3一个 S3 安装。我不推荐这种方法,因为我从未听说过没有问题的 S3 安装解决方案。

另一种选择是仅将您的应用程序设计为使用 S3,然后在您的开发环境中使用某种 S3 兼容的本地对象存储。 this question 有几个答案可以在开发过程中提供 S3 兼容服务。

有一项名为 JuiceFS 的服务可以满足您的需求。

根据他们的文档:

JuiceFS is a POSIX-compatible shared filesystem specifically designed to work in the cloud.

It is designed to run in the cloud so you can utilize the cheap price of object storage service to store your data economically.

It is a POSIX-compatible filesystem so you can access your data seamlessly as accessing local files.

It is a shared filesystem so you can share your files across multiple machines.

s3 是支持的后端之一,您甚至可以将其配置为将文件复制到另一个云上的不同对象存储系统。