75

s3fs 将 Amazon S3 存储桶挂载为 linux 中的本地目录有多稳定?对于高需求的生产环境是否推荐/稳定?

有没有更好/类似的解决方案?

更新:使用 EBS 并通过 NFS 将其挂载到所有其他 AMI 会更好吗?

4

2 回答 2

97

这里有一篇关于 s3fs 的好文章,在阅读后我求助于 EBS Share。

它强调了使用 s3fs 时的一些重要注意事项,即与 S3 的固有限制有关:

  • 没有文件可以超过 5GB
  • 您不能部分更新文件,因此更改单个字节将重新上传整个文件。
  • 对许多小文件的操作非常有效(毕竟每个都是一个单独的 S3 对象)但大文件效率非常低
  • 尽管 S3 支持部分/分块下载,但 s3fs 并没有利用这一点,因此如果您只想读取 1GB 文件的一个字节,则必须下载整个 GB。

因此,s3fs 是否可行取决于您存储的内容。如果您要存储照片,您想要写入整个文件或读取整个文件永远不会增量更改文件,那么它很好,尽管有人可能会问,如果您正在这样做,那么为什么不使用 S3 API 直接?

如果您谈论的是应用程序数据(例如数据库文件,日志文件),您想在其中进行小的增量更改,那么它绝对不会 - S3 Just 无法以这种方式工作,您无法增量更改文件。

上面提到的文章确实谈到了一个类似的应用程序 - s3backer - 它通过在 S3 上实现虚拟文件系统来解决性能问题。这解决了性能问题,但它本身也有一些问题:

  • 由于延迟写入,数据损坏的风险很高
  • 太小的块大小(例如,默认的 4K)会增加大量的额外成本(例如,50GB 的 4K 块存储需要 130 美元)
  • 太大的块大小会增加大量的数据传输和存储费用。
  • 内存使用可能令人望而却步:默认情况下它缓存 1000 个块。
    使用默认的 4K 块大小不是问题,但大多数用户
    可能希望增加块大小。

我求助于从 EC2 实例共享的 EBS Mounted Drived。但是您应该知道,虽然性能最高的选项有一个大问题 EBS Mounted NFS Share 有其自身的问题 - 单点故障;如果共享 EBS 卷的机器出现故障,那么您将失去访问该共享的所有机器的访问权限。

这是我能够承受的风险,也是我最终选择的选择。我希望这有帮助。

于 2012-05-30T16:41:25.593 回答
22

这是一个老问题,所以我将分享我在过去一年中使用 S3FS 的经验。

最初,它有许多错误和内存泄漏(我有一个 cron-job 每 2 小时重新启动一次),但在最新版本 1.73 中它非常稳定。

S3FS 最好的一点是您无需担心的事情减少了,并免费获得了一些性能优势。

大多数 S3 请求将是 PUT (~5%) 和 GET (~95%)。如果您不需要任何后期处理(例如缩略图生成)。如果您不需要任何后处理,则不应首先访问您的 Web 服务器并直接上传到 S3(使用 CORS)。

假设您正在访问服务器可能意味着您需要对图像进行一些后期处理。使用 S3 API,您将上传到服务器,然后上传到 S3。如果用户想要裁剪,你需要从 S3 重新下载,然后重新上传到服务器,裁剪然后上传到 S3。启用 S3FS 和本地缓存后,此编排会为您处理并保存从 S3 下载文件。

在缓存方面,如果您要缓存到 EC2 上的临时驱动器,您将获得随之而来的性能优势,并且可以清除缓存而无需担心任何事情。除非您的磁盘空间用完,否则您应该没有理由清除缓存。这使得搜索和过滤等遍历操作变得更加容易。

我希望它拥有的一件事是与 S3(RSync 风格)完全同步。这将使其成为 DropBox 或 S3 的 Google Drive 的企业版,但无需应对随之而来的配额和费用。

于 2013-10-20T12:09:37.960 回答