我目前正在處理一個需要處理大量重複作業的項目。基本上,當一項工作完成後,我想在15分鐘後再次開始工作。可擴展的動態作業隊列處理
作業集隨着時間的推移而動態變化,因此我需要監視新的和刪除的作業。 每個工作都需要一些時間來處理,因此我需要能夠擴展。我將有一個網站作爲管理這些工作的前端。
我正在考慮使用MongoDB(與分片)來存儲作業。 然後,我可以創建一個「作業代理」來經常查詢數據庫,以查看是否有任何作業已準備好並使用,例如, RabbitMQ開始對一組工作者開展工作。
有與設置雖然一些非常明顯的問題:
- 「作業代理」是一個非常頻繁的基礎上的瓶頸和單點故障
- 查詢的MongoDB潛在的巨大收集似乎是一個不好的解
我不受這項技術的限制,但我根本不知道如何爲此設計架構。有任何想法嗎?
謝謝邁克爾。我有一個使用AMQP實現的原型,分佈式鎖定和包含作業的共享數據庫。 每個工人都充當入場者和處理者。當工作人員獲得分佈式鎖時,它會在數據庫中找到準備處理的作業,在作業上設置處理標誌,並通過AMQP發送消息。當工作人員完成一項工作的處理時,它會用新的時間戳修改數據庫。 因此,我沒有單點失敗。 – kfuglsang