【问题标题】:Running tasks in parallel with reliability in cloud functions在云功能中以可靠性并行运行任务
【发布时间】:2020-05-08 00:27:42
【问题描述】:

我正在使用 Twitter API 在 Firebase Cloud Functions 中流式传输和处理推文。

在我的信息流中,我正在跟踪 Twitter 的各种关键字和用户,因此推文的涌入非常高,甚至在我处理上一条推文之前就发送了一条新推文,这会导致失效,因为新推文有时会这样做没有得到处理。

这就是我的流的样子:

...
const stream = twitter.stream('statuses/filter', {track: [various, keywords, ..., ...], follow: [userId1, userId2, userId3, userId3, ..., ...]});

stream.on('tweet', (tweet) => {
   processTweet(tweet); //This takes time because there are multiple network requests involved and also sometimes recursively running functions depending on the tweets properties.
})
...

processTweet(tweet) 本质上是从 twitter 编译线程,这需要时间取决于线程的长度。有时也几秒钟。我已尽可能优化processTweet(tweet) 以可靠地编译线程。

我想并行运行processTweet(tweet) 并将处理时传入的推文排队,以便它像推特文档specify. 一样可靠地运行

确保您的客户端读取流的速度足够快。通常,您在读取流时不应该做任何真正的处理工作。读取流并将活动交给另一个线程/进程/数据存储以异步进行处理。

非常感谢您的帮助。

【问题讨论】:

  • 您的processTweet 的代码是相关的。通常,当您进行网络/API 请求时,您会使用带有 Promises 和回调的异步函数。

标签: javascript firebase twitter google-cloud-functions


【解决方案1】:

此 twitter 流 API 不适用于 Cloud Functions。

Cloud Functions 代码只能在响应传入事件时被调用,并且代码最多只能运行 9 分钟(默认为 60 秒)。之后,功能代码被强制关闭。使用 Cloud Functions,无法持续处理来自 API 的某些数据流。

要使用此 API,您需要使用一些其他计算产品,以便您可以在专用服务器实例上无限期地运行代码,例如 App Engine 或 Compute Engine。

【讨论】:

  • 是的,我意识到.....切换到计算引擎但我的问题仍然存在,因为推文的涌入高于处理每条推文所需的时间,我该如何解决那个?
  • 使用多个服务器实例?将它们与 PubSub 排队?我建议针对您面临的新问题提出一个新问题。
猜你喜欢
  • 2021-09-10
  • 2019-11-10
  • 1970-01-01
  • 2015-08-23
  • 2021-06-26
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多