firebase 云功能 - 发布/订阅触发器 - 发布和订阅功能之间的延迟是多少

时间:2021-07-14 09:00:02

标签: firebase google-cloud-firestore google-cloud-functions google-cloud-pubsub

用例:
我有一个 webhook 来处理传入的 slack 消息。我必须在 300 毫秒内以 200 OK 状态响应该网络钩子,否则它将重试再次命中我的网络钩子。

webhook 基本上是一个 http firebase 云函数。我必须立即处理传入的 webhook,没有任何延迟。大多数情况下,处理时间将超过 300 毫秒,这会导致我的 webhook 多次点击,尽管我返回了 200OK 状态。

到目前为止我正在做的是立即将传入的 webhook 的有效负载保存到 firestore 集合并在文档的 onCreate 中处理处理。但是 onCreate 需要几秒钟才能触发,这在我们的例子中是不可接受的。我不确定这是不是因为冷启动。

我想看看是否可以为此使用发布/订阅触发器。以下是我的疑惑

  1. 发布到主题需要多长时间
  2. 在我发布到主题并且订阅者函数开始执行后有多少延迟。如果这与 onCreate 的延迟相同,那么这将不起作用。

如果这不起作用,最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

云任务响应速度非常快。我已经使用它们再次调用服务器来处理耗时的任务,例如将用户提交给用户的内容上传到诸如 Cloud Storage 或任何 CDN 之类的东西。

您实际上可以设置触发 Google 任务的持续时间。与 Cloud Compute 一起使用时,触发器几乎是瞬时的。在云函数中,最坏的情况是冷启动,但如果您经常调用它们,这种情况应该很少见。只需将云任务的超时设置为 0,它就会立即调用您的函数。但同样,有时云计算可能是比云函数更好的选择。

答案 1 :(得分:0)

如果我理解正确,您希望在 300 毫秒内以 HTTP 200 OK 响应传入的 Slack webhook 请求,同时持久地触发下游计算。您建议使用 Cloud Pub/Sub 将 Webhook 内容发布到主题,立即响应 Webhook 请求并触发 Cloud Function 以使用 Pub/Sub 主题进行计算。

这是一个合理的解决方案。虽然 Cloud Pub/Sub 不提供延迟 SLA,但该服务已针对低 publish latency 进行了优化,因此如果 Publisher object 已经初始化并重用,大多数请求将在 300 毫秒范围内成功处理。将消息实际传送到函数可能需要稍长的时间,但如果消息流一致,则应该在 1-2 秒内。请注意,Pub/Sub 保证至少一次交付,这意味着该函数可能会针对同一条消息多次触发,因此您的处理逻辑应该是幂等的。