【问题标题】:Google Cloud Function timeout overrun workaround/alternative谷歌云函数超时溢出解决方法/替代方案
【发布时间】:2021-06-26 23:41:13
【问题描述】:

我的函数需要每天运行一次。在这种情况下,我想使用Google Cloud Functions 服务和Cloud Scheduler(自动运行它)。问题是Cloud Functions 将最大超时设置为 9 分钟(在该时间函数终止之后)。我的函数不是 CPU 密集型或内存密集型,但需要 ~30 minutes 左右才能执行。这种情况是否有任何解决方法/替代方案?

一点上下文:我想每天运行一次的功能是两个 REST API 之间的简单数据同步。由于一个 API 的速率限制较低,所以需要很长时间。

【问题讨论】:

    标签: google-cloud-platform google-cloud-functions


    【解决方案1】:

    因为您知道 API 的速率限制,您应该能够计算出您在 8 分钟内可以进行多少次调用。然后,在您进行这些调用后,将您的进度保存到 Cloud Firestore,该位置由另一个使用 onCreate 监听它的 Cloud Functions 监控,例如 /_functionsAsyncTasks。在此 Cloud Function 中,从上次中断的地方继续,然后再进行 8 分钟的通话。重复,直到您处理完所有电话。

    【讨论】:

    • 谢谢!在我看来,这似乎是比cloud run 更好的解决方案,但我懒得改变实现那么多。下次我会记住的
    【解决方案2】:

    另一种方法是使用Cloud Run(您只需要添加一个网络服务器并构建一个标准容器。如果您共享您的语言,我可以为您提供示例)。 Cloud Run 与 Cloud Function 具有相同的行为(如果您设置了concurrency to 1),最多可以处理 60 分钟的请求。

    但是,请注意 Cloud Scheduler。它最多只能处理 30 分钟的请求,之后,由于超时,它认为请求失败。但是,Cloud Run 请求最多可以持续 60 分钟(在 Cloud Run 停止处理之后)。在这种情况下,不要在您的 Cloud Scheduler 上设置 retry policy 并让 Cloud Run 继续处理整整一个小时。不好的一面是,在发生真正错误的情况下,您无法使用 Cloud Scheduler 重试策略。

    【讨论】:

    • 谢谢! Cloud run 似乎是解决这个问题的最简单方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多