租用帮助

大家在使用 AWS S3过程中如何优化下载?
2023-05-11 16:04:01
阅读()
来源:互联数据
摘要:     大家在使用 AWS S3过程中总会遇到一些问题。我们在AWS S3桶中保存用户特定的可下载文件。我们的客户在全世界范围内从这些桶中下载文件。文件大小从1-20GB不等。对于较大的文件,非美国地区的客户面临并抱怨下

大家在使用 AWS S3过程中总会遇到一些问题。我们在AWS S3桶中保存用户特定的可下载文件。我们的客户在全世界范围内从这些桶中下载文件。文件大小从1-20GB不等。对于较大的文件,非美国地区的客户面临并抱怨下载速度慢或下载中断的问题。我们怎样才能优化这些下载?


AWS国际站代充优惠链接https://www.hkt4.com/zt/2023-05-06/


一、如何提高 S3 性能?


解决方法:S3 index 和实际数据分开存放。默认一个 bucket 所有 object 都位于同一个分区。如果 object 数量太多,而请求速率又不高时,S3 会根据 key name 自动分区。但是,如果请求速率太高,会耗尽 S3 分区的 IO,触发限制,可能会返回503 Slow Down 错误。


尽量利用 hash 或者倒序,使 S3 前缀随机化。如果读写请求过高,可以向 AWS 提交 S3 分区请求,或者采用指数退避(exponential backoff)算法,增加请求的重试等待时间。尽管如此,仍然需要遵循 S3 key name 随机化原则。可以对于某个目录下的已经随机化的 object 进行分区。


例如:S3 bucket 的 log 目录下的.log 对象前缀已经做了随机化。

S3://bucket/log/A0B1.log

S3://bucket/log/C2D3.log

S3://bucket/log/E4F5.log


在提交请求时,除了请求速率,还需要填写 pattern,注明 log/ 目录下是如何进行随机化的。后台就可以在 S3://bucket/log/ 后面进行分区。


S3 不限制带宽。但是,也不要对 S3 进行压力测试。实际的传输速率和客户端到 S3 的网络有关。如果客户端请求很多,可以使用 CDN 进行加速。


AWS S3如何优化下载


二、有很多小文件,如何有效上传到 S3?


解决方法:如果可能,尽量先压缩成大文件再上传。一方面,减少大量小文件上传时,TCP 连接建立和断开的开销。另外一方面,S3 虽然上传流量不收费,但是请求仍然收费。


三、需要在本地到 S3 之间每日同步文件,现有文件数量非常多(几百万),如何提高效率?


aws s3 sync 命令可以同步本地到 S3 的文件,只同步变化的部分。但是,sync 需要先列出 LIST S3,以进行比较。如果文件数量非常巨大,LIST 所有对象,非常花费时间,甚至可能卡住。


解决办法:只同步变化的目录。例如,按照日期目录来同步。


aws s3 sync /data/2018/03/13 s3://bucket/data/2018/03/13


如果每天变化的数据分布在不同目录,可以把这些变化记录在 Dynamodb,在同步时,只同步变化的部分。


四、S3 是否支持断点续传?


解决方法:断点续传的实现,在于根据 content-length 划分成多个 range,没有传完的,可以保留,下次可以继续传输。


S3 支持 multi-part 分段传输。分三个步骤:


1、Initiate Multipart Upload:初始化任务。

2、Parts Upload:把文件分成多块,每个块都有一样的 upload ID,和不同的 part number。不同的分块分别传输,与顺序无关。

3、Complete Multipart Upload:所有分块完成后,把分块合并成 S3 对象。一般的程序,例如 AWS CLI,如果有部分没有完成,并且重试后超时,那么会调用 Abort Multipart Upload,所有已经上传到 S3 的部分全部删除,任务终止。


S3 没有提供直接断点续传 API,可以自己在程序加个逻辑来实现。如果在第二阶段有部分一直没有传完,就不会调用第三阶段的 Complete/Abort。这样,已经传输完成的部分会一直放在 S3,直到 Complete/Abort。


五、 应用程序在下载S3文件时,会判断MD5以防止文件传输中被篡改,但是大文件总是出错。


S3 大文件传输使用 multi part 分段。对于每一段,分别计算 MD5。最后在任务完成时,把所有分段的 MD5,再进行 MD5 计算,得到 S3 Etag 值。


应用程序只对比了某一段的 MD5 值,与 S3 Etag 不一致,因此出现错误。


六、在移动应用上传到S3的场景下,S3 Pre-singed URL和Cognito方式,有何区别?


最后一点解决方法:移动客户端在上传时,需要在服务器生成 Pre-signed URL,返回客户端。客户端以此临时 URL,无需 credentia l即可上传。实际上,上传时,使用的是服务器生成 URL 时的 IAM 用户权限,相当于以此 IAM 用户来上传。此方式的限制在于,pre-signed URL 不知道整个上传对象的大小,因此不能使用 S3 multi-part,对于大文件的传输效率比

0

上一篇:新加坡vps 云端服务器和新加坡vps有啥不同?
下一篇:部署AWS EC2会遇到哪些问题?
HKT4为您的网站提供全球IDC资源
立即免费测试