2012-09-06 40 views
4

在我的解決方案中,我使用分佈式任務來監視硬件實例一段時間(比如10分鐘)。我必須做一些東西的時候:芹菜:長期專用單片任務與短多任務

  • 我開始這個監控會話
  • 我完成這個監控會話
  • 監控會話期間(可能)

是安全有一個單一的任務爲整個會話運行(10分鐘)並執行所有這些操作,還是應該將這些操作分成自己的任務?

正如我所看到的那樣,單個任務的優點是管理和執行時間限制會更容易。但是:

運行一大羣(大部分)睡着的工人是否是個好主意?例如,如果我知道至多我將有200場會議開幕,我有500名工作人員以確保總是有「會議」席位?

回答

9

沒有一個尺寸適合所有人的答案,這

  • 分割一個大任務一成許多小的部分(A 1,AA²,A 3,...)會增加潛在的併發性。

所以,如果你有10個工作線程/進程1個工人實例, 一個現在可以並行使用一個線程的10個線程,而不是按順序 運行。

零件的數量稱爲任務粒度(精細或粗粒度)。

  • 如果任務過於細化,則消息傳遞的開銷會使性能下降。

每個部分都必須有足夠的計算/ IO如果沒有工人把它抵消發送任務 消息給經紀人,有可能將其寫入磁盤的開銷,工人收到的消息,等等(請注意,可以調整消息傳遞開銷,例如,您可以擁有一個暫時的隊列(不會將消息保存到磁盤),併發送那些不那麼重要的任務)。

  • 一個忙碌的區羣可能會讓這一切毫無意義的
可能已經,如果你有一個繁忙的集羣已經實現

最大並行(例如用10個線程/進程的3種工作情況下各,所有正在運行的任務) 。

然後很多人沒有通過分配任務獲得太多好處,但執行I/O的任務比通過I/O操作分割的CPU限制任務有更大的改進機會。

  • 長期運行的任務都很好

工人不是長時間運行的任務過敏,是10分鐘或一個小時。

但這並不理想,因爲任何長時間運行的任務都會阻止從 完成任何等待任務。爲了緩解這種情況,人們使用路由,以便您擁有一個專用隊列,專用工作人員用於必須儘快運行的任務。

-

+0

感謝您的深入解答。我期待着我會得到一個多隊列解決方案。 – Goro