我在AWS中有一个NodeJs Lambda函数需要读取一些数据。作为数据来源,我们尝试了两个选项 - S3
和DynamoDB
。它们都有相同的问题 - 当我们进行负载测试(100秒内10 req / sec)时,对S3/DynamoDB
的一些请求在30秒内无法完成,这是我们的Lambda超时。请求本身非常轻松 - 对于S3
它是1KB文件而对于DynamoDB
,它是一个只有一个记录的表。平均而言,这些请求的时间不到100毫秒,但有时我们会谈到这些非常长的峰值。
如此长的请求率非常小 - 不到1%,但这对我们来说仍然是不可接受的。此外,我没有看到为什么我们有如此长的回应的原因。
我们注意到的另一件事是,那些30秒+请求通常在不调用S3/DynamoDB
资源的长时间(4小时或更长时间)之后发生。
我能想到的唯一原因是,在长时间不活动期后,AWS基础设施无法足够快地创建所需数量的ENI。需要ENI,因为S3
和DynamoDB
都是通过aws-sdk
通过HTTP调用的。但这只是一个我不知道如何验证的猜测。
目前,我正在考虑通过向S3/DynamoDB
提出请求来预热ENI,但我还没有尝试过。
如果有人遇到过类似的问题,我会很感激如何解决这个问题。
P.S。增加Lambda超时不是我们的选择。 30秒足以做出这么简单的电话。