Aws lambda 配置的并发对Lambda函数的响应时间影响很小

Aws lambda 配置的并发对Lambda函数的响应时间影响很小,aws-lambda,aws-api-gateway,aws-serverless,Aws Lambda,Aws Api Gateway,Aws Serverless,我们使用的是无服务器体系结构、AWS Lambda和API网关。lambda的执行时间在几毫秒范围内。客户端的最终响应以秒为单位接收(这远远超过lambdas执行时间,即使考虑到冷启动场景,初始持续时间也被计算在内) 使用API网关日志对此进行调试时,存在以秒为单位的集成延迟,这使得端到端响应相当慢。为了删除init持续时间或冷启动,我在CloudWatch中添加了一些规则,用于定期调用lambda使其保持温暖 init持续时间被完全删除,这也有助于减少集成延迟。有一些lambda无法调度,因为

我们使用的是无服务器体系结构、AWS Lambda和API网关。lambda的执行时间在几毫秒范围内。客户端的最终响应以秒为单位接收(这远远超过lambdas执行时间,即使考虑到冷启动场景,初始持续时间也被计算在内)

使用API网关日志对此进行调试时,存在以秒为单位的集成延迟,这使得端到端响应相当慢。为了删除init持续时间或冷启动,我在CloudWatch中添加了一些规则,用于定期调用lambda使其保持温暖

init持续时间被完全删除,这也有助于减少集成延迟。有一些lambda无法调度,因为调用它们需要身份验证,为此,我添加了5的规定并发性

这个Lambda在日志中也有init duration。Lambda资源调配是消除冷启动的另一个选项,但在API网关上提供Lambda响应的时间内,这不会产生影响

我已按照以下链接将配置的并发性分配给lambda:

我已将配置添加到的Lambda的CloudWatch日志:

持续时间:1331.38毫秒计费持续时间:1332毫秒内存大小:256 MB最大使用内存:130 MB初始持续时间:1174.18毫秒

在API网关和Lambda日志中我可以注意到的一件事是,对Lambda的请求是在
2021-02-15T11:51:36.621+05:30
从API网关发送的,但它是在
2021-02-15T11:51:38.535+05:30
在Lambda收到的。在Lambda上获取请求大约有2秒的延迟

AWS X射线追踪

我已经为API gateway和Lambda启用了AWS X射线日志记录,这是我通过跟踪得到的。该请求总共花费了595毫秒,但在邮递员处,响应是在1558毫秒内收到的。从那里,从API网关接收响应会增加大约1秒的延迟


我认为原因是,配置的并发性5是不够的,您仍然会遇到Lambda函数的冷启动。这意味着,如果外部服务正在调用您的API端点(即API网关后面的Lambda函数),您的Lambda函数将具有5个实例。如果我们假设Lambda函数每秒可以处理2个请求(每次调用500毫秒),那么使用Lambda函数大约每秒可以处理10个请求。如果外部服务每秒发出20个请求,AWS Lambda会尝试启动新实例,因为现有实例正忙于处理请求。这会导致外部服务由于功能冷启动而经历高响应时间

也可以考虑,你的lambda函数的实例不是“永远”,而是在某个时刻被清理干净。也就是说,如果您的流量模式中出现了许多峰值,那么这可能意味着在一个峰值之后,实例的生存时间大约为15分钟,然后AWS Lambda将关闭它们以仅保留5个已配置的实例,如果出现另一个峰值,您将看到与以前相同的问题

请注意:这是对幕后发生的事情的一个非常简单的解释,根据您的描述,这是一个很好的猜测。如果您能提供一些示例数字(例如init持续时间、执行持续时间、响应时间)和一些示例代码来说明您在Lambda函数中所做的工作,这将有所帮助。另外:您正在使用哪个运行时?你的交通模式如何

潜在解决方案
  • 减少Lambda函数的冷启动时间->对于API网关后面的Lambda函数,这始终是一个好主意
  • 提供更多实例->仅可能达到某个(软)限制

我有什么遗漏吗?-你真的没有提供任何信息来评估情况。你所说的“响应时间”到底是什么意思?您是指Lambda本身的运行时间还是调用者的端到端往返时间?你的Lambda在干什么?它总是很慢还是只是第一次调用?@KaiBurjack第一次调用非常慢。随后的调用相对较快,但并不恰当。我在API gateway得到的集成延迟超过1秒。您是否可能仅在Lambda处理程序中初始化某些仅在第一次实际调用时才初始化的内容(与Lambda开始时相反)?了解Lambda的外观以及您在何处执行的操作非常有用。请给我们数字、数据、,代码和/或日志-至少在Lambda日志的最后几行记录了inits等的持续时间。lambda函数有多大,它是用哪种语言编写的?您已设置了多少内存?请给我们看一些API网关的日志。现在这几乎是猜测;-)分配了provisionedconcurrency 5的lambda不会从任何地方命中,而不是从我的本地计算机命中。因此,配置并发5似乎并不不足。关于减少冷启动,我使用cron表达式从一些lambda中消除了冷启动持续时间,该表达式每5分钟点击一次,以保持它们温暖。对于Lambda,触发器无法计划调用Lambda(因为这需要身份验证),我使用了设置,但影响不明显。更新了问题,添加了Lambda和API网关的跟踪。请查收。