Ruby cron 作业需要并发
Ruby Concurrency in cron job needed
我正在开发一个系统,其中 API 应该同时处理,连续 rails 4.0
在系统中,每个用户有3个脚本在后台运行。脚本从数据库中抓取用户信息重复调用 API 并处理交易。目前我正在为每个用户
在后台使用cronjob(每当gem)到运行脚本
所以我的问题是当系统有 1,000 人时,我需要 运行 3000 个 cronjobs。
我认为这个系统会有问题。谁能帮我解决这个问题?
此时您有一个定期执行某些任务的系统,并且您的系统必须处理的工作量(比方说,每小时)少于它可以处理的工作量。
但是,工作量会随着系统中用户数量的增加而增加,因此,正如您已经猜到的那样,有时情况会很危急。您的系统将无法处理它必须完成的所有任务。
解决此问题的一种方法是向您的系统添加更多机器,也就是说,如果您当前使用一台机器来 运行 所有任务,请考虑添加另一台机器并拆分作业。您可以通过多种方式在机器之间拆分作业,但我会使用 consumer-producer 方法。
您将需要使用队列管理器,您的 生产者 定期发送一批要完成的任务(您仍然可以使用 whenever
gem为此)和一些消费者(1没有意义,2现在可以,但你可以增加这个数字)一个接一个地完成任务,直到有none离开了。
我最喜欢的经理是 Sidekiq,但您可以找到其他一些可能更符合您需求的经理。
我正在开发一个系统,其中 API 应该同时处理,连续 rails 4.0
在系统中,每个用户有3个脚本在后台运行。脚本从数据库中抓取用户信息重复调用 API 并处理交易。目前我正在为每个用户
在后台使用cronjob(每当gem)到运行脚本所以我的问题是当系统有 1,000 人时,我需要 运行 3000 个 cronjobs。 我认为这个系统会有问题。谁能帮我解决这个问题?
此时您有一个定期执行某些任务的系统,并且您的系统必须处理的工作量(比方说,每小时)少于它可以处理的工作量。
但是,工作量会随着系统中用户数量的增加而增加,因此,正如您已经猜到的那样,有时情况会很危急。您的系统将无法处理它必须完成的所有任务。
解决此问题的一种方法是向您的系统添加更多机器,也就是说,如果您当前使用一台机器来 运行 所有任务,请考虑添加另一台机器并拆分作业。您可以通过多种方式在机器之间拆分作业,但我会使用 consumer-producer 方法。
您将需要使用队列管理器,您的 生产者 定期发送一批要完成的任务(您仍然可以使用 whenever
gem为此)和一些消费者(1没有意义,2现在可以,但你可以增加这个数字)一个接一个地完成任务,直到有none离开了。
我最喜欢的经理是 Sidekiq,但您可以找到其他一些可能更符合您需求的经理。