Aws lambda 夸克斯-发电机B+;HTTP lambda慢速第一响应

Aws lambda 夸克斯-发电机B+;HTTP lambda慢速第一响应,aws-lambda,amazon-dynamodb,quarkus,Aws Lambda,Amazon Dynamodb,Quarkus,我已经创建了一个测试项目,其中我结合了两个指南:和。这项工作的最终目标是创建一个示例项目,其中lambda与DynamoDB通信,所有这些都是本地编译的(使用GraalVM) 这一点相对来说效果不错。我使用第二个指南中的工具将项目部署到AWS lambda,调用端点时得到的响应与预期的一样 但是,我对性能有一些疑问,特别是在创业之后 在第一个指南中点击简单的“hello”端点时,时间如下所示: 2021-05-09T20:41:06.986+02:00 START RequestId: cc

我已经创建了一个测试项目,其中我结合了两个指南:和。这项工作的最终目标是创建一个示例项目,其中lambda与DynamoDB通信,所有这些都是本地编译的(使用GraalVM)

这一点相对来说效果不错。我使用第二个指南中的工具将项目部署到AWS lambda,调用端点时得到的响应与预期的一样

但是,我对性能有一些疑问,特别是在创业之后

在第一个指南中点击简单的“hello”端点时,时间如下所示:

2021-05-09T20:41:06.986+02:00   START RequestId: ccc69797-3e58-47b1-a475-f2b0cc93cd7d Version: $LATEST

2021-05-09T20:41:06.986+02:00   __ ____ __ _____ ___ __ ____ ______

2021-05-09T20:41:06.986+02:00   --/ __ \/ / / / _ | / _ \/ //_/ / / / __/

2021-05-09T20:41:06.986+02:00   -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \

2021-05-09T20:41:06.986+02:00   --\___\_\____/_/ |_/_/|_/_/|_|\____/___/

2021-05-09T20:41:06.986+02:00   2021-05-09 18:41:06,980 INFO [io.quarkus] (main) quarkus-amazon-lambda-http-archetype 1.0-SNAPSHOT native (powered by Quarkus 1.13.3.Final) started in 0.239s.

2021-05-09T20:41:06.986+02:00   2021-05-09 18:41:06,985 INFO [io.quarkus] (main) Profile prod activated.

2021-05-09T20:41:06.986+02:00   2021-05-09 18:41:06,985 INFO [io.quarkus] (main) Installed features: [amazon-dynamodb, amazon-lambda, cdi, mutiny, resteasy, resteasy-jackson, resteasy-mutiny, smallrye-context-propagation]

2021-05-09T20:41:07.225+02:00   END RequestId: ccc69797-3e58-47b1-a475-f2b0cc93cd7d

2021-05-09T20:41:07.225+02:00   REPORT RequestId: ccc69797-3e58-47b1-a475-f2b0cc93cd7d Duration: 237.21 ms Billed Duration: 623 ms Memory Size: 128 MB Max Memory Used: 92 MB Init Duration: 385.04 ms
2021-05-09T20:41:06.986+02:00启动请求ID:ccc69797-3e58-47b1-a475-f2b0cc93cd7d版本:$LATEST
2021-05-09T20:41:06.986+02:00______
2021-05-09T20:41:06.986+02:00--/u\///124;/\//u\//__/
2021-05-09T20:41:06.986+02:00-//\
2021-05-09T20:41:06.986+02:00--\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/|_/_/|_/_/|_|\____/___/
2021-05-09T20:41:06.986+02:00 2021-05-09 18:41:06980信息[io.quarkus](主)quarkus amazon lambda http原型1.0本机快照(由quarkus 1.13.3.Final提供动力)在0.239s内启动。
2021-05-09T20:41:06.986+02:00 2021-05-09 18:41:06985信息[io.quarkus](主)配置文件产品已激活。
2021-05-09T20:41:06.986+02:00 2021-05-09 18:41:06985信息[io.quarkus](主要)安装功能:[亚马逊dynamodb、亚马逊lambda、cdi、兵变、resteasy、resteasy jackson、resteasy兵变、smallrye上下文传播]
2021-05-09T20:41:07.225+02:00结束请求ID:ccc69797-3e58-47b1-a475-f2b0cc93cd7d
2021-05-09T20:41:07.225+02:00报告请求ID:ccc69797-3e58-47b1-a475-f2b0cc93cd7d持续时间:237.21毫秒计费持续时间:623毫秒内存大小:128 MB最大使用内存:92 MB初始持续时间:385.04毫秒
我们可以从中看出,启动后大约需要0.25秒才能收到响应(这是意料之中的,我想,我确实没有这方面的经验)。但是,当点击端点“fruits”(返回一个水果列表(duh))时,时间看起来有点不同:

2021-05-09T20:23:00.521+02:00   START RequestId: 1ee2002c-15ad-491e-b24a-591b8d371bae Version: $LATEST

2021-05-09T20:23:00.521+02:00   __ ____ __ _____ ___ __ ____ ______

2021-05-09T20:23:00.521+02:00   --/ __ \/ / / / _ | / _ \/ //_/ / / / __/

2021-05-09T20:23:00.521+02:00   -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \

2021-05-09T20:23:00.521+02:00   --\___\_\____/_/ |_/_/|_/_/|_|\____/___/

2021-05-09T20:23:00.521+02:00   2021-05-09 18:23:00,516 INFO [io.quarkus] (main) quarkus-amazon-lambda-http-archetype 1.0-SNAPSHOT native (powered by Quarkus 1.13.3.Final) started in 0.249s.

2021-05-09T20:23:00.522+02:00   2021-05-09 18:23:00,521 INFO [io.quarkus] (main) Profile prod activated.

2021-05-09T20:23:00.522+02:00   2021-05-09 18:23:00,521 INFO [io.quarkus] (main) Installed features: [amazon-dynamodb, amazon-lambda, cdi, mutiny, resteasy, resteasy-jackson, resteasy-mutiny, smallrye-context-propagation]

2021-05-09T20:23:01.657+02:00   END RequestId: 1ee2002c-15ad-491e-b24a-591b8d371bae

2021-05-09T20:23:01.657+02:00   REPORT RequestId: 1ee2002c-15ad-491e-b24a-591b8d371bae Duration: 1133.83 ms Billed Duration: 1539 ms Memory Size: 128 MB Max Memory Used: 103 MB Init Duration: 404.57 ms

2021-05-09T20:23:30.341+02:00   START RequestId: a546afa3-78a2-4219-8cef-075694c320ac Version: $LATEST

2021-05-09T20:23:30.456+02:00   END RequestId: a546afa3-78a2-4219-8cef-075694c320ac

2021-05-09T20:23:30.456+02:00   REPORT RequestId: a546afa3-78a2-4219-8cef-075694c320ac Duration: 111.38 ms Billed Duration: 112 ms Memory Size: 128 MB Max Memory Used: 105 MB

2021-05-09T20:24:53.644+02:00   START RequestId: 65104eb8-1e53-453a-bd67-ef25d3a919af Version: $LATEST

2021-05-09T20:24:53.815+02:00   END RequestId: 65104eb8-1e53-453a-bd67-ef25d3a919af

2021-05-09T20:24:53.815+02:00   REPORT RequestId: 65104eb8-1e53-453a-bd67-ef25d3a919af Duration: 168.10 ms Billed Duration: 169 ms Memory Size: 128 MB Max Memory Used: 107 MB
2021-05-09T20:23:00.521+02:00启动请求ID:1ee2002c-15ad-491e-b24a-591b8d371bae版本:$LATEST
2021-05-09T20:23:00.521+02:00______
2021-05-09T20:23:00.521+02:00--/u\///124;/\//\//__/
2021-05-09T20:23:00.521+02:00-/////////////,/,
我们可以看到,在得到响应之前,第一个请求需要一秒钟(我观察到它需要更长的时间)。之后的请求到达了同一个端点,但速度相当快(要快得多,即使您要在其上添加启动时间)

所以这里的时间正是我想知道的。为什么从DynamoDB的第一个请求中获得响应要花这么长的时间,我有什么办法可以改进吗?

第一次调用“新”Lambda实例需要更长的时间,因为它必须初始化。这也被称为

检查第二个输出示例的以下两行:

Duration: 1133.83 ms Billed Duration: 1539 ms Memory Size: 128 MB Max Memory Used: 103 MB Init Duration: 404.57 ms

第一行末尾是:
Init Duration:404.57 ms
。第二个没有,因为它不需要初始化

关键是:当一个新的Lambda实例启动时,它需要初始化,这需要时间。对此,您不能做任何事情,除非在延迟是您的最高优先级的情况下尽可能快地进行初始化。您可以尝试减小包的大小(越小越好),您应该避免在初始化代码中进行任何不必要的工作,这可能有助于增加Lambdas内存

另一方面,在Lambda的初始化阶段,有很多事情是绝对应该做的,比如创建服务客户端,从SSM或S3或DynamoDB读取配置,等等。但所有这些都延长了Lambda的初始化时间。好处是,以下所有请求都更快,因为它们不必这样做

如果您不能进一步改进初始化,但您仍然对第一次呼叫延迟不满意,那么据我所知,您有两个选择:

  • 选择另一个“冷启动”时间更快的运行时
  • 请注意,配置的并发确实需要额外的成本。
    Duration: 111.38 ms Billed Duration: 112 ms Memory Size: 128 MB Max Memory Used: 105 MB