2016-12-22 67 views
1

我對Azure服務結構非常陌生。從我的研究中,我非常熱衷於將它用於特定的優化問題場景。但是,我沒有在MSDN上找到任何有關支持我的發現的詳細信息。長期運行任務的Azure服務結構演員

我的要求是,我有一個Web API獲取輸入並轉儲到數據庫。該輸入用於運行通常需要大約3-5分鐘的優化算法。用戶提交的多個請求可能需要最終處理。

我目前認爲產生一個新的ASF可靠演員每個優化輸入是一個很好的選擇。然而,我不清楚ASF如何運行長時間運行而不是即時的任務。

此外,我懷疑我的資源利用率如何在羣集內。我的最終目標是能夠提交至少預定義數量的優化算法演員無狀態需要時並行服務。

非常感謝您對我所關心的技術建議。是演員無國籍,我應該考慮在這種情況下。

回答

2

我認爲這裏最重要的是在後臺進行計算。在優化算法運行時,Service/Actor調用者不應該一直等待。

要做到這一點,你需要一個命令,將它保存在某個地方(一個隊列可以很好地完成),將一個令牌返回給調用者。該令牌可用於查詢狀態/進度。

演員這樣做需要:

  • 使用StateManager舉行隊列,保存工作
  • 註冊一個計時器來處理工作。
  • 可選調用另一個(額外)演員就有關進展

無國籍服務做此報告要求:

  • 外部隊列(這是一個外部依賴,即影響可用性)
  • 可選外部進度存儲

這樣做的有狀態服務(額外選擇)要求:

  • 使用StateManager舉行ReliableQueue
  • 定期從RunAsync檢查此隊列的工作。
  • 可選定期在StateManager中存儲進度。

我懷疑爲這種情況準備的最好的服務類型是狀態服務。 Here's排隊和處理工作的有狀態服務示例。

+0

感謝您的回覆。假設我使用有狀態的服務將命令保存在可靠的隊列中。然後我定期檢查隊列以檢查未決命令。將第一個出列併產生一個無狀態或演員(不知道最好是什麼)並啓動算法。你能否建議我通常會監測我的algorythm服務是否已經運行完成。這應該是算法服務或主狀態服務的任務。我仍然不清楚如何實現它。 – Praneeth

0

我認爲有狀態和無狀態的組合對於你的場景來說是一個很好的解決方案。使用有狀態對請求進行排隊並使用無狀態來處理(算法)請求。如果需要,SF集羣將根據負載爲羣集中的其他節點創建無狀態服務的新實例。有狀態服務將是您的持久存儲來存儲請求(通過可靠的隊列)和進度(可靠的字典)。有狀態服務維護集羣中的一個主副本和兩個輔助副本。

+0

感謝您的迴應。你能不能讓我知道爲什麼你在這種情況下推薦SF不爲演員服務?另外「假設」我有一個5節點集羣,並且我產生了100%CPU密集型算法的5個邏輯函數,那麼在SF的上下文中產生另一個實例的性能如何呢? – Praneeth