應用程序離不開數據,同樣云計算應用程序也離不開數據的支持。Windows Azure Service Platform,微軟云計算服務平臺通過提供Storage Service——Windows Azure Storage來存儲云應用的數據。Windows Azure Storage由三個重要部分或者說三種存儲數據服務組成,它們是:Windows Azure Blob、Windows Azure Table和Windows Azure Queue。在本文中將給大家介紹Windows Azure Storage中的這三種存儲服務、Visual Studio環境下配置和使用開發存儲和Windows Azure Storage應用場景。
Windows Azure 存儲服務的構成
Windows Azure Storage由三個重要部分構成:
Windows Azure Blob:存儲大型數據。
Windows Azure Table:存儲表數據,類似關系數據庫中的數據表,單有所不同,將在后文中介紹。
Windows Azure Queue:為異步工作提供分派消息服務,有點類似Windows系統的消息隊列。
它們的組成也可以使用圖1來描述:

圖1 Windows Azure 存儲服務組成
在Windows Azure中使用存儲服務最簡單的方法是使用Windows Azure Blob。Blob存儲二進制數據,如圖像,XML文檔,壓縮文件和其它在容器內任意排列的字節。
Blob存儲數據是通過一個簡單的層級關系來實現的,每個賬戶Account下有一個容器,這個容器就是用戶定義的一套只有一個屬性的Blobs(Blob集合),容器不直接存儲數據,每個Blobs包含了多個Blob。Windows Azure Blob存儲數據和層級關系如圖2所示:

圖2 Blob的層級關系
Blob存儲數據的地址是:http://.blob.core.windows.net/
可以通過REST的方式來操作,也就是說可以通過如圖1所示中的訪問方式:Http/Https。在上傳大文件的時候,我們可以先把大文件分割成多個Blob來上傳,這樣就解決了大文件上傳的問題。Block對下載流程是透明的,下載者根本不知道也不用去知道它正在下載的文件被分成了多少個block。
注意在PUT Blob操作中你可以上傳最大64MB的數據創建一個Blob,通過上傳連續塊可以創建大于64MB的Blob,塊最大只能是4MB。
(2)Windows Azure Table
Blobs只能針對大容量二級制數據存儲,它真是太“不結構化”了。為了保存和使用云應用程序中具有緊密的數據,如在云存儲服務中存儲一個對象,這個對象是有些自己的屬性,其實這樣的對象我們可以看成是示例或者實體,于是Windows Azure Table就派上用場了。Windows Azure Table可以直接將實體類、實體對象存入表格結構當中。
Windows Azure Table和SQL Server/SQL Azure的區別在于,Windows Azure Table是一種服務,旨在存儲具有實體關系的數據,而不是關系數據庫。Windows Azure Table 提供輕便快捷低成本的大規模存儲數據,包含實體和屬性。它不是關系數據庫,所以不能提供類似SQL中joins的方法,也不能管理 foreign keys。事實上,一個單一的Windows Azure Table可以存儲數十億個實體,一個Windows Azure Table的大小能達到萬億字節,這是一個相當大的存儲量。通過示例圖3也可以說明這一點。

圖3 development fabric
(3)Windows Azure Queue
Windows Azure Blob和Windows Azure Table都是用來存儲和訪問數據的。Windows Azure 提供了第三種存儲服務——Windows Azure Queue,為異步工作提供分派消息服務,最常見的一個應用就是作為Worker Role實例和Web Role實例之間通訊的消息隊列。有關Windows Azure Queue使用的示例我們將在應用場景來做描述。
不管在Windows Azure Storage中是使用Blob、Queue還是Table來存儲數據,為了保證數據的安全,微軟云計算服務平臺至少會在同一數據中心三個獨立的容器中存儲Blob,Table和Queue,Windows Azure基于地理位置的功能允許你將數據復制到多個微軟數據中心,增強災難恢復能力,提高特定地區的性能。
Visual Studio環境下配置和使用開發存儲
安裝了VS2008或VS2010、SQL Server 2005/2008/2008 R2后,再安裝一個擴展的工具包就可以進行云應用的開發了,這個擴展工具包是:Windows Azure Tools for Microsoft Visual Studio 1.1,其下載的地址是:http://www.microsoft.com/downloads/details.aspx?familyid=5664019E-6860-4C33-9843-4EB40B297AB6&displaylang=en
使用VS 2008 和VS2010開發云應用的過程沒有本質區別,但是VS 2010提供了云應用的開發、調試、部署、管理的整套工具,如開發云計算的程序模式、開發云計算的資料模式、開發云計算的項目范本、離線測試云計算項目、云計算部署等等,這些功能都縮短了云應用的開發周期,因此我們將使用VS 2010來開發云應用。注意在開發云應用的過程中,需要安裝SQL Server Express,如果沒有安裝,可以使用VS 2010的安裝文件添加安裝。
除了上述安裝,Visual Studio環境下使用Windows Azure Storage,還需要安裝Windows Azure SDK,其下載地址是:http://www.microsoft.com/downloads/details.aspx?FamilyID=21910585-8693-4185-826e-e658535940aa&displaylang=en
上面講了Windows Azure Storage在Visual Studio下的開發環境,要想讓Windows Azure Storage在云應用程序里“Run”起來還需要做以下幾步工作:
(1) 配置連接字符串:這個字符串指明了你的Windows Azure storage 賬戶。
(2) 初始化Windows Azure Storage:設置項目的Start Development Storage Services屬性為True,其方法是:右擊項目|Properties,屬性|Development tab,開發Tab|Start Development Storage Services。
這些安裝和配置完成后,我們就可以在程序里使用Windows Azure Managed Library和Windows Azure Storage Services REST API這兩個類庫來訪問Windows Azure Storage。其中Windows Azure Managed Library包含的命名空間有:
Microsoft.WindowsAzure
Microsoft.WindowsAzure.ServiceRuntime
Microsoft.WindowsAzure.Diagnostics
Microsoft.WindowsAzure.Diagnostics.Management
Microsoft.WindowsAzure.StorageClient
Microsoft.WindowsAzure.StorageClient.Protocol
Windows Azure Storage Services REST API提供了Blob Service API、Table Service API、Queue Service API。
Windows Azure Storage應用場景
在Windows Azure Storage應用場景里,我們更多是通過一些示例圖或者實際應用的圖來給大家介紹一些Windows Azure Storage的應用場景。

圖4 Table 、Queue和Blob的應用場景
在如圖4所示的應用場景中,用戶通過Web Role實例訪問Table里的數據,Web Role和Worker Role之間的消息傳遞是通過Queue來實現的,而Worker Role則訪問了Blob里的大數據。

圖5 Queue和Blob的應用場景
在圖5所示的場景中,Web Role和Worker Role之間的消息傳遞是通過Queue來實現的,而Worker Role則訪問了Blob里的大數據。

圖6 Table的應用場景
在圖6所示的應用場景中,用戶通過Web Role實例訪問Table里的數據。
下面我們給出兩個使用Blob和Table訪問到的數據界面,如圖7~8所示:

圖7 使用Blob
在圖7中,我們可以瀏覽到Blobs里存儲的二進制數據,默認狀態下,這些數據是只讀的,可以在上面的搜索條里對數據進行查找,也可以對文件下載,這是不是類似于FTP呢?

圖8 使用Table
在圖8中,使用Table存儲了數據,每一行都標示了一個實體,每一列都標示了實體的一個屬性。從存儲看上去還是和SQL Server的數據表很類似的。同樣,可以對數據進行過濾,而且還可以對數據進行刷新。
總結
Windows Azure Platform支持三種可擴展的持久化存儲:非結構化數據(Blob)、結構化數據(Table)、應用程序和服務之間,或應用程序與服務之間的消息(Queue)。再結合Visual Studio的開發環境和應用場景,加深了大家對Windows Azure 存儲服務的理解。