gre*_*epe 5 amazon-web-services amazon-kinesis aws-lambda aws-api-gateway
我正在构建一个无服务器的Web跟踪系统,该系统使用AWS API Gateway为其跟踪像素提供服务,每当跟踪请求到达时,它就会调用Lambda函数,以将跟踪事件写入Kinesis流。
Lambda函数本身并没有做任何花哨的事情。它只是接受传入的事件(它自己的参数)并将其写入流中。本质上,它只是:
import boto3
kinesis_client = boto3.client("kinesis")
kinesis_stream = "my_stream_name"
def return_tracking_pixel(event, context):
...
new_record = ...(event)
kinesis_client.put_record(
StreamName=kinesis_stream,
Data=new_record,
PartitionKey=...
)
return ...
Run Code Online (Sandbox Code Playgroud)
有时,我会在Lambda执行期间遇到一个怪异的高峰,这导致我的某些Lambda函数调用超时,并且跟踪请求丢失了。
这是在受影响的时间段内Lambda函数的1分钟调用计数的图表:
在20:50和23:10之间,我突然看到许多调用错误(错误计数为1分钟):
这显然是由Lambda执行超时(每1分钟间隔中的最长持续时间)引起的:
我的Kinesis流(数据输入,放置记录数,put_record成功计数等,都看起来很正常)和我的API GW(调用数均与API GW调用数相对应)都没有任何异常在API GW的限制内)。
是什么原因导致Lambda函数执行持续时间突然(看似随机发生)?
编辑:既不限制lambda函数,这是我的第一个想法。
只是补充我的 2 美分,因为如果没有额外的日志记录或一些 X 射线分析,就没有太多的调查工作。
AWS Lambda 有时会强制回收容器,即使您的函数正在合理地运行和预热,这也会感觉像是冷启动。这可能会带来所有与冷启动相关的问题,例如,如果您的 Lambda 附加了 VPC,则 ENI 会出现额外延迟等等……但即使对于像您这样的简单函数,1 秒超时有时对于冷启动来说过于乐观。
除了一些人有证据之外,我不知道有任何关于强制回收的文件。
“我们每天都会看到大约 7 次强制回收。” 来源
“而且,即使一旦预热,高并发函数的回收速度也比内存中只有少数函数的函数要快得多。” 来源
我想知道你如何确认情况确实如此。也许您可以检查 Cloud Watch 日志流中出现的那些错误是否来自以前从未出现过的容器。
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |