2013-03-26 53 views
1

我有一個ASP.NET MVC 4應用程序作爲Azure Web角色託管。我想做一些看起來應該是非常標準的事情:我想創建一個函數,我可以調用這個函數,當VIP交換操作完成時,它啓動一個VIP交換,並引發事件(或調用回調)。自動Azure VIP交換

只是爲了添加一些情境:我的網站實現了一個工作流程,需要大約一個小時(或更少)才能完成。如果我想發佈一個新版本的網站代碼,那麼它很方便(也就是說,更少的「後向兼容性」代碼來編寫),首先讓所有當前用戶完成工作流程,以便新代碼不需要處理由以前版本的代碼創建的數據。因此,我的網站中的管理功能首先會向數據庫中添加一個值,以禁用新的工作流程;它會等到所有當前的工作流程完成;然後它會調用「VIP交換」例程;最後,當VIP Swap程序發出完成信號時,它將戳數據庫值以重新啓用新的工作流程。

我找到了如何以編程方式啓動VIP掉這裏的微軟文檔: http://msdn.microsoft.com/en-us/library/ee460814.aspx

該過程涉及張貼到一個神奇的URL,幷包括一些頭在POST,然後定期執行得到一個神奇的URL並檢查響應代碼。

我越想到這件事,似乎就越不重要。除了配置後臺計時器和完成通知的基本複雜性之外,我不知道在IIS環境中可能會遇到什麼樣的複雜性(如果有的話)。我甚至可以在後臺線程上執行HTTP操作嗎?對於這個問題,我是否會遇到複雜情況,只是試圖使用.NET中的任意六種不同的「在背景中執行操作」機制?

任何幫助或指導將不勝感激。特別是,如果有人可以指示我準備好執行此功能,我會欣​​喜若狂!

回答

0

我不認爲你會找到一個簡單的解決方案,因爲布料控制器設置爲做一些非常花哨的事情,沒有你的參與。運行在雲計算環境中,一個實例可以從你的下方拉出,長達一小時的工作流程(從OnStopping事件最多5分鐘被稱爲清理),您需要做其他工作無論如何要確保你的所有任務都完成了。

簡單的問題是「如果工作流仍在運行時發生實例故障,你會怎麼做?」你重新啓動它們還是丟失了?如果他們迷路了,那麼你也不在乎,所以殺死升級工作流程同樣不重要。如果重新啓動,然後他們使用相同的機制來決定一個節點是否是因被關閉,並相應地分發作業。這種模式與Hadoop JobTracker非常類似。不要只在任何ol實例上運行工作流程。將它們提交給(作業跟蹤器)服務,以決定要做什麼。然後,(作業跟蹤器)服務可以使用服務管理API來擴展儘可能多的實例,並根據需要運行所需的版本,在適當的節點上運行工作流,並在不再需要或過時時關閉它們。

不幸的是,這可能不是你正在尋找簡單的解決方案,但一些在你的架構需要改變,而不是試圖迫使PaaS的,以適應與你目前的做法。分解工作負載,創建鬆散耦合的服務,設計失敗以及其他一些雲/分佈式計算實踐需要考慮。有一個原因可以說Hadoop的構建方式就是這樣 - 它能夠在一堆不太可靠的商品硬件上完成工作。

+0

我很困惑。 (我也是這個整個網絡的新東西。)據我所知,如果我運行多個服務器實例,並且一個實例停止運行,那麼用戶只需路由到另一個實例。只要至少有一個實例在運行,並且所有實例都可以看到包含進行中工作的數據庫的一致視圖,那我爲什麼要關心?這與我原來的問題有什麼關係? – 2013-03-27 15:36:43

+0

哦,我想我明白了混亂......一個「工作流程」(在OP中引用)不是一個1小時的計算過程。我的「工作流程」是:用戶登錄;用戶完成在線調查,其中包含多個GET和POST;用戶收到調查結果。 – 2013-03-28 01:24:14

+0

對,對不起,我誤解了你的問題。我現在意識到你的問題是你在請求之間保持狀態,但是這些請求必須在相同版本的應用上運行,直到用戶完成。 – 2013-03-28 08:03:58