【问题标题】:Idempotency in Google Cloud Function HTTPS triggersGoogle Cloud Function HTTPS 触发器中的幂等性
【发布时间】:2018-12-19 12:35:12
【问题描述】:

大多数 firebase 云函数触发函数签名都包含一个上下文对象,该对象具有 eventId 属性。

查看文档,HTTPS 触发器似乎不是这种情况。

假设每个请求只触发一次 HTTP 函数调用是否安全?

【问题讨论】:

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


    【解决方案1】:

    杰克的回答大部分是正确的,但我会在这里澄清一下。

    关于执行语义的文档is here。说清楚:

    HTTP 函数最多调用一次。这是因为 HTTP 调用的同步性质,这意味着任何错误 处理函数调用将返回而不重试。这 HTTP 函数的调用者应处理错误并重试 如果需要。

    不保证 HTTP 函数会准确执行一次。某些执行可能在到达函数之前失败。这与提供至少一次执行的所有其他(后台)类型的函数不同:

    后台函数至少被调用一次。这是因为 处理事件的异步性质,其中没有调用者 等待响应并可以重试错误。发出的事件 调用函数,并在失败时重试(如果请求 功能部署)和其他零星重复调用 原因(即使没有请求重试失败)。

    因此,要 100% 正确的后台函数,它们应该是幂等的。

    如果您想重试失败的 HTTP 函数,客户端必须执行重试,在这种情况下,您可能希望该 HTTP 函数也是幂等的。在这种情况下,客户端必须在重试时提供唯一密钥。

    请注意,无法将 HTTP 函数标记为内部重试。这仅适用于后台函数。

    【讨论】:

      【解决方案2】:

      与具有至少一次传送保证的后台函数相比,HTTPS 函数只会触发一次。

      (我找不到我阅读它的文档。如果我找到它,我会更新问题)

      【讨论】:

      • 谢谢,我会等着看 Google 的人是否可以确认,因为当我问这个问题时,我从他们的支持人员那里得到了回复:“不,所有功能(背景和 http)可能触发超过一次。事件至少传递一次,这意味着很少会发生虚假的重复。因此我们建议始终使您的函数具有幂等性。”但他也写了这个关于 eventId 的文章:“......看起来这目前不受支持。似乎没有记录。它可以实现,但是我们没有开箱即用的可用...... "
      • Jack 的回答和您从支持部门获得的回答都是正确的:Cloud Functions(然后您启用重试)具有“至少一次”保证。在极少数情况下,它们可能会多次触发,您应该编写函数来处理这种情况。见firebase.google.com/docs/functions/retries#semantics_of_retry
      • @FrankvanPuffelen Jack 的回答和我从支持部门得到的回答不能同时正确?只有一次与我书中的至少一次不同。还是您的意思是 HTTP 触发器只会触发一次,而其他触发器可能会触发“至少一次”?谢谢
      • “所有函数(后台和http)都可能触发多次”。如果您有特定问题,我建议您发布重现该问题的代码。这通常比试图从不同地方给出的单词中获取含义要高效得多。
      • 查看我的回答,了解这里发生的事情的更详细说明。 HTTP 触发器没有任何内置的重试语义。 @FrankvanPuffelen
      猜你喜欢
      • 2018-06-06
      • 2021-11-11
      • 2020-08-31
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2022-08-16
      • 2018-05-16
      • 2020-10-26
      相关资源
      最近更新 更多