多个Sidekiq实例可以处理同一个队列吗?

24

我不熟悉Sidekiq的内部机制,想知道是否可以使用相同的配置启动多个Sidekiq实例(处理相同的队列)。

是否可能有2个或更多的Sidekiq实例从同一队列中处理相同的消息?

更新:
我需要知道在多台机器上运行Sidekiq时是否可能存在冲突。


你为什么想要这样做呢?Sidekiq相对于Resque的优势应该是多线程,因此只需要一个进程。 - Thilo
2
我需要知道在多台机器上运行Sidekiq时是否可能存在冲突。这不是关于线程与进程的问题。 - Jacob
5
@Thilo,即使在一台单机上,“只需要一个进程”就可以将CPU使用率限制在单个核心的100%,这限制了处理队列的速度。我有一台8核机器,想让Siekiq使用4个核心以满负荷运行,因此我需要4个进程。 - Ben Lee
2个回答

48

是的,Sidekiq 绝对可以在同一个队列上运行多个进程。Redis 将只会将消息随机分配给其中的一个进程。


如果不同的实例在非常相似的时间运行相同的查询(或者这有任何意义),例如意外的双重表单提交,是否会出现问题? - atw
1
错误可能会发生,但Sidekiq旨在实现并发。应用程序代码双击时更容易出现错误。 - Mike Perham
随机数是有效的偶数?这是你的想法吗? - jprio

11

不,我已在不同的机器上运行了Sidekiqs,并没有任何问题。

每个Sidekiq都从同一个redis服务器读取数据,而且在多线程和分布式场景下,redis非常强大。

此外,如果您查看Sidekiq的Web界面,它会显示所有机器上的所有Worker,因为所有工作线程都登录到同一个redis服务器。

所以,没有问题。


3
很有趣。我有几个运行在不同机器上的Sidekiq服务器,尽管它们正确地从Redis队列中消耗作业,但我没有在UI中看到与我的Rails应用程序位于不同机器上的进程。你是否需要设置任何特殊配置才能这样做? - Nobita
我有两个实例,相同的代码在这两个实例上运行。这两个实例都有Sidekiq运行,并共享一个公共的Redis。是否可能从实例1调度的作业将在实例2中执行?如果是这样,那么有哪些可能的方法可以防止这种情况发生? - Sanjay Prajapati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接