亚马逊AWS官方博客

适用于 Amazon S3 的 Mountpoint – 全面推出并准备用于生产工作负载



适用于 Amazon S3 的 Mountpoint 是一款开源文件客户端,它使您的文件感知型 Linux 应用程序可以轻松地直接连接到 Amazon Simple Storage Service(Amazon S3)桶。它于今年早些时候作为 Alpha 版本发布,现已全面推出,可用于大规模读取密集型应用程序:数据湖、机器学习训练、图像渲染、自动驾驶汽车模拟、ETL 等。它支持基于文件的工作负载,这些工作负载执行顺序和随机读取、顺序(仅限追加)写入,并且不需要完整的 POSIX 语义。

为什么要使用文件?
许多 AWS 客户使用 S3 APIAWS SDK 来构建可以列出、访问和处理 S3 桶内容的应用程序。但是,许多客户现有的应用程序、命令、工具和工作流知道如何访问 UNIX 风格的文件:读取目录、打开和读取现有文件以及创建和写入新文件。这些客户要求我们提供一款支持 S3 大规模高性能访问的企业级官方客户端。与这些客户交流并询问很多问题之后,我们了解到性能和稳定性是他们关心的主要问题,而 POSIX 合规性不是必需要素。

早在 2006 年,当我第一次写关于 Amazon S3 的文章时,我很清楚它打算用作对象存储,而不是文件系统。虽然您不想使用 Mountpoint/S3 组合来存储 Git 存储库或类似内容,但将其与可以读取和写入文件的工具结合使用,同时利用 S3 的规模和耐久性,这在许多情况下非常合理。

Mountpoint 信息大全
Mountpoint 从概念上讲非常简单。您创建挂载点并在挂载点挂载 Amazon S3 桶(或桶内的路径),然后使用 shell 命令(lscatddfind 等)、库函数(openclosereadwritecreatopendir 等)或者您已经使用的工具和语言中支持的等效命令和函数来访问该桶。

在后台,Linux 虚拟文件系统(VFS)会将这些操作转换为调用 Mountpoint,这又反过来将它们转换为调用 S3:LIST GETPUT 等。Mountpoint 致力于充分利用网络带宽,提高吞吐量,并允许您在更短的时间内完成更多工作,从而降低计算成本。

Mountpoint 可以从 Amazon Elastic Compute Cloud(Amazon EC2)实例使用,也可以在 Amazon Elastic Container Service(Amazon ECS)Amazon Elastic Kubernetes Service(EKS)容器内使用。您还可以在现有本地系统上安装它,直接访问 S3,或者通过适用于 Amazon S3 的 AWS PrivateLink 借助AWS Direct Connect 连接访问 S3。

安装和使用适用于 Amazon S3 的 Mountpoint
Mountpoint 以 RPM 格式提供,可以在运行 Amazon Linux 的 EC2 实例上轻松安装。我只需获取 RPM 并使用 yum 安装即可:

$ wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
$ sudo yum install ./mount-s3.rpm

过去几年,我一直定期从几个华盛顿州渡轮网络摄像头获取图像并将其存储于我的 wsdot-ferry 桶:

我收集这些图像是为了追踪渡轮的来往情况,目的是在某个时候对其进行分析,以找到最佳的乘船时间。我今天的目标是创作一部电影,将一整天的图像组合成精美的延时摄影。我首先创建一个挂载点并安装桶:

$ mkdir wsdot-ferry
$  mount-s3 wsdot-ferry wsdot-ferry

我可以遍历挂载点并检查桶:

$ cd wsdot-ferry
$ ls -l | head -10
total 0
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2020_12_30
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2020_12_31
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_01
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_02
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_03
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_04
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_05
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_06
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_07
$
$  cd 2020_12_30
$ ls -l
total 0
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 fauntleroy_holding
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 fauntleroy_way
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 lincoln
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 trenton
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_112_north
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_112_south
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_bunker_north
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_bunker_south
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_holding
$
$ cd fauntleroy_holding
$  ls -l | head -10
total 2680
-rw-r--r-- 1 jeff jeff  19337 Feb 10  2021 17-12-01.jpg
-rw-r--r-- 1 jeff jeff  19380 Feb 10  2021 17-15-01.jpg
-rw-r--r-- 1 jeff jeff  19080 Feb 10  2021 17-18-01.jpg
-rw-r--r-- 1 jeff jeff  17700 Feb 10  2021 17-21-01.jpg
-rw-r--r-- 1 jeff jeff  17016 Feb 10  2021 17-24-01.jpg
-rw-r--r-- 1 jeff jeff  16638 Feb 10  2021 17-27-01.jpg
-rw-r--r-- 1 jeff jeff  16713 Feb 10  2021 17-30-01.jpg
-rw-r--r-- 1 jeff jeff  16647 Feb 10  2021 17-33-02.jpg
-rw-r--r-- 1 jeff jeff  16750 Feb 10  2021 17-36-01.jpg
$

我可以用一个命令创建动画:

$ ffmpeg -framerate 10 -pattern_type glob -i "*.jpg" ferry.gif

以下是我得到的结果:

如您所见,我使用Mountpoint 访问现有的图像文件并将新创建的动画写回 S3。虽然这是一个相当简单的演示,但它确实展示了如何使用现有工具和技能来处理 S3 桶中的对象。鉴于这些年来我已经收集了数百万张图像,能够在不明确将它们同步到我的本地文件系统的情况下处理它们,这是很大的胜利。

适用于 Amazon S3 的 Mountpoint 概况
使用Mountpoint 时,需要注意以下几点:

定价 – 使用Mountpoint 时,您只需支付底层 S3 操作的费用,没有新的收费。您还可以使用Mountpoint 来访问请求者付费桶。

性能Mountpoint 能利用 S3 提供的弹性吞吐量,包括每个 EC2 实例与 S3 之间高达 100Gb/秒的数据传输

凭证Mountpoint 使用挂载桶时有效的 AWS 凭证访问您的 S3 桶。有关凭证、桶配置、使用请求者付费、使用 S3 对象 Lambda 的一些技巧等的更多信息,请参阅 CONFIGURATION 文档。

操作和语义Mountpoint 支持基本文件操作,并且可以读取大小不超过 5TB 的文件。它可以列出和读取现有文件,也可以创建新文件。它无法修改现有文件或删除目录,也不支持符号链接或文件锁定(如果您需要 POSIX 语义,可以看看适用于 Lustre 的 Amazon FSx)。有关支持的操作及其解释的更多信息,请参阅 SEMANTICS 文档。

存储类 – 您可以使用Mountpoint 访问除 S3 Glacier Flexible Retrieval、S3 Glacier Deep Archive、S3 Intelligent-Tiering Archive Access Tier 和 S3 Intelligent-Tiering Deep Archive Access Tier 之外的所有存储类中的 S3 对象。

开源Mountpoint 是开源,有公开路线图。欢迎您的贡献;请务必先阅读我们的贡献指南和我们的行为准则

开始使用
如您所见,Mountpoint 真的很酷,我猜您会找到一些很棒的方法,将其用于您的应用程序。欢迎您一探究竟,并与我们分享您的想法!

Jeff