2012-05-25 15 views
0

我有一個web應用程序可以接收用戶上傳的文件。這些文件存儲在Web服務器的目錄中。其他用戶可以下載這些文件。我正在自定義此應用程序以在Windows Azure上進行遷移。 在Windows Azure上,這些文件存儲在sitesroot和approot中。 Windows Azure會自動同步這些更改嗎?或者我應該手動同步它們?也許,用這種方法存儲文件是不合適的?實例中的approot或siteroot是否同步手動更改了文件系統?

回答

1

@Igorek很好的回答。只是想補充一點。您的每個角色實例都完全獨立運作。就其本質而言,角色實例是Windows 2008 Server。如果您有5個Web角色實例,則有5個VM正在運行,每個VM都有自己的本地存儲。

而且,雖然您可以使用本地存儲,但它是每個虛擬機實例的獨立存儲,它是非持久性的(意思是說磁盤崩潰,數據不存在)。

作爲@Igorek建議的Blob存儲獨立於您的角色實例。您可以從任何地方(從任何角色實例,甚至從本地應用程序)訪問它。 blob存儲按容器組織,每個blob可以達到200GB。但最重要的是:它是耐用:在數據中心內進行三重複制,並被地理複製到鄰近的數據中心。

只要您的存儲帳戶與您的應用程序位於同一個數據中心,訪問速度非常快(每個blob約爲60MB/sec)。此外,你可以設置個人blob(或容器)公衆私人。公共斑點非常適合CSS,圖像或其他您可能想要在網頁上呈現的內容。他們通過URI是可訪問的,如:

https://myapp.blob.core.windows.net/images/logo.png

使用這種類型的URI,你可以將它嵌入到網頁,瀏覽器會從現在直接存儲檢索這些圖像,完全繞過您的IIS Web服務器,這反過來會減輕角色實例的負擔。充分利用服務器的負載,最終可以減少實例數量。

現在,與私人斑點,這些不能被外界看到;您需要使用存儲帳戶密鑰才能訪問這些密鑰。對於您的Web服務器,這是全透明的。您可以快速將數據加載到blob中,將Blob下載到本地存儲,爲最終用戶提供內容......就像從本地磁盤提供內容一樣。如果您需要對文件執行操作,並且必須將文件放置在磁盤上,則可以先將其下載到本地存儲,然後從本地存儲執行操作。

私人blob還有一件事:您可以通過在查詢字符串上使用共享訪問簽名對url進行編碼來授予對這些訪問的臨時訪問權限。這是使用您的存儲帳戶密鑰簽署的,並授予長達一個小時的訪問權限。例如,如果您的最終用戶擁有其他人無法訪問的特定於帳戶的pdf,則您可以選擇提供此內容。或者:

  • 下載,從Blob存儲到本地存儲的私人團塊,然後將其發送回通過IIS中的瀏覽器(或任何其他的Web服務器),或
  • 返回一個鏈接到私人斑點,與編碼一個共享訪問簽名(有一些短TTL過期,可能是5分鐘),讓最終用戶從瀏覽器訪問blob(例如通過鏈接點擊),然後直接從blob存儲下載blob,繞過你的角色實例。
+0

謝謝你的詳細解答。我能再澄清一件事嗎?如果我想動態添加aspx頁面並允許執行它們,我應該怎麼做? – eternity

+0

要實現此目的,您應該考慮創建一個自定義虛擬路徑提供程序,以從Azure Blob存儲而不是本地文件系統獲取aspx頁面。您可以從以下知識庫文章開始:http://support.microsoft.com/kb/910441 –

+0

謝謝。這似乎是我需要的。 – eternity

1

的確,Azure確實在之間,而不是在實例之間同步目錄。您想要將文件存儲在中央存儲中。 Azure Blob存儲是迄今爲止最好的選擇。訪問存儲的API相對簡單

相關問題