[Windows Azure][IT鐵人賽系列] Day 10 - Windows Azure 模擬環境 (Simulated Environment)

為了要讓開發人員無需為了測試簡單的功能就不斷的在雲端環境和本機間來回,所以特別準備了一個在本機上模擬雲端環境的工具,稱為Windows Azure Simulated Environment...

做完First Cloud Application,也許讀者已經有滿腹的疑問了,首先就是我們並沒有將應用程式部署到雲端,為什麼就可以執行雲端的應用程式了?

這也是微軟幫大家省錢的一個工具,為了要讓開發人員無需為了測試簡單的功能就不斷的在雲端環境和本機間來回,所以特別準備了一個在本機上模擬雲端環境的工具,稱為Windows Azure Simulated Environment,附有兩個環境:

1. Compute Emulator,最早稱為Development Fabric,模擬雲端的應用程式執行環境,包含Web Role與Worker Role的執行狀況、模擬Fabric Controller的狀態切換以及應用程式狀態變更等的模擬。

2. Storage Emulator,最早稱為Development Storage,模擬雲端的Storage服務,有本機專用的URL以及帳戶,供應用程式模擬使用雲端的儲存功能,未來要切換時,只需更改URL以及帳戶即可。

模擬器可以使用指令來啟動,也可以透過Visual Studio偵錯的方式啟動,不論是哪一種,在啟動時都會在系統匣中出現提示:

image

而在系統匣中的Windows Azure圖示上按右鍵,可以選擇要顯示使用者介面,以及啟動或停止模擬器等功能:

image

我們可以利用Show Compute Emulator UI來顯示Compute Emulator的使用者介面:

image

在Compute Emulator中會顯示Fabric Controller和應用程式間的互動,同時也提供了數種功能來操作應用程式的狀態變化:

image

而Compute Emulator也可以用來測試Windows Azure的Log機制是否正常,以確保未來部署到雲端環境後記錄機制仍可正常運作。

另一個模擬器Storage Emulator是以WCF架構設計的,配合SQL Server資料庫來模擬雲端上的儲存環境,可以模擬Table, Queue與BLOB三種類型,預設的URL是http://127.0.0.1:10000-10002(分別代表BLOB, Table與Queue),同樣的也可以測試當儲存服務沒有回應時的例外處理:

image

Visual Studio內的雲端專案範本,預設均是使用儲存模擬器,且有預設的連接字串:UseDevelopmentStorage=true,Windows Azure SDK的Storage Client會自動辨識此名稱並載入預設的本機URL與帳戶,未來要部署到雲端前,在雲端專案的屬性中設定改變為雲端的真實儲存帳戶與URL即可:

image

不過就算再怎麼像正式的環境,它們畢竟還是模擬器,無法取代真實環境,所以會和正式環境有幾個差異點:

1. Windows Azure Compute Emulator部份:

  • 除錯器不能掛到正式的Windows Azure環境,任何除錯用的訊息都要用Diagnostics API來輸出。
  • Compute Emulator中運行的Windows Azure應用程式可以存取本機的系統資訊,如GAC/Registry/Machine Configuration等等,但這些東西在正式的Windows Azure環境中沒有,Windows Azure預設的帳戶權限也不允許應用程式存取這些資訊,因此在開發雲端應用程式時不可也不應該試圖修改任何系統元件的設定。
  • Compute Emulator可以直接將記錄資訊輸出到UI中,如同使用Windows Azure Diagnostics抓取的一樣,但在正式的Windows Azure環境中,只能用Windows Azure Diagnostics API將訊息存到Table Storage。
  • 在正式的Windows Azure環境中,開發人員可以利用服務組態檔在不重新部署應用程式的情況下設定執行的Role instance數量,但在Development Fabric中這個功能不支援,只能重新部署。
  • Development Fabric無法完全模擬Windows Azure Load Balancer(負載平衡器)的所有行為。

 

2. Storage Emulator部份:

  • Storage Emulator和正式的Windows Azure Storage的服務URL不相同。
  • Storage Emulator沒有Scale能力,也無法支援大量的同時使用者。
  • Storage Emulator使用固定的Account name與Account key,如上所述。
  • 本機的BLOB Service大小最高2GB。
  • 在Storage Emulator的Table Service中的日期範圍,與SQL Server 2005所支援的日期範圍相同。
  • 在Storage Emulator的Table Service可以支援partition key與row key的屬性值要小於 900 bytes,而account name, table name與key property name三者加總的長度也不能超過 900 bytes。
  • 在Storage Emulator的Table Service,每一列的長度不可以超過1MB。
  • 在Windows Azure Storage中,每個entity transaction group的批次大小最大是4MB,但在Storage Emulator中不會檢查這件事。
  • 在Storage Emulator的Table Service若查詢表格中不存在的欄位,會回傳錯誤,但在正式的 Windows Azure Storage不會回傳錯誤。
  • 在Storage Emulator的Table Service中,以Edm.Guid與Edm.Binary為型別的屬性,只支援eq (=)和ne (!=)運算。
  • 在Storage Emulator的BLOB和Table服務不支援中文字串,Windows Azure Storage則支援。

Reference:

http://msdn.microsoft.com/en-us/library/hh403989.aspx

http://msdn.microsoft.com/en-us/library/hh403990.aspx