2011-12-19 21 views
1

我開始將幾個應用程序遷移到Azure。看起來非常簡單,我所要做的就是將一個附加的Azure項目添加到我的解決方案中,並將其指向我的Web項目。如何設計我的應用程序以利用Azure,但防止被鎖定?

但是,我擔心的是,團隊開始用Azure特定功能污染我的應用程序並依賴它。例如,文件上傳將用於Azure存儲,Azure緩存等。如果我們保持Azure並且所有客戶都樂於使用Azure,那麼這一切都很好。如果我們發現某個客戶對Azure不滿意,我不希望進行大量刪除Azure功能的工作。

只是想知道是否有人遇到類似的問題。理想情況下,我希望能夠將項目發佈到Azure,並且它使用Azure功能,Azure Code等,第二次發佈允許我使用具有非Azure功能的IIS。

我假設我只需要小心使用接口正確和DI等FileUpload與AzureFileUpload。對於像CSS /腳本等的Azure存儲資源而不是本地資源那樣的問題呢?我應該看看使用Azure Cloud Drive來模擬標準NTFS環境嗎?

是否有任何建議/模式/實踐?有沒有人有類似的經驗?如何分離項目和項目結構等?我想很多是標準設計。只是想知道其他人如何接近避免與Azure鎖定。

回答

3

有幾件事情,如果你擔心,你可以這樣做:

  1. 堅持以核心技術像asp.net,ado.net,SQL也存在天青之外。
  2. 摘要使用Azure特定服務的代碼。

對於第一個,只需掃描您的代碼以確保運行時服務不包含Azure名稱空間。

但是,要成爲一個雲服務並獲得它的好處,你應該考慮採用天藍色的服務。

對於第二個,您可以創建一個由接口提取的雲服務層。只有該層與天藍色的特定服務進行通信。如果您需要在天藍色之外工作,則只需要該層的插件。

0

我會設計一個您的應用程序可以使用的雲接口(作爲實際雲/網絡的抽象),以及該接口的Azure實現。

然後,在需要時,您可以使用相同的界面製作您的應用可以使用的其他雲實施。

在設計接口時,挑戰只包括與每種雲/網絡相關的通用方法。因此,這將阻止您的應用程序直接使用任何Azure特定功能,但這正是目的。

2

如果您希望應用程序能夠在IIS或Azure上運行,並且這些是您唯一的兩個目標,我唯一的建議就是不要過分抽象/界面。在web.config和WebRole.OnStart()中可以處理一些差異,例如將緩存用作會話提供程序或將診斷記錄到表存儲。

有些事情會幫助創建接口,然後根據您的部署目標(Web配置轉換是我們使用的)在配置中注入這些接口。例如,在IIS中,您可能希望在單獨的線程中發送電子郵件,而在Azure中,您可能會使用輔助角色和隊列。您可以爲IIS設置1個ISendEmails實現,併爲Azure設置不同的web.config轉換。

你可以做的另一件事,取決於你有多少文件數據,將文件存儲爲數據庫中的blob列。我敢肯定有人會告訴我這對性能不利,並且可能會在sql服務器中使用GB文件數據而變得昂貴,並且他們有一點意義。儘管IIS/Azure的靈活性高度關注,但值得考慮。

相關問題