我可以将 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 编码