使用app引擎上的node.js,使用任务队列或发布/订阅更好

phi*_*pfc 12 google-app-engine task-queue node.js google-cloud-pubsub

我们一直在将我们的api从python移动到节点.我们在Python应用引擎apis中使用了任务队列.现在,app引擎支持node.js,您是否建议我们使用任务队列或云发布/订阅来完成任务?每种方法的优点/缺点包括可靠性,可移植性等.

Aja*_*nan 14

任务队列和Pub/Sub具有不同的消息传递模型,因此对于不同的事物是有用的.当Pub/Sub使用发布者 - 订阅者模型时,任务队列会收集任务并将其分发给工作人员.

使用Pub/Sub分发任务不如使用任务队列那么自然.发布/订阅主题的所有订阅者都可以看到所有消息,而在任务队列中,消息仅由一个接收者使用.另一方面,任务队列的设计目的不是为了广播消息.

目前,任务队列在App Engine上运行最佳.虽然有一个实验性的任务队列REST API,但任务队列是原生的,并且在App Engine上运行得最好.Pub/Sub可以在任何地方使用.当任务队列任务自动分发到App Engine实例时,您需要进行其他设置以使用Pub/Sub进行应用程序内部通信.

任务队列还提供特殊功能,例如延迟消息.

编辑:

不幸的是,在Node.js App Engine运行时,推送任务队列还没有准备就绪.

Pub/Sub解决方案Kamal在下面指出了一个很好的技巧来模拟基于拉的负载平衡.如果你对拉模式没问题,使用Pub/Sub可能是正确的方法,尽管我想说清楚AE任务队列API是否可用(https://github.com/google/google-api-nodejs使用pull时node.js的-client/tree/master/apis).

要考虑使用pull还是push,要考虑的是重试策略略有不同.任务队列项可以配置为无限期重试,而我认为Pub/Sub将在7天后未确认时停止尝试传递消息.

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

  • 在PubSub中无法使用AE任务队列的某些功能,例如延迟消息或配置具有特定重试或生存时间设置的消息
  • 您需要知道要从队列中消耗任务的实例的端点.

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