firebase 云功能-发布/订阅触发器-要执行的发布和订阅者功能之间的延迟是多少
Posted
技术标签:
【中文标题】firebase 云功能-发布/订阅触发器-要执行的发布和订阅者功能之间的延迟是多少【英文标题】:firebase cloud functions - pub/sub triggers - what is the delay between publishing and subscriber function to be executed 【发布时间】:2021-09-23 06:05:12 【问题描述】:用例: 我有一个处理传入松弛消息的 webhook。我必须在 300 毫秒内以 200 OK 状态响应该 webhook,否则它将重试再次点击我的 webhook。 webhook 基本上是一个 http firebase 云功能。我必须立即处理传入的 webhook,没有任何延迟。尽管我返回了 200OK 状态,但大多数情况下处理时间将超过 300 毫秒,这会导致我的 webhook 被多次点击。
到目前为止,我正在做的是立即将传入的 webhook 的有效负载保存到 firestore 集合并在文档的 onCreate 中处理处理。但是 onCreate 需要几秒钟才能被触发,这在我们的案例中是不可接受的。我不确定这是不是因为冷启动。
我想看看我是否可以为此使用 pub/sub 触发器。以下是我的疑惑
-
发布到主题需要多长时间
在我发布到主题并且订阅者功能开始执行之后,有多少延迟。如果这与 onCreate 具有相同的延迟,那么这将不起作用。
如果这不起作用,最好的方法是什么?
【问题讨论】:
另一种方法是点击云任务,告诉它点击我们的另一个 http 云函数来处理消息。不确定这也会导致多少延迟。 【参考方案1】:如果我理解正确,您希望在 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 保证至少一次交付,这意味着同一条消息可能会多次触发该函数,因此您的处理逻辑应该是幂等的。
【讨论】:
【参考方案2】:云任务的响应速度非常快。我已经使用它们再次调用服务器来处理耗时的任务,例如将用户提交给用户的内容上传到 Cloud Storage 或任何 CDN 之类的东西。
您实际上可以设置 Google 任务应触发的持续时间。将它与Cloud Compute 一起使用,触发器几乎是瞬时的。在云函数中,最坏的情况是冷启动,但如果您经常调用它们,这种情况应该很少见。只需将云任务的超时设置为 0,它就会立即调用您的函数。但同样,有时云计算可能是比云函数更好的选择。
【讨论】:
是的,这是一种方法,我希望这可以完全通过 firebase 中云功能的 pub-sub 触发器来完成。 @CommandSpace 可以。我只是举了一个 Google Tasks 的例子,因为我已经亲自使用过它,而且我确信这种方式是可行的。但是是的,使用 pub/sub 将完全不同或几乎相同。我只是喜欢任务,因为如果他们收到错误而不是 2XX 响应,他们会重试运行相同的功能。以上是关于firebase 云功能-发布/订阅触发器-要执行的发布和订阅者功能之间的延迟是多少的主要内容,如果未能解决你的问题,请参考以下文章
具有实时数据库触发器的 Firebase 云功能:如何更新源节点?
对云功能执行 http PUSH 的 Google Pubsub 订阅者(在同一项目或另一个项目中)