为什么即使有小文件,aws s3 getObject的执行速度仍然很慢?

时间:2019-07-19 12:01:19

标签: amazon-web-services amazon-s3 latency aws-php-sdk

我对亚马逊网络服务还比较陌生。在编写新的Web应用程序时出现问题。我目前正在将个人资料图片存储在s3存储桶中。

我不希望仅授权成员公开显示这些个人资料照片。所以我有一个像这样的php文件:

此php文件执行getObject并发送标题以显示图片,但前提是允许用户查看图片。我查询数据库,还检查会话以确保当前登录的用户可以访问图片。一切正常,但是即使在较小的文件(40kb)上,执行get请求也要花费大约500毫秒。在更大的文件上,它的长度甚至更长,而且如果我使用不同的查询字符串值多次将php文件嵌入img标签中。

我需要提及的是,我正在使用apache网络服务器在localhost环境中进行测试。

问题可能是getObject已优化为可以从ec2实例运行,并且如果我要在ec2上进行测试,响应时间会更好吗? 我的s3位于伦敦,并且正在通过良好的互联网连接在匈牙利进行测试,因此我不确定此响应时间是否应该到达这里。

我读到其他人也有类似的问题,但是据我了解,从s3到将文件传输到ec2所需的时间应该最少,因为它们都在云中,并且这些服务与所有其他aws之间的延迟服务应该最少(至少在同一地区)。

请不要在评论中告诉我,我应该公开我的存储桶,并将直接链接嵌入到文件中,因为出于明显的原因,该选项不可行。我也不想出于各种原因生成预签名的网址。

我也在不查询数据库的情况下进行了测试,实质上,代码中唯一的逻辑就是获取对象并将其显示给用户。即使这样,我也可以获得400毫秒以上的响应时间。 我也尝试过使用dosObjectExist(),但我仍然需要等待300-400毫秒才能使我得到响应。

Multiple get request to the same php file as image source

更新

我在ec2实例上对其进行了测试,并且响应时间更快。我测试了多个文件,一切都很好。似乎如果在localhost上使用getObject,则连接到s3并获取数据所需的时间成倍增加。 谢谢您的回答!

0 个答案:

没有答案