8

我已经编写了一些服务器端代码来使用 firebase-queue]( https://github.com/firebase/firebase-queue ) 来实现可扩展性,但是,随着 Cloud Functions for Firebase 的发布(以及它对自动可扩展性的承诺) ,我想知道是否需要队列...有没有人将这两种技术结合到更大的目的?特别是对于像 @Frank van Puffelen 这样的 Firebase 开发人员,Functions 会取代 firebase-queue 吗?

4

3 回答 3

11

火力基地在这里

我不确定 firebase-queue 是否过时。时间会证明一切。

但是我们现在肯定会在许多我们以前使用 firebase-queue 和节点工作进程的场景中使用 Cloud Functions for Firebase。不再需要带上我们自己的 Node.js 进程,从而提高了开发速度。Cloud Functions 的自动扩展已被证明是非常宝贵的。

将 Cloud Functions 与 firebase-queue 结合起来似乎不合逻辑。如果您只是将节点附加到数据库并在您的函数中使用它们,您将拥有相同的行为,而无需额外的库。

更新:我们的一位数据库工程师刚刚给出了函数无法替换队列的场景。进行备份时,工作人员需要挂载和卸载远程磁盘。该任务在云函数中可能是可能的,在独立的、自我管理的节点进程中更容易完成。

于 2017-03-10T18:09:57.630 回答
8

我不认为 Firebase 云功能应该使 firebase-queue 过时,而且我认为将 firebase-queue 与云功能结合起来完全不合逻辑,就像@@Frank van Puffelen 所说的那样。

Firebase-queue 提供的不仅仅是一种让任务监听 firebase 和启动任务的方式。它为分配和响应任务请求、协调失败任务的重试、报告进度、状态和其他元数据的各方之间的通信提供协议。这允许的一件事是任务链接。

我认为 Firebase 或第三方开发一个扩展 firebase-functions 并允许您编写具有与 firebase-queue 相同签名的 firebase 云函数的 firebase-functions-queue 包会很有用。像这样的东西:

const functions = require('firebase-functions');
const functions-queue = require('firebase-functions-queue'); //extends firebase-functions with onQueue function

admin.initializeApp(functions.config().firebase);

functions.database.ref('/queue').onQueue(options,function(data,progress,resolve,reject){
    ...
    })

这个新包将像 firebase-queue 一样工作,并使用相同的元数据和选项,但它不需要处理管理多个工作进程,因为云功能已经自动无缝地完成了这项工作。

这将具有以下优点:

  • 将允许 firebase 开发人员使用标准方式将作业分配给队列、监控进度、失败等。
  • 应用程序可以将作业分配给队列,而不关心它是由云功能还是其他环境处理。
  • 开发人员可以获取现有队列并将其从节点服务器移动到云功能,而无需更改客户端应用程序。
  • 它甚至可以允许任务链接,其中一个任务可以由云功能处理,而另一个任务可以由同一作业中的不同服务器处理。
于 2017-03-13T01:45:33.240 回答
7

我认为这不像说它取代了firebase-queue那么简单。理想情况下,您可以将 Functions 用于 firebase-queue 的大多数常见用例。

但是,无论如何,使用 firebase-queue 可能还有一些正当理由。

  1. 这是一个非常强大的排队系统,允许您使用多状态任务并允许您设置工作人员的数量。
  2. 它在您指定的环境中运行,而不是在 App Engine 中运行(您可以在您的服务器上安装 GAE 中不可用的二进制文件)。
  3. 根据带宽与调用的具体情况,可能会更便宜。
  4. 它可以免费联系第三方端点,而 Functions 需要付费帐户。
  5. 功能仍处于 Beta 阶段,不提供 SLA,它们目前还存在一些在 firebase-queue 中不会经历的启动延迟(这一点在 GA 发布时间前后应该失效)。
于 2017-03-10T23:27:48.973 回答