我們系統的幾個組件具有「長時間運行」操作。它們可以從幾秒到幾分鐘,並且在CPU使用率上有所不同。例如,報告生成會將CPU掛起幾秒鐘,但數據收集主要用於等待數據庫查詢。工作者角色與異步控制器的Web角色
我面臨兩個選擇:
(1)Web角色+工作者的角色+隊列+表。工作人員角色在隊列上旋轉,獲取帶有參數的消息,確實有效,並使用進度和完成標誌更新表。客戶端旋轉,顯示進度直到標記完成。一個Web角色,根據需要放大工作者角色的數量。
(2)Web角色+異步方法。讓我長時間運行的操作使用.NET 4.5的異步/等待東西,並讓控制器動作標記爲異步。根據需要放大Web角色的數量。
選擇1顯然要複雜得多,但保持Web角色免費做網頁內容,並允許適當的排隊,如果事情開始變得非常繁忙的優勢。選項2更簡單,需要的角色和存儲資源更少,但是如果事情開始變得忙碌,它有沒有可能窒息整個網站?爲了簡單起見,我強烈傾向於選項2。有沒有特別的理由不這樣做?如果網站開始放緩,只需增加網絡角色實例的數量就可以解決性能問題了嗎?