我正在处理许多Sidekiq作业(数千万),结果返回1个字符串和2个整数。有一台中央计算机托管Redis服务器/存储结果,还有多台计算机充当工作人员,从这台中央计算机获取数据。
在worker中,我执行处理所需的逻辑,调用结果后,我只需调用:
Sidekiq::Client.push('class' => ResultsWorker, 'args' => [arg1, arg2, arg3])
在中央计算机上,我只有另一个工作人员只检查这个队列并将结果存储在数据库中。
我没有看到这个Sidekiq社区中任何地方都提到过这种“双向沟通”的模式。所以我想知道,这是有原因的吗?这样做会有一些副作用吗?我已经尝试在redis服务器上放置一个简单的web应用程序,它接受结果并存储它们,但我认为对于这样的小数据,为什么不重用同一个具有不同队列的Redis服务器?
答案 0 :(得分:1)
在Sidekiq社区的任何地方都没有看到这种“双向沟通”的模式。
这不需要特别提及或讨论,因为没有什么特别或不寻常的。一份工作确实可以使其他工作入队。这在大型应用程序中左右发生。
虽然您应该在您的情况下衡量这种具体情况的开销。事实证明,直接从第一份工作持续到数据库将会更快(在网络请求上没有损失等)。