在应用程序引擎上使用node.js,使用任务队列还是pub / sub会更好

我们一直在把我们的apis从python转移到node。 我们已经使用我们的Python应用程序引擎API的任务队列。 现在,在app引擎上支持node.js,您是否build议我们使用任务队列或云pub / sub来执行任务? 这些优点/缺点包括可靠性,可移植性等

任务队列和Pub / Sub具有不同的消息模型,因此对于不同的事情是有用的。 Pub / Sub使用发布者 – 订阅者模型时,Task Queue收集并分发任务给工作人员。

使用Pub / Sub分配任务不会像使用任务队列那样自然。 Pub / Sub主题的所有订阅者都可以看到所有消息,而在任务队列中,消息仅由一个接收者使用。 另一方面,任务队列不是为了广播消息而devise的。

目前,任务队列在App Engine上效果最好。 尽pipe有一个实验性的Task Queue REST API,但任务队列是原生的,并且在App Engine上运行得最好。 Pub / Sub可以在任何地方使用。 虽然任务队列任务自动分发到App Engine实例,但您需要进行额外的设置,以便使用Pub / Sub进行应用程序内通信。

任务队列还提供特殊function,如延迟消息。

编辑:

不幸的是,看起来推送任务队列还没有准备好在Node.js App Engine运行时上。

Kamal指出的Pub / Sub解决scheme是模拟基于拉的负载均衡的好方法。 使用Pub / Sub可能是正确的方法,如果你可以使用拉模式,但我想说清楚一个AE taskqueue API可用( https://github.com/google/google-api-nodejs -client / tree / master / apis )在使用pull的情况下为node.js。

有一件事要考虑是否使用拉或推是重试策略略有不同。 任务队列项目可以configuration为无限期地重试,而我认为如果7天后没有确认,发布/订阅将停止尝试发送消息。

如果您决定使用PubSub推送模式,则需要考虑其他事项:

  • AE任务队列的某些function(如延迟邮件或configuration具有特定重试或生存时间的消息)在PubSub中不可用
  • 您需要知道要从队列中消耗任务的实例的端点。

在单独的说明(回应下面的第一个响应),它看起来像支持memcache集成。 它的文档页面位于https://cloud.google.com/appengine/docs/flexible/nodejs/caching-application-data