首页 > 解决方案 > 为什么即使是小文件,aws s3 getObject 也执行缓慢?

问题描述

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

我不希望公众看到这些个人资料图片,只有授权会员才能看到。所以我有一个这样的php文件:

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

我需要提一下,我正在使用 apache 网络服务器在 localhost 环境中对此进行测试。

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

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

请不要在评论中告诉我我应该公开我的存储桶并嵌入文件的直接链接,因为出于显而易见的原因,它不是一个可行的选择。由于各种原因,我也不想生成预签名的 url。

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

对同一php文件的多个get请求作为图像源

更新

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

标签: amazon-web-servicesamazon-s3latencyaws-php-sdk

解决方案


推荐阅读