【问题标题】:AmazonDynamoDBClent instantiation latencyAmazonDynamoDBClent 实例化延迟
【发布时间】:2017-03-14 03:49:28
【问题描述】:

我正在用 Java 创建 AWS Lambda 函数来访问 DynamoDB 表。我注意到 AmazonDynamoDBClent 实例化有时需要几秒钟 - 通常是在我有一段时间没有调用我的 lambda 函数之后。

通常意味着当我连续向我的 Lambda 发送多个请求时,我会等待大约 10 秒以等待第一个响应,而等待任何后续调用的时间则少于 1 秒。但这不是一个规则 - 有时中间的一些请求也很慢。

我尝试了几个带或不带参数的 AmazonDynamoDBClent,但没有发现任何区别。

任何提示如何摆脱这种延迟?使用 DynamoDB 配置什么?拉姆达?

【问题讨论】:

    标签: java amazon-web-services lambda amazon-dynamodb


    【解决方案1】:

    定期执行 NO-OP 有助于使您的 Lambda 函数保持温暖。 newrelic 执行的Measurements 建议每隔 1 到 10 分钟调用一次函数就足以避免频繁的冷启动。 New containers may be used 即使你的函数在响应负载时是热的。

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

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

    在构建 zip/jar 时,您是依赖整个 SDK 还是仅依赖 DynamoDB SDK?为尽可能小的包清除不需要的依赖项。此外,如果您只需要一个库中的单个函数,那么积极地向后移植代码是减小包大小的另一种方法。

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

    最后,您是否尝试从其他服务(如 S3 中的文件)读取 lambda 配置,您可以采取以下步骤来减少 lambda 函数的设置时间:

    1. 如果配置很少更改或者您需要处理的组合有限且很小,则将其放入 lambda 函数中
    2. 重构您的处理程序以从 InputStream 有效负载中读取更多配置
    3. 使用 Lambda 环境变量管理配置。

    【讨论】:

    • 感谢您的好评!是的,切换到 NodeJS 以及更频繁地调用 lambda 有很大帮助。我将尝试使用 CPU/内存,看看它是否有任何显着差异。
    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多