firebase云函数-发布/子触发器-发布和要执行的订阅者函数之间的延迟是多少



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

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

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

我想看看我是否可以使用pub/sub触发器。以下是我的疑虑

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

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

云任务的响应速度非常快。我用它们再次调用服务器来处理耗时的任务,例如将用户提交给用户的内容上传到云存储或任何CDN。

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

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

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

最新更新