触发 Heroku worker

Trigger Heroku worker

在 Heroku 中触发工作进程的方法有哪些?特别是,一个不经常需要但在需要时很快需要的过程,例如bluemoon.js.

每秒轮询读取一个任务队列(可以存入数据库)是我能想到的办法

对于这种情况,

Trigger 对我来说更有意义。有没有办法在需要的时候直接触发worker进程?还是频繁轮询没有真正的缺点?

您真正想要的是 Amazon SQS, RabbitMQ 或类似的消息队列服务。

消息队列服务的作用是:

  • 你让你的 web dyno 向消息服务发送一条消息,上面写着 "Hey! Run this task. Here's some data to process."
  • 然后消息服务获取此消息,并(快速)将其转发给您的任何 worker dynos。
  • 您的 worker dynos 然后完成需要完成的工作,并且可以将工作已完成的信息返回消息服务。

上述模式如此有效的原因是这些服务针对速度和成本进行了优化——它们对 运行 来说非常便宜(我本人是 Amazon SQS 的超级粉丝),有几乎没有开销,而且速度非常快。

您不想轮询数据库的原因(这是大多数人在想象这样的事情时会想到的)是因为它会浪费资源并在以后引起问题:

  • 您将不断地从您的 worker dynos 访问您的数据库服务器,使用大量不必要的带宽/IO/CPU 资源。
  • 您将不断地访问您的数据库服务器进行查询,这将减慢您的数据库并减少它可以进行的重要查询的数量 运行。

一般来说,对于这样的问题,消息服务是完美的解决方案!