需要在cron作业中使用Ruby Concurrency

时间:2017-02-12 04:23:52

标签: ruby-on-rails ruby multithreading concurrency crontab

我正在开发一个系统,其中API应该同时处理rails 4.0

在系统中,每个用户都有3个脚本可以在后台运行。脚本从DB获取用户的信息以重复调用API并处理事务。目前我正在使用cronjob(每当gem)在后台为每个用户运行脚本

所以我的问题是当系统有1000人时,我需要运行3000个cronjobs。 我认为这个系统会有问题。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

此时你有一个定期执行某些任务的系统,你的系统必须处理的工作量(比方说,每小时)小于它可以处理的工作量。

但是,工作量会随着系统中的用户数量而增加,因此,正如您已经猜到的那样,情况将会变得至关重要。您的系统将无法处理它必须执行的所有任务。

解决此问题的一种方法是在系统中添加更多计算机,也就是说,如果您当前正在使用一台计算机来运行所有任务,请考虑添加另一台计算机并拆分作业。您可以通过多种方式在计算机之间拆分作业,但我会使用consumer-producer方法。

您将需要使用队列管理器,其中生产者定期发送一批要完成的任务(您仍然可以使用whenever gem)和一些消费者(1没有意义,2现在可以,但你可以增加这个数字)逐个完成任务,直到没有剩下的任务。

我最喜欢的经理是Sidekiq,但您可以找到一些可能更符合您需求的经理。