如何在Azure應用服務的多個橫向擴展實例上分發任務?在擴展Azure應用服務時分發工作
任務將從一個隊列中讀取數據,每個隊列聚合一分鐘,然後將結果寫入Blob存儲區。
我的任務目標是這些:
- 應該只有在任何時候每個隊列一個任務運行。
- 在所有實例中均勻分配任務
- 如果有一個實例出現故障,那麼所有在那裏運行的任務都將在另一個正在運行的實例上啓動。
- 一旦實例返回,實例將被均勻分發。
我主要關心的不是工作負載性能,而是響應性/正常運行時間。 單個實例可以託管所有任務,但如果該實例重新啓動,則會導致不需要的停機時間。
我打算使用服務總線隊列,仍然閱讀它。 我的想法是偷看5分鐘,將它們聚合並將其存儲在一個blob中。然後在隊列中標記這些項目已完成。如果進程崩潰,下一個會重新啓動,重新啓動的工作量將可以接受。問題/目標不是大數據,而是實時數據。 – hultqvist
我可能會實時處理這些消息。服務總線隊列可以以兩種模式工作:查看並鎖定或接收和刪除。如果您使用Peek&Lock,則Peek操作會使消息在給定時段內不可見。成功處理郵件後,您將明確從隊列中刪除郵件。這樣,如果您的WebJob在處理過程中崩潰,則鎖定過期並且消息變爲可見再次處理。 –
@hultqvist,我原來的答案有錯誤。對於使用服務總線觸發器,Webjob類型應該是連續的。我已經相應地更新了我的答案。 –