2011-08-18 69 views
6

一些背景....如何在本地/內部託管Azure輔助角色?

我們冒險進入Azure的首次,並試圖做到這一點的嬰兒步驟。目前,我們的第一批應用將成爲監控隊列以處理請求的工作人員角色(例如發送電子郵件或執行一些屏幕抓取),然後我們將從我們的內部部署MVC應用和WCF服務插入隊列。稍後我們將MVC應用程序和WCF服務移至Azure。

我們的開發流程基本上是這樣的(在不重要的方面有所修改):

  1. 當地發展和一些共享的服務器上。檢查到源代碼管理。
  2. 每隔15分鐘,構建服務器構建和部署,以「發展」的環境(兼作CI和情況介紹,我們需要打比本土以外的「發展」的環境)
  3. 技術測試員手動觸發構建服務器部署測試環境(或者之前部署的測試版本,包括/不包括數據庫)的最後成功的「Dev」構建。
  4. 技術測試人員和業務測試人員手動觸發構建服務器以將最後成功的「測試」構建(或者,以前部署的測試構建,包括/不包括數據庫)部署到QA環境。
  5. 在某個時候,我們合併了QA批准部署的變更集。
  6. 之後,我們的生產構建服務器將此版本部署到分段中,然後再部署到我們的生產環境中(我們在並行/獨立環境中將其託管N次)。

正如您所看到的,我們有一些內部託管的應用程序版本,供內部支持人員在達到產品之前進行打擊。我希望這些對Azure具有相當低的依賴性。我不需要完成嚴重的依賴性,因此我們將繼續使用Azure隊列以及其他一些機制,因爲它們很容易繼續使用,但我們不希望讓構建服務器必須部署到Azure爲這些環境中的每一個(並且支付所有託管費用)。

那麼,我們如何合理地託管我們的Worker角色,以實際測試部署到Azure的代碼的方式進行?

已經提出的一個選擇是,我們將工作者角色創建爲包裝器/外觀,並在類庫中完成所有真正的工作,這是我們的計劃。然而,允許我們「託管」這個的後續行動是創建第二個包裝器/外觀應用程序,它執行與工作人員角色相同的工作,就像我們可以將其作爲計劃任務或窗口運行一樣服務器。最終,我不喜歡這個選項,因爲整個項目直到升級纔會被測試。

是否有可能在創建第二個包裝器/外觀應用程序時做類似的事情,而不是調用它實際引用的類庫並調用worker角色中的Run()函數?

回答

5

你估計Azure emulator可能對你有幫助嗎?這些是真正的Azure提供者和模擬器之間的differences

爲您的工作角色設置一個外觀似乎是合理的。並使用適配器來適應任何可能的雲(或其他託管)技術到該門面?試圖拋出一些想法。我之前實際使用過這種方法,但是是一個「個人」項目。

使用PowerShell來配置您的角色和whatnot。 配置您的Azure模擬器,如this

+0

這聽起來像VS2010用來在本地調試Azure應用程序。這是我能夠以非常有限的「服務器」方式設置的東西(同樣,大多數情況下,非開發人員可以將應用程序託管起來,以便測試它)?如果要爲我工作,我需要像TeamCity或CruiseControl(最終nant/powershell/you-name-it腳本)部署到Azure模擬器。 – Jaxidian

+1

我希望我能理解你:你可以通過腳本完成部署,並讓QA在這些機器上測試。您可以使用Power Shell進行遠程Azure VM訪問。你不需要VS2010來部署或者其他東西。 – Vladimir

+0

如果你的意思是我可以使用腳本部署到模擬器,那麼是的,你理解我。如果你現在在談論Azure本身,那不是我的問題。同樣,這裏的高級目標是能夠「託管Azure」用於測試目的。 – Jaxidian

2

說實話,門面方法是最好採用的方法。

如果部署最終依賴於支持基礎架構,那麼在部署到相同或可比較的基礎架構之前進行全面測試極其困難。 Azure Worker角色的確如此。

通過分離從基礎設施接觸點應用程序的功能方面,你可以花你的努力確保代碼的行爲,因爲它應該證明門面的行爲,因爲它應該,那麼信心測試最終組合。

除非您的測試環境與您的生產環境相同,否則這種影響總會有一些妥協的因素。

這就是Azure分段部署的用途;在切換到生產之前進行最後一次置信度測試。

您可以創建一個超小型部署,純粹用於您的後期測試。您需要花費角色部署的時間,因此,如果您的測試完成後刪除了部署,則可以將成本降至最低。

最後,立面圖案是一個例子,可測性設計。考慮您的代碼以最大化部署前可以測試的數量,並在後期測試階段將風險降至最低。

+0

無論我如何實際託管這個內部部署,我已經完成了你所說的大部分內容。我的工作者角色程序集基本上包含2行代碼:'var foo = new Bar(); foo.ProcessContinuously(someInfoAboutThisEnvironment);' – Jaxidian

相關問題