在heroku上开发node.js中的时钟和工作者

Jor*_*meu 6 architecture scheduler heroku worker node.js

我正在开发一种服务,需要每五分钟为不同的用户分析来自社交媒体网络的数据.我正在node.js中开发它,我将在Heroku上实现它.

根据Heroku网站上的这篇文章,最好的方法是将调度程序的逻辑与工作者的逻辑分开.事实上,我们的想法是让一个dyno致力于安排任务以避免重复.这个dyno指示一个工人农场(根据需要n dynos)来完成任务.

这是这个架构的proc文件:

web:    node web.js
worker: node worker.js
clock:  node clock.js
Run Code Online (Sandbox Code Playgroud)

问题是如何在node.js中实现它.我用Google搜索,建议使用消息队列系统(如IronMQ,RabbitMQ或CloudAMQP).但我正在尝试设置我的代码和应用程​​序简单,并且需要附加组件.

问题是:有没有办法直接从我的调度程序(时钟)与工作人员dynos进行通信?

谢谢你的回答.

Zla*_*tko 1

如果我理解正确的话,您想将时钟作为一个应用程序旋转,然后将工作人员作为单独的应用程序旋转?当然,有一个直接的方法。您打开从时钟应用程序到工作人员应用程序的连接。

例如,让每个工作人员打开与时钟的客户端套接字连接。然后时钟可以与它们通信并转发命令。

或者使用WebRTC。这样,工人们就能与时钟对话,但他们也可以互相对话。

或者在工作线程上创建一个(经过身份验证的)HTTP(s) REST 端点,它将在其中接收任务。就像,POST /tasks将在工作人员上创建一个任务。如果任务很短,它可以立即回复,以便时钟知道工作已完成。或者,如果这是一个较长的任务,它可以确认它,但稍后调用时钟上的端点来表示它已完成,类似于PUT /tasks/32.

或者更直接地,打开与时钟的直接网络连接,例如在工作程序启动时(反之亦然)。dgram在工作器和时钟之间使用和发送 UDP 消息。

无论如何,我也相信建议像 RabbitMQ 这样的 MQ 的人更好地推动作业/任务。然后,它可以根据需要分配任务,并根据unacked作业队列的计数,在需要时启动更多工作线程。

但你的问题很广泛,所以为了获得更多细节,你可以提供更多细节。