有没有一种方法可以将大量上传数据直接从/ dev / urandom直接流到AWS S3?

时间:2019-03-14 22:14:46

标签: python amazon-web-services amazon-s3 boto3 aws-cli

我正在尝试对超大文件(500GB-5TB)的AWS S3上的上传速度进行一些测试。我目前正在使用boto3(适用于Python的AWS开发工具包)。与其在我自己的硬盘上创建和存储大量文件,不如直接从/dev/urandom(或至少/dev/zero)流式传输。 boto3 put_object()可以从流中上传数据,但似乎有5GB的硬限制,这远远低于我需要测试的范围。

我尝试了boto3 upload_fileobj(),该文件通过自动使用分段上传来处理较大的对象。它可以在实际文件上正常工作,但是我似乎无法找到一种方法来直接从流中上传数据。我还研究了使用AWS S3命令行界面(CLI)而不是boto3 SDK,但再次想不出一种直接从流中上传数据的方法。

是否有相对简单的方法直接从/dev/urandom将大量数据上传到AWS S3?

1 个答案:

答案 0 :(得分:0)

您不希望直接从/dev/urandom流式传输,因为它实际上是CPU限制的,而不是IO限制的(您可以在使用top的同时运行dd来查看此信息将随机数据流传输到文件中,或者通过比较时间来复制磁盘缓存中尚未存在的现有1GB文件)。

使用Boto3,您需要的呼叫是create_multipart_upload启动上传,upload_part发送每个部分,complete_multipart_upload完成上传。您可以将文件或字节数组传递给upload_part,因此可以使用内置的随机数生成器(它将足够随机以避免GZip压缩)生成字节数组,或重复读取相同的内容文件(在类似的测试中,我使用了一个1GB的文件,其中包含来自urandom的数据-Gzip不会在这么大的输入空间上为您提供任何压缩)。

但是,整个练习毫无意义。除非您有直接通往Internet主干的千兆管道,否则AWS的速度将比网络快。因此,您真正要测试的是您的网络将字节推入Internet的速度,并且有许多“速度测试”站点将告诉您吞吐量。另外,发送1 TB的内容比发送1 GB的内容要多得多:S3的全部意义在于它可以处理任何内容