Amazon web services VPC下Lambda函数的响应时间不一致
最近,我们开始探索AWS lambda技术,希望我们能够将所有的微服务变成无服务器的。这些服务目前正在生产环境中的EC2实例中运行。所以我们选了其中一个,试着让它成为lambda。在那里,我被看演出所困住了。我相信我做错了什么,需要你的帮助来解决这个问题。 我们有一个java应用程序,在Tomcat上的EC2实例中运行,它从同一VPC和同一区域下的另一个实例获取数据。请注意,这些服务器之间有几个来回调用。对Tomcat服务的单个请求所花费的时间在4到5秒之间,这是相当一致的。现在,当我们在Lambda基础设施下运行相同的服务时,响应变得非常不一致(5到25秒) 在第一阶段,我没有将我们的VPC与lambda联系起来。我认为这可能是导致响应时间不一致的原因,因为在Lambda函数和我们的一个EC2实例之间有几个http请求。所以我把我们的VPC和Lambda联系起来,但遗憾的是看到了相同的响应时间。下面是我做的vpc配置。 1.我们只有一个VPC包含所有EC2实例。我通过AWS控制台将其与Lambda功能配置相关联。 2.我们在专有网络中有2个子网。vpc配置中给出了这两个子网。 3.我已经添加了分配给我的第二个EC2实例的安全组ID,我正在进行呼叫 我的理解是,如果我将VPC与Lambda函数关联,该函数将在同一VPC下的机器上运行。因此,我们应该在Lambda函数和相关EC2实例之间获得GBPS的LAN速度。但这可能不会发生。我们的Tomcat服务提供可预测的响应时间,因为它们位于同一VPC LAN上。 请注意,我是通过从客户端调用函数来直接测量函数响应时间的,到目前为止,两者之间没有API网关 以下是我的Lambda在部署10次后续调用后所花费的时间(以毫秒为单位): 16797, 17965, 10026, 5846, 7689, 5118, 4349, 9297, 4378, 11692 其中,Tomcat服务(在同一数据集中运行相同的代码)在随后的10次调用中花费的时间如下。 3597, 3568, 4009, 3808, 3585, 3859, 3576, 3657, 3444, 3440 请注意,对Tomcat服务的服务调用不会超过4秒。 “将Lambda与VPC关联”是否意味着Lambda程序与位于同一VPC上的其他EC2实例在同一LAN上运行?或者是通过互联网的安全连接 Edit1: 以下是您提出的所有要点的注释Amazon web services VPC下Lambda函数的响应时间不一致,amazon-web-services,aws-lambda,amazon-vpc,Amazon Web Services,Aws Lambda,Amazon Vpc,最近,我们开始探索AWS lambda技术,希望我们能够将所有的微服务变成无服务器的。这些服务目前正在生产环境中的EC2实例中运行。所以我们选了其中一个,试着让它成为lambda。在那里,我被看演出所困住了。我相信我做错了什么,需要你的帮助来解决这个问题。 我们有一个java应用程序,在Tomcat上的EC2实例中运行,它从同一VPC和同一区域下的另一个实例获取数据。请注意,这些服务器之间有几个来回调用。对Tomcat服务的单个请求所花费的时间在4到5秒之间,这是相当一致的。现在,当我们在Lam
public class Lambda implements RequestStreamHandler {
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
try {
JSONObject payload = (JSONObject) new JSONParser().parse(new InputStreamReader(inputStream, "UTF-8"));
System.out.println("payload = " + payload);
outputStream.write(Request.Get("http://" + (String)payload.get("ip") + "/api/xxx").
execute().returnContent().toString()).getBytes());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
有效负载中的ip作为Lambda1的公共ip(没有VPC)和Lambda2的私有或本地ip(启用VPC)从呼叫方发送。您所经历的被称为冷启动。此时必须配置底层AWS基础结构,并将函数放入内存。在专有网络中,由于提供弹性网络接口(ENI)所需的时间,问题通常更严重。由于Lambda将使容器在一段时间内保持可用和温暖,因此后续的一些调用会更快。您可以在AWS文档中找到更多信息。下面的链接也是相关的- 此外,还有几个项目可以让您的lambda保持温暖。这里有一些不错的-
具有VPC的Lambda意味着Lambda在同一组子网上运行