2016-09-30 213 views
2

我正試圖與服務結構握手,我正在努力一點點。一些問題:服務結構服務是完全單線程的嗎?

  • 都是單線程的服務結構服務實例嗎?我創建了一個無狀態的Web api,一個實例,一個Task.Delay的方法,然後返回一個字符串。兩項對這項服務的要求一個接一個地提供,而不是同時進行。那麼我是否認爲可以提供的併發請求的數量純粹是應用程序清單中的服務實例計數的函數? 編輯考慮到這一點,這可能與OWIN Wep Api的設置有關。會不會被會話阻塞?我認爲默認情況下沒有會話?

  • 我有我需要的服務結構(即可能需要幾個小時)來執行長時間運行的操作。有沒有我可以用於服務面料的推薦圖案?這些目前使用觸發webjob的存儲隊列進行處理。也許有可靠的隊列和RunAsync循環的東西?

回答

0

第一點 - 這純粹是一個客戶端問題。 Chrome瀏覽器將我的請求視爲無效,因此延遲了第二次請求,直到第一次得到回覆。改變請求的參數允許它們同時被服務。

1

看來你處理的第一部分,所以我會在第二部分評論:「長時間運行的操作」。

我們可以看到長期運行的操作/工作流程正在辦理多遠,服務織物來的。出於這個原因,我們可以通過查看軟件專家幾十年來一直使用的設計模式來建立在巨人的肩膀上。例如,着名的和全包的Process Manager。請注意,這種模式有時是一種矯枉過正的行爲。如果是這種情況,只需查看企業集成模式書中的其他相關模式(Gregor Hohpe)。

至於使用的可靠的集合,這些都是實現細節選擇的數據結構支撐所述選定的設計圖案時。

我希望幫助

1

至於你的第二個問題 - 這真的取決於你的長期運行的任務的性質。

是您的長期運行的任務的那種工作量是在一個孤立的線程上運行依賴於本地OS/VM級別的資源,並最終回來了結果(A)?或者是一種長期運行的任務,通過階段並通過一系列持久狀態變化(B)建立結果模型?

據我瞭解服務織物,它是不是真的設計用於運行長期運行的工作負載(A),但更多的寫作水平可擴展,高度可用的系統。

如果您非常熱衷於使用服務結構(並且您的工作負載往往更像是B而不是A),我肯定會找到一種方法來打破可以在羣集中並行處理的長時間運行任務。但即便如此,可能還有更適合這種設計的技術,例如Azure Batch?

P.s.如果你打算把一個長時間運行的進程在RunAsync方法,你應該設計的工作量,它是可中斷的和其狀態可以在可以從另一個節點的羣集

在恢復在某種程度上是持久一個有狀態的服務,只有主副本具有對 狀態的寫訪問權限,因此一般當該服務正在執行實際的 工作時。有狀態服務中的RunAsync方法僅在有狀態服務副本是主要的 時執行。 RunAsync方法 當主副本的角色從主服務器改變爲 以及關閉和中止事件時取消。

P.s.s嘗試編寫可伸縮系統時,長時間運行是惡魔。現在就嘗試並解決這個問題,如果可能的話,爲自己節約未來的痛苦。

+0

這些進程更像B,但是他們大多數都是通過一個非常節油的服務來參與IO(SharePoint Online)。所以我限制了多少可以使處理併發。這些任務也是用戶啓動的,所以不是真正的批處理。 –