2014-09-10 55 views
1

Sidekiq優於Resqueue的好處之一是它可以在同一個進程中運行多個作業。但是,缺點是我無法弄清楚如何強制一組併發作業在不同的進程中運行。是否可以強制並行作業在單獨的Sidekiq進程中運行?

這裏是我的用例:假設我必須生成64M行數據,並且我在Amazon amazon EC2實例上有8個vCPU。我想將任務分成8個並行作業,每個作業生成8M行。問題是,如果我運行8個sidekiq進程,有時sidekiq會決定在同一進程中運行2個或更多的作業,因此它不會使用全部8個vCPU,並且需要更長的時間才能完成。有沒有什麼辦法可以告訴sidekiq要使用哪個工人,還是強制它在工作流程中平均分配工作組中的工作?

回答

2

答案是你不能輕易通過設計。專業化是導致SPOF的原因。

  1. 您可以爲每個進程創建一個自定義隊列,然後爲每個隊列創建一個作業。
  2. 您可以使用JRuby,它不會遭受同樣的缺陷。
  3. 您可以執行處理作爲rake任務,每個作業會產生一個進程,確保負載均勻。
  4. 您可以分割64個作業而不是8個,並以這種方式獲得更均勻的負載。

我可能會做後者,除非產生的I/O粉碎機器。

+0

謝謝,邁克。最初我會選擇1,我已經驗證了它的魅力,特別是因爲我只是在一種類型的工作中使用Sidekiq。 – mockaroodev 2014-09-10 16:58:36

相關問題