【问题标题】:Close redis connection on google cloud function end在谷歌云功能端关闭redis连接
【发布时间】:2019-08-25 16:43:44
【问题描述】:

当云函数实例终止时,如何关闭从云函数到 redis 内存存储的连接? (我相信关闭我需要调用redis.quit(),但我只是不知道什么时候,我不能在函数返回后立即关闭它们,因为函数实例可以是reused

因为我只是让连接保持打开状态,所以现在我收到“ECONNRESET”错误。

或者,如果像 this 这样的东西是不可能的:

process.on("exit", function(){//also process is not defined in cloud functions
    redisClient.quit();
});

在 redis 配置中指定超时是最好的选择吗? (在 gcp memorystore 中如何做到这一点?)

【问题讨论】:

    标签: node.js redis google-cloud-platform google-cloud-functions google-cloud-memorystore


    【解决方案1】:

    当您的 Cloud Function 入口函数返回时,您的容器有资格被终止,恕不另行通知。

    你有两个选择:

    • 在每次函数调用时打开和关闭连接
    • 使用连接池并管理不符合 Cloud Functions 预期用途的连接错误。

    如果您的函数使容器保持温暖,那么带有错误处理的连接池“可能”会受益,而错误处理和测试所有可能的问题的成本并不可观。 Cloud Functions 应用程序应设计为“无状态”。尝试在 Cloud Functions 中的调用之间保持状态(连接、数据等)并不是一个好策略。

    我会使用选项#1 来设计我的系统。 Cloud Functions 是“轻量级”,意味着启动、快速完成任务并关闭。

    【讨论】:

      【解决方案2】:

      Google Cloud Functions 中没有定义生命周期侦听器。每个云函数都需要尽快运行,并在完成处理后关闭它打开的所有资源。

      【讨论】:

      • 我如何知道何时调用 redis.quit()?如果我调用它然后函数再次运行 redis 错误,因为连接已关闭
      • 云函数应该是无状态的。所以如果你依赖redis,你应该在函数启动时打开连接,在函数结束时关闭连接。或者,您可以按需打开连接,并使其保持打开状态,如果远程服务可以处理该问题,例如实现套接字超时。
      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 2021-01-25
      • 2019-12-08
      • 2017-11-14
      • 2018-07-15
      • 2019-05-12
      • 2020-05-11
      • 2019-06-15
      相关资源
      最近更新 更多