ruby-on-rails 是否可以在不同的服务器上运行多个具有多线程的Sidekiq进程,并分发作业?

ryhaxcpt  于 2023-05-19  发布在  Ruby
关注(0)|答案(1)|浏览(120)

我想运行多个服务器,每个服务器运行一个带有多个线程的Sidekiq进程。我的产品发布了几种类型的作业,但是一种类型的作业通常需要很长时间,并且会给服务器的CPU和内存带来很大的负载。
当这种情况发生时,作业服务器将关闭,从而无法运行其他类型的作业。因此,我希望在不同的服务器上运行高负载作业和其他作业,同时改进作业处理。
有可能用Sidekiq做到这一点吗?
如果是,我如何为每个作业分配Sidekiq服务器?
我正在使用ActiveJob和Sidekiq,Rails和Sidekiq都是最新的。

vd8tlhqk

vd8tlhqk1#

是的,您可以使用主机特定的队列,这是我的博客上记录的一种技术。您可以在以CPU密集型计算机的主机名命名的队列中创建作业:

queue_as 'big-dude.example.com'

这两个是等效的,但是set允许您动态地将作业从其默认队列重定向到目标。

SomeJob.set(queue: 'big-dude.example.com').perform_later(...)

然后你将在每台机器上启动Sidekiq,监听它自己的主机队列:

bundle exec sidekiq -q `hostname` -q default ...

维奥拉
https://www.mikeperham.com/2013/11/13/advanced-sidekiq-host-specific-queues/

相关问题