在Heroku中触发工作程序的方式有哪些?特别是,很少需要但在需要时很快需要的过程,例如bluemoon.js
。
我可以想到每秒轮询一次以读取任务队列(可以将其存储在数据库中)。
对于这种情况,触发器对我而言更有意义。有需要时可以直接触发工作程序的方法吗?还是频繁投票没有真正的负面影响?
最佳答案
您真正想要的是消息排队服务,例如Amazon SQS,RabbitMQ或类似的东西。
消息队列服务的作用是:
您使Web dyno将消息发送到消息传递服务中,消息显示为“嘿!运行此任务。这里有一些数据要处理。”
然后,消息服务获取该消息,并将其(快速)转发给您的任何工作人员。
然后,您的工作人员将完成需要完成的工作,并且可以将消息告知工作已完成的消息传递服务。
上述模式之所以如此有效,是因为这些服务针对速度和成本进行了优化-它们运行起来非常便宜(我本人是Amazon SQS的忠实拥护者),几乎没有开销,并且运行速度非常快。
您不想轮询数据库(大多数人在想像这样的事情时会想到的原因)的原因是,这将浪费资源并在以后引起问题:
您将使用大量不必要的带宽/ IO / CPU资源,不断地从工作动态中访问数据库服务器。
您将不断命中数据库服务器进行查询,这将减慢数据库速度并减少其可以运行的重要查询的数量。
通常,对于此类问题,消息服务是完美的解决方案!