Aws lambda 配置的并发对Lambda函数的响应时间影响很小
我们使用的是无服务器体系结构、AWS Lambda和API网关。lambda的执行时间在几毫秒范围内。客户端的最终响应以秒为单位接收(这远远超过lambdas执行时间,即使考虑到冷启动场景,初始持续时间也被计算在内) 使用API网关日志对此进行调试时,存在以秒为单位的集成延迟,这使得端到端响应相当慢。为了删除init持续时间或冷启动,我在CloudWatch中添加了一些规则,用于定期调用lambda使其保持温暖 init持续时间被完全删除,这也有助于减少集成延迟。有一些lambda无法调度,因为调用它们需要身份验证,为此,我添加了5的规定并发性 这个Lambda在日志中也有init duration。Lambda资源调配是消除冷启动的另一个选项,但在API网关上提供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无法调度,因为
持续时间: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函数,这始终是一个好主意
- 提供更多实例->仅可能达到某个(软)限制