我正在研究一个模块,需要按照计划从第三方系统收集数据,例如每5分钟说一次。redis pub sub和/或列表来实现数据收集器
启动数据收集的触发器来自多租户用户界面。因此,10个租户可以告诉这个模块同时开始收集数据。
我通过使用简单的redis队列开始,所有来自UI的启动请求都发布到队列中,模块充当工作者,提取作业并贯穿它们。
问题是我们需要完成一个周期的数据收集,比如说1分钟,如果有100个工作,如果我们连续进行,我们将花费一分多钟。数据收集需要按照时间表进行。所以UI说每5分钟运行一次数据收集,直到我说停止!
因此,我们添加了另一个可以开始卸载一些负载的工人。
我的问题是:如何在不保持状态(预定线程执行程序)的情况下实现常规计划?
我是不是在想这个问题,可以用更简单的方法来完成?
我的设计现在有一种cron工作,每隔1分钟从数据库读取数据收集请求,然后将它们放在工作人员从中选择它的队列中。
Beenstalkd是我可以使用的工作队列,但据我所知,它在2014年最后更新。我会去看看更近的事情。只有坚持使用redis的理由是我们已经在使用它,并且我不想添加其他组件。 – darkstar
它不会演变,因为它不需要它。它很稳定,简单,并且打算保持那样。我是Redis的忠实粉丝,Beanstalk是我与Redis相比的产品。但我明白你的顾虑。 –