java - AWS lambda 的 AmazonS3.readObject() 非常慢
问题描述
我正在从 AWS lambda 读取位于 S3 中的 1.5 MB 文件:
public class AwsFileStorage {
private static final AmazonS3 amazonS3;
static {
var builder = AmazonS3ClientBuilder.standard();
builder.setRegion(MY_REGION);
amazonS3 = builder.build();
}
public InputStream read(String filekey) {
var initTime = Instant.now(); // Timer ON
var s3Object = amazonS3.getObject("bucket-name", filekey);
var endTime = Instant.now(); // Timer OFF
var millis = Duration.between(initTime, endTime).toMillis();
System.out.println(millis);
return s3Object.getObjectContent();
}
}
当我直接从 AWS 控制台在 512 MB AWS lambda(在我的 S3 的同一区域)上运行此代码时,我得到:
3642 毫
但是当我运行相同的代码时,也会从 AWS S3 中获取文件:
486 毫
我不明白,AmazonS3.getObject()
我的笔记本电脑的执行速度怎么可能比在 AWS 基础设施上执行的 lambda 快 10 倍,即使文件也托管在同一个 AWS 基础设施 - 同一个区域。
这种延迟有什么原因吗?有没有其他更优化的方法可以从 AWS lambda 读取托管在 S3 中的文件?
提前致谢
解决方案
这取决于您在笔记本电脑上运行该进程时配置的内存和 CPU 分配。这可能远高于 512 mb
推荐阅读
- tomcat - 无法使用 POSTMAN 将数据发布到 Apache Tomcat 服务器
- copy - 不使用 tablemodel 克隆 JTable
- node.js - 另一台电脑上的 Debugger-ui
- java - 在java中的主类中设置一个类中的数组大小
- c++ - 指针空检查评估为真,即使它没有分配空值
- node.js - 在 Multer-s3 上重命名上传的图像
- python-2.7 - 如何在 matplotlib 中重复调用 ylim()?
- php - 如何使用 Mock 函数在 Phpunit 中获取异常
- android - Android,如何提取系统应用程序并执行一些检查
- ios - 如何用另一个 UIView 的矩形切割 UIView 的顶角