S3P 提供了一种在大型 AWS S3 存储桶上复制、列出、同步和执行其他批量操作的极其快捷的方法。
您可以将其用作常见操作的命令行工具,也可以将其用作几乎任何您能想象到的内容的库。
S3 的 API 的结构围绕连续列出项目 - 请求 1000 个项目,等待,然后请求下一个 1000 个。几乎所有 S3 工具都是这样工作的。然而,S3P 可以并行列出项目。它利用 S3 的能力来请求等于或在给定密钥之后的前 1000 个项目。然后,借助二分算法和一些智能启发式方法,S3P 可以以任意并行度扫描存储桶的内容。实际上,S3P 列出存储桶的速度比传统方法快 20 倍。
S3P 实际上只是一个奇特、非常快的 S3 列表工具。 S3P 的核心能力大大提高了汇总、复制和同步的能力,可以从根本上更快地列出对象。
我们使用单个 EC2 实例运行 S3P,在同一区域的两个存储桶之间保持高达8GB/秒的复制速度。
在 Medium 上阅读有关 S3P 的更多信息。
NodeJS
AWS-CLI
复制大文件需要aws-cli
。默认情况下,使用aws-cli
复制大于 100 MB 的文件。这是性能方面的一个很好的折衷方案。但是,您可以使用--large-copy-threshold
选项将该阈值更改为 5 GB。
为什么?如果没有更复杂的解决方案,
aws-sdk
不支持处理大于 5 GB 的文件。
键名必须使用有限的字符集:
<space>
!"#$%&'()*+,-./
0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstuvwxyz{|}~
为什么?由于 Aws-S3 不支持按降序列出键,因此 S3P 使用基于字符范围的分而治之算法。
s3p 使用与 aws-cli 相同的凭据,因此请参阅他们的文档:https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
无需直接安装s3p。只要安装了 NodeJS,就可以直接使用npx
运行 s3p 。
内置帮助详细介绍了所有命令、选项,并提供了许多示例:
# list commands and get overall help
npx s3p help
使用--help
选项获取每个命令的详细帮助和示例:
# get specific command help and example uses
npx s3p cp --help
您还可以在本地安装 s3p,这将使其运行得更快。
# install s3p on your current machine
npm install s3p -g
# now it runs from the local install:
npx s3p help
除了性能之外,S3P 还提供灵活的自定义列表、复制和比较选项:
令人惊讶的是,您甚至不需要在云中运行 S3P 就能看到它的很多好处。您可以在本地计算机上运行它,并且由于 S3 复制从不直接通过 S3P,因此它不会占用任何 AWS 带宽。
S3-bucket-listing 性能几乎可以达到20,000每秒 50,000 个项目(截至 S3Pv3.5)。
S3 存储桶复制性能可以超过每秒 8 GB。
是的,我已经看到每秒 9 GB 的持续速度!这是在平均文件大小略大于 100 MB 的存储桶上。 S3P 在单个 c5.2xlarge 实例上运行。相比之下,我从未见过 aws-s3-cp 的速度超过 150mB/s。速度快了 53 倍以上。
平均文件大小对 s3p 的整体每秒字节数有很大影响:
地点 | 命令 | AWS CLI | s3p | 加速 | 平均尺寸 |
---|---|---|---|---|---|
当地的 | LS | 2500 条/秒 | 50000 条/秒 | 20倍 | 不适用 |
当地的 | CP | 30 兆字节/秒 | 150 兆字节/秒 | 5x | 512 KB |
EC2 | CP | 150 兆字节/秒 | 8GB/秒 | 54x | 100 兆字节 |
S3P 的开发目的是在包含数百万个项目和数百 TB 的存储桶上运行。目前,S3P仍然只是单核NodeJS应用程序。通过分叉工作器甚至使用 Elastic-Queue 之类的工具在实例之间分配工作,可以实现更大规模的并行 S3 操作。如果有人需要比 aws-cli 快 100-1000 倍的解决方案,请告诉我们。我们很乐意与您合作。
[email protected]
所有文档都嵌入在 CLI 帮助页面中。使用:
# get a list of commands
npx s3p help
# get a list of options for a command
# example:
npx s3p cp --help
CLI 的所有功能也可以作为 API 提供。要了解 API,请首先了解 CLI 选项,然后,要了解特定 CLI 命令的 API 调用,请使用--api-example
选项在命令行上运行该命令。这将输出用于以编程方式调用该命令的示例 JavaScript 代码。
注意:当您在命令行上使用
--api-example
时,您的命令实际上不会运行。 S3P 只会将与 CLI 命令等效的 JavaScript 输出到控制台,然后退出。
跑步:
> npx s3p ls --bucket foo --quiet --api-example
输出:
require ( "s3p" ) . ls ( {
bucket : "foo" ,
quiet : true ,
} ) ;
// > Promise
测试运行:
> node
粘贴:
require ( "s3p" )
. ls ( {
bucket : "foo" ,
quiet : true ,
} )
. then ( out => console . log ( out ) ) ;
输出:
[
'item1' ,
'item2' ,
'item3' ,
... 8463 more items
}
S3P最初由GenUI.com与Resolution Bioscience, Inc.联合开发。
GenUI 是一家位于西雅图的技术商业化软件咨询公司。我们加速软件路线图。请随时联系 GenUI 并告诉我们您的项目。我们很乐意听取您的意见。