2015-11-10 61 views
1

我在Java中创建AWS Lambda函数以访问DynamoDB表。我注意到AmazonDynamoDBClent实例化有时需要几秒钟 - 通常在我暂时没有调用lambda函数之后。AmazonDynamoDBClent实例化延迟

正常情况下,当我连续向我的Lambda发送多个请求时,我会等待大约10秒钟的第一个响应,而小于秒钟的任何后续呼叫。但这并不是一条规则 - 中间的一些请求不时也是缓慢的。

我试了几个AmazonDynamoDBClent有或没有参数,并没有看到任何区别。

任何提示如何摆脱这种延迟?任何要使用DynamoDB进行配置? LAMBDA?

回答

0

定期执行NO-OP将有助于保持Lambda函数温和。由newrelic执行的Measurements表明,以1到10分钟的间隔调用函数足以避免频繁冷启动。即使您的功能在响应加载时变得温暖,也可以使用New containers may be used

寻找延迟改进的其他地方包括Lambda函数的CPU /内存占用空间,可执行程序包的大小,运行时间和其他无害的网络请求。

AWS forum和上述新增文章中的交互表明,增加Lambda函数容器的CPU /内存大小是控制和减少延迟的另一好方法。

当您构建zip/jar时,您是依赖于整个SDK还是只使用DynamoDB SDK?尽可能减少对最小包装的不必要的依赖关系。另外,积极回溯代码是另一种减少程序包大小的方法,如果从库中只需要一个函数即可。

如果您的应用程序允许,您可能会遇到Python和NodeJS运行时延迟更低。

最后,你试图读取配置为您的拉姆达从其他服务,如在S3中的文件时,您可以采取以下措施,以减少你的lambda函数建立时间:

  1. 烘烤配置成如果lambda函数非常不频繁地更改,或者您有一组有限且小的组合来处理
  2. 重构您的处理程序以从InputStream有效内容中读取更多配置
  3. 使用Lambda环境变量管理配置。
+0

非常感谢!是的,切换到NodeJS以及更频繁地调用lambda帮助了很多。我会尝试使用CPU /内存来查看它是否有任何显着差异。 – slava