2016-09-22 47 views
1

從作業中產生多個作業是否安全,以便工作人員可以開始處理任何空缺的作業?帶有多個隊列工作器的豆杆設置:產生另一個作業的作業

目前我的設置是這樣的。我有20名工人等待任何工作被推動。其中一項工作是發送iOS推送通知,這是iOS的問題,您無法發送批量消息。

當前:我所做的是一個批量獲取特定用戶列表的工作,從我的數據庫獲取每個設備令牌並開始發送通知。

場景:如果一個主題有1000個用戶,我必須獲得所有1000個用戶及其設備,然後開始在每個設備上發送。這將推動隊列中的新工作,1名工作人員將選擇它的應用程序,而其他工作人員空缺,並等待傳入​​的工作。如果在給定時間內沒有工作可用,那麼工作人員1必須完成所有發送工作,

我現在工作。如果一項重大工作能夠創造出另一份工作,以便其他空缺職工能夠接受並完成工作,那麼安全嗎?

P.S所有工作都在1管中運行。

回答

1

這聽起來對我來說很合理,它將負載分散到衆多工作人員中間。

我會注意一些事情 - 比如設置適當的優先級。如果創建數十個或數百個任務的任務具有更高的優先級,那麼實際發送的作業將會很快獲得潛在的數十萬個作業,但是工作人員可能不會運行它們,因此隊列會被填滿。

在優先級之間留下很大差距意味着您可以插入非常重要的工作。一個更重要的客戶的優先級可能接近於零,因此需要處理,並且先發送給較小的客戶。

需要考慮的其他事項包括帳戶限速 - 如果限於每秒發出10個通知,則運行20個工作人員將不是首發。

我也將新的工作組放入一個新的管子(運行數十個管子並不昂貴)。您可以一次觀察多個試管(從任何試管中獲取「最重要的」工作),但是您無法在一根試管內統計不同類型的工作,因此將這些類型分爲不同的隊列可以讓您輕鬆看到每種類型有多少個作業正在運行。因此,如果發送進程正在建立,您可以減慢分裂作業的創建時間,或者將它們標記爲更低的優先級。

最後,爲了保持批處理作業的某些優勢並避免一些開銷,我可能會將作業從1000 + -off分解成每個作業25-50個通知的數據包。