2013-11-02 26 views
1

我有幾個基本上是html版本的powerpoint演示文稿的子網站。我需要在父應用程序的每個Azure Web角色上安裝這些文件,因爲這些文件必須來自同一個域(在SSL環境中進行依賴跨幀操作。)需要在啓動和點播時將文件下載到Azure Web角色

我只是將它們添加到項目文件並上傳它們,但這並沒有擴展,這些軟件包可能會超過5MB一塊,最終還會有大量存在。

在啓動角色時,我應該怎麼考慮從say,S3或Azure Blob中提取文件,並在有更新時由我手動觸發?

對於按需,父應用程序是一個c#MVC應用程序,所以我可以使用該框架內的任何內容來觸發作業。

回答

4

首先:如果您在Azure中運行網站,則應考慮Azure blob與Amazon S3存儲,以避免出口成本(在AWS端)和延遲。因爲(就像你已經看到的那樣),部署包增長得非常大。這是一個相當普遍的模式,因爲從存儲中獲取內容,這是一個相當常見的模式。另外,更新單個文件並不容易,因爲您需要重新打包/部署軟件包。

在您的Web角色中,您有一個OnStart()事件,該事件在您的實例被添加到負載均衡器之前被觸發。這可能是放置您的內容下載代碼(或通過觸發初始化應用程序或腳本執行下載的啓動腳本)的最佳位置。在C#中,一旦參考了CloudBlockBlob,就可以執行DownloadToFile()DownloadToFileAsync()來抓取blob中的內容並存儲在本地Web應用程序的內容目錄中。還有很多其他的方法 - 只是以文件下載爲例。

至於自動更新:沒有blob觀察者的概念;你需要實現一些東西來識別更新。可能是管理主題上的服務總線消息,其中每個實例都訂閱了該主題,正在偵聽有關更新的消息?然後,每次推送新內容時,都可以將消息推送到標識內容的主題(可能使用子網站名稱)。您也可以在OnStart()期間啓動每個Web角色實例中的偵聽器。

+0

謝謝,這是一個非常徹底的解釋如何接近它,這將使我開始。有關使用斑點的好建議。 –

2

關於自動更新,大衛的權利,沒有blob-watcher的概念。這是你需要自己做的事情。

一個建議(除大衛之外)是利用Blob的ETag功能。每當blob被更新時,其ETag值就會被更改。當您在角色的OnStart()方法中下載blob時,您也可以獲取它們的ETag並將其存儲在某處(可能位於緩存或本地存儲中)。這將表明你的斑點的初始狀態。

您可能會觸發一個計劃任務,使用Quartz.net或類似的調度庫來定期獲取blob列表並獲取Blob的ETag作爲列表的一部分。如果您攜帶的ETag與服務器返回的ETag不同,則意味着內容已更新,然後您可以爲已更改的斑點啓動下載過程。