2011-05-26 287 views
5

我目前與一個傳統的asp.net web應用程序一起工作,其中一個要求是可以部署到windows azure。將網站部署到天藍色和傳統的IIS

我想知道管理到Azure和傳統的IIS Web服務器的部署是多麼困難。

Azure似乎需要Web應用程序項目的特定定製版本可以將定製的Web應用程序部署到標準IIS實例,只要它已被轉換。

編輯:

這是一個ASP.NET Web應用程序,而不是一個網站(編譯一切都變成一個DLL)

UPDATE:

最終因涉及將應用程序轉換爲在Azure中工作的工作量以及與其他雲解決方案相比Azure的成本,因此決定使用傳統的雲託管虛擬服務器。

並感謝你真正的好答案。

回答

8

您是否可以將應用程序部署到Azure幾乎與您的應用程序的工作方式有很大關係。 Azure幾乎要求你的應用程序是無狀態的。如果它是一個普通的vanilla web應用程序,它僅將數據存儲在會話或應用程序高速緩存中,並僅將數據保存到數據庫,則可將其部署到Azure。

如果您有狀態服務像後臺線程一樣運行(反正很糟糕),或者如果您將數據保存到文件系統(除了臨時緩存),那麼您可能會遇到問題。真的,遷移到Azure的問題與遷移到任何多服務器負載平衡解決方案的問題是一樣的。一個警告是永久存儲。

如果您需要將數據存儲在數據庫以外的地方,那麼您最好使用Azure的存儲解決方案,該存儲解決方案具有用於存儲二進制數據,鍵/值數據的API和客戶端庫(他們稱之爲表,但實際上,這不是表)和隊列。他們也有一個透明的blob-as-file-system選項來兼容。如果您希望在您的應用中使用這些也在Azure之外使用的應用,那麼您需要在代碼和支持Azure服務和標準本地服務的Azure客戶端庫之間編寫一個額外的層。 Azure SDK確實包含用於Azure服務的模擬器,但它們絕對不是用於生產用途。

就Azure特定項目的機制而言,這實際上並不困難。是的,您需要在您的解決方案中創建一個特定於Azure的項目,該項目定義了Web角色和部署的內容,但它會引用現有的Web應用程序,而不是相反。您可以將Azure Web角色部署到Azure,也可以繼續將現有應用程序正常併發地部署到IIS。

網站,Web應用程序,MVC,真的沒有太大的區別。其實也不一定是.NET。可以是PHP或Java或任何你想要放在你的VM上的東西。就Azure而言,它的工作方式都是一樣的。

MS喜歡將Azure推廣爲平臺即服務(Paas)解決方案,他們提供大量服務,並在其標準平臺上運行應用程序,並與他們稱之爲基礎架構的Amazon AWS形成對比-as-a-Service(Iaas),它只是一個虛擬機。但是,MS實際上與AWS一樣是一個IaaS解決方案,甚至可能更是如此。AWS和Azure之間的唯一區別是AWS允許您選擇在虛擬機上安裝什麼,使用Azure時必須使用Windows Server 2008 R2作爲虛擬機的基礎(但您可以自定義VM映像以在上方安裝自定義軟件的窗戶)。使用Azure和AWS,主機可以提供額外的PaaS服務,您可以利用這些服務進行數據存儲和消息路由。 AWS還提供大量額外的服務,例如視頻流。

另請注意,使用Azure(和AWS我認爲),即使在非託管應用程序中,您也可以使用它們提供的服務。如果您想從非Azure應用程序使用Azure的數據存儲,那麼可以這樣做,它只是HTTP REST調用來獲取/放置數據。您在數據中心與非數據中心託管應用程序之間輸入/輸出數據的唯一區別是,如果應用程序也位於數據中心內,則數據中心可以是免費的(只是數據輸入/輸出是數據中心內的免費數據,您仍然有存儲空間交易費用)。

+0

謝謝我認爲這實際上是我的大部分問題。是的,我們確實使用文件系統,所以我們需要一個接口層用於文件系統訪問,一旦我瞭解網絡角色的工作原理,看起來就像是最多的工作。 – eaglestorm 2011-05-26 02:10:38

4

有幾件事情:

  • 塞繆爾·內夫的回答提到了一個blob安裝文件系統(雲驅動器)。只有一個實例可能會鎖定此雲驅動器進行寫入,因此它不像網絡文件共享那樣工作。你需要爲此計劃。
  • 您需要與Windows Azure診斷子系統集成,以瞭解應用程序的運行狀態(例如性能計數器,跟蹤日誌等)。
  • 如果您的網絡應用依賴於第三方應用,則需要安裝這些應用。這些實際上通過您的OnStart()事件處理程序或作爲startup task作爲角色實例引導過程的一部分進行安裝。後者允許管理員級安裝(包括註冊表更改,COM組件安裝等)。您需要仔細管理這些安裝,因爲它們會影響實例的啓動時間。
  • 對於一個asp.net應用程序,您需要考慮會話狀態。進程內會話狀態不起作用,因爲每個實例在內存中都有自己的狀態存儲。 SQL Azure會話狀態提供程序沒有後臺清理代理,因此您需要將其構建到您的Web或Worker角色實例中(有關實現,請參閱SQL Azure團隊的this blog post)。最好的選擇是使用剛剛投入生產的新服務AppFabric Cache。這種緩存即服務也爲asp.net提供了一個自定義會話狀態提供程序。注意:截至目前,AppFabric Cache服務只能通過.NET接口訪問;沒有REST接口(所有其他存儲服務 - 表,Blob,隊列 - 都有REST interface)。 .NET,JavaPHP都有存儲客戶端庫。 Ruby有一個來自開源社區。
  • 當需要出現時,您必須管理擴展到多個實例。這不是今天的內置服務,但有第三方服務,如ParaLeap的AzureWatch。還有微軟的System Center Operations Manager,它現在擁有Windows Azure監控支持。您還需要處理縮減後的情況,在這種情況下可以減少服務器實例的數量。

我在一個類似的StackOverflow問題的答案中有一些額外的細節,here

+0

謝謝,還沒有想過發郵件,所以需要將其添加到待辦事項列表中。此外,寫鎖定可能是一個問題,因爲我們將有一個Web角色和一個工作人員角色訪問相同的天藍色驅動器 – eaglestorm 2011-05-26 03:48:26