触发Heroku工人

在Heroku中触发一个工作进程的方法是什么? 特别是一个需要的时候很less需要的过程,比如bluemoon.js

每秒轮询一次读取任务队列(可以存储在数据库中)是我能想到的方法。

对于这种情况, 触发器对我来说更有意义。 有没有办法在需要时直接触发一个工作进程? 还是经常投票没有真正的缺点?

你真正想要的是像Amazon SQS , RabbitMQ之类的消息排队服务。

什么消息排队服务是这样的:

  • 你有你的networkingdynamic消息发送消息到一个消息服务,说:“嘿!运行这个任务,这里有一些数据处理。
  • 消息服务然后抓取这个消息,然后将其中继(快速)到你的任何工人dynos。
  • 然后,您的工作人员dynos完成需要完成的工作,并可以通知消息传递服务该作业已完成。

上述模式运行良好的原因是,这些服务的速度和成本都经过了优化 – 运行起来非常便宜(我自己也是Amazon SQS的粉丝),几乎没有开销,而且速度也非常快。

你不想轮询一个数据库(这是大多数人想象的东西)的原因是因为它会浪费资源,并在以后造成问题:

  • 你将不断地从你的工作人员的dynos中访问你的数据库服务器,使用大量不必要的带宽/ IO / CPU资源。
  • 你会不断地敲你的数据库服务器进行查询,这会降低你的数据库的速度,并减less它可以运行的重要查询的数量。

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