我可以将 Google CloudFunctions 用于可靠的应用程序目的吗?

Posted

技术标签:

【中文标题】我可以将 Google CloudFunctions 用于可靠的应用程序目的吗?【英文标题】:Can I use Google CloudFunctions for reliable application purposes? 【发布时间】:2021-03-28 08:19:38 【问题描述】:

我记得读过一篇文章,其中解释说不能保证 Cloud Functions 执行,尤其是按正确的顺序执行。我再也找不到这方面的任何来源了。 这仍然是最新信息吗?

我知道函数的启动可能需要几秒钟,尤其是在冷启动函数时。

    每次在特定 Firestore 集合中创建文档时,我能否可靠地递增一个数字,而不会混淆我的数字?我知道这种做法经常发生,但我从未见过有关这样做是否安全的信息。

跟进问题一,在使用 Cloud Functions 支付后端服务时是否有危险信号?

    我能否确定 Cloud Functions 是按照触发顺序执行的,即它们是排队执行还是并行执行?

【问题讨论】:

【参考方案1】:

每次在特定 Firestore 集合中创建文档时,我能否可靠地递增一个数字,而不会混淆我的数字?

您当然可以编写代码来做到这一点。您将需要跟踪另一个文档中文档的运行计数,并使用事务来使其保持最新。

我不建议这样做。 Firestore 中的一种反模式是对集合中的文档施加顺序增加的数量。如果您想要基于时间的排序,您应该考虑改用时间戳

我能否确定 Cloud Functions 是按照触发顺序执行的,即它们是排队执行还是并行执行?

Cloud Functions 绝对不保证函数调用将以任何顺序发生。它们是异步的,可以在多个服务器实例上并行执行,具体取决于应用到函数的负载。

强烈建议通读documentation,了解Cloud Functions提供的执行环境。

【讨论】:

扩展一点(因为我正在积极使用 Cloud Functions)- Cloud Functions 的 强大 是它们的多个服务器实例,可能在全球范围内。这种能力的限制根据定义不是一个单一的阻塞点/队列,所以你必须确保你的函数是“幂等的”——一个花哨的词,意思是每个run 是完全独立的,AND 在某些情况下可能会运行 两次 并且必须具有 exact 相同的效果(即创建新的云端功能中的 Firestore 记录,无需更仔细的检查)

以上是关于我可以将 Google CloudFunctions 用于可靠的应用程序目的吗?的主要内容,如果未能解决你的问题,请参考以下文章

从 Cloud Function (python) 写入 Google Cloud Storage

在 Terraform 中创建 google_logging_project_sink 不会将事件推送到 Pub/Sub

Firebase:将数据传递给 cloudfunction 导致:对象无法用 JSON 编码

如何修改后台 Cloud Function 的 Google Cloud Pub/Sub 订阅确认截止日期

我可以在不等待的情况下提交Firestore批量写入吗?

从 Cloud Function 本身获取 Cloud Function 名称