使用S3自动气象站时,你总会遇到一些问题。我们在AWS
S3桶存储用户特定的可下载文件。我们的客户从世界各地的这些桶下载文件。文件大小从1到20GB不等。对于大文件,非美国地区的客户面临着下载速度慢或下载中断的问题,并对此表示不满。我们如何优化这些下载?
AWS国际站收费折扣链接:https://www.zhaodufu.com/zt/2023-05-06/
首先,如何提高S3的表现?
解决方案:S3指数与实际数据分开存储。默认情况下,bucket的所有对象都位于同一个分区中。如果对象
当数量过大且请求率不高时,S3会根据键名自动分区。但是,如果请求速率过高,会耗尽S3分区的IO,触发限制,可能会返回503 Slow。
向下错误。
尝试使用散列或逆序来随机化S3前缀。如果读写请求太高,可以向AWS提交S3分区请求,或者使用指数。
退避)算法来增加请求的重试等待时间。尽管如此,我们仍然需要遵循S3键名的随机化原则。对于某个目录中的随机对象,
分区。
例如,在。S3存储桶的日志目录中的日志对象前缀已被随机化。
S3://bucket/log/A0B1.log
S3://bucket/log/C2D3.log
S3://bucket/log/E4F5.log
提交请求时,除了请求率之外,您还需要填写模式,指示如何在日志/目录中执行随机化。背景可以在S3://bucket/log/
稍后分区。
S3不限制带宽。但是,不要对S3进行压力测试。实际传输速率与从客户端到S3的网络有关。如果客户要求很多,可以用CDN。
加快速度。
第二,有很多小文件,如何有效地上传到S3?
解决方法:如果可能的话,尽量压缩成大文件再上传。一方面减少了大量小文件上传时TCP连接建立和断开的开销。另一方面,S3
虽然上传流量不收费,但是请求还是要收费的。
第三,必须每天在本地和S3之间同步文件。现有文件的数量非常大(数百万)。如何提高效率?
Aws s3 sync命令可以将本地文件同步到s3,并且只同步已更改的部分。但是,sync需要先列出列表。
相比之下,S3。如果文件数量非常大,列出所有对象需要花费大量时间,甚至可能会卡住。
解决方案:仅同步已更改的目录。比如根据日期目录同步。
AWS S3 sync/data/2018/03/13 S3://bucket/data/2018/03/13
如果每天变化的数据分布在不同的目录中,可以在Dynamodb中记录这些变化,同步时只同步变化的部分。
4.S3支持断点续传吗?
解决方案:断点续传的实现在于根据内容-长度将其划分为多个范围。没有传输完的可以保留,下次可以继续传输。
S3支持多部分分段传输。有三个步骤:
1.启动多部分上传:初始化任务。
2.零件上传:将文件分成多个块,每个块有相同的上传ID和不同的零件。
第10号.不管顺序如何,不同的块被分开传输。
3.完整的多部分上传:在所有的块完成后,将这些块合并到S3对象中。通用程序,如AWS。
CLI,如果某些部分未完成,重试后超时,将调用中止多部分上传,所有已上传到S3的部分将被删除,任务将终止。
S3没有提供直接的断点续传API,可以通过在程序中添加一个逻辑来实现。如果第二阶段的一部分尚未传输,则不会调用第三阶段。
完成/中止.这样,已经传输的部分将保留在S3中,直到完成/中止。
5.下载S3文件时,应用程序会判断MD5以防止文件传输被篡改,但大文件总是会出错。
S3大文件传输使用多部分分段。对于每个数据段,MD5是单独计算的。最后,当任务完成时,再次计算所有段的MD5,得到
S3 Etag值。
应用程序只比较某个段的MD5值,与S3 Etag不一致,因此出现错误。
6.在移动应用上传到S3的场景下,S3预签名URL和Cognito有什么区别?
最后一种解决方案:手机客户端上传时,需要在服务器端生成一个预签名的URL,并返回给客户端。客户端使用这个临时URL,没有凭据。
我可以上传。其实上传的时候,你在服务器生成URL的时候使用了IAM用户权限,相当于用这个IAM用户上传。这种方法的局限性在于,预先签名的URL
我不知道整个上传对象的大小,所以我不能使用S3多部分。对于大文件,传输效率比更高。
评论前必须登录!
注册