【Azure Services Platform Step by Step-第9篇】Windows Azure Storage概覽
在本系列的第一篇【Azure Services Platform Step by Step-第1篇】INTRODUCING THE AZURE SERVICES PLATFORM里就介紹過了,Azure Services Platform包括4個部分。其中,Windows Azure是支撐整個微軟云平臺(Azure Services Platform)的基礎。換句話說,Windows Azure是“云平臺的操作系統”,它提供了云平臺最基本、最重要的服務。
Windows Azure由兩個重要部分構成:
- 虛擬化計算服務(提供基于VM主機。在上一篇里已經示范過它。)
- 各種數據存儲服務。即本文要介紹的Windows Azure Storage。
Windows Azure Storage可以讓程序員存儲他們想存儲的任何數據。按照“云計算”的概念,數據一旦存儲到“云”中,就永遠不會丟失,程序員可以在任何時候、從任何終端和任何地方獲取任意大小的數據。Windows Azure Storage正是繼續遵循這一思想。
Windows Azure Storage由三個重要部分構成:
- Windows Azure Blob:存儲大型數據
- Windows Azure Table:存儲表數據。類似關系數據庫中的數據表,但不同。
- Windows Azure Queue:為異步工作提供分派消息服務。有點類似Windows系統自身的消息隊列。
接下來我們來以此介紹這3個數據服務。
Windows Azure Blob
剛才說過了,這個牛X的服務,就是用來存儲大型的數據的。怎么樣的數據算大型呢?文件!不知道你是否和筆者一樣,剛看到這個服務時第一個反應就是:用它來做網絡硬盤。: )
Windows Azure Blob的數據模型非常簡單,看一眼就不會忘記。我們真的大可以把它想象成云端的一個無限大的硬盤。它的結構如下圖:
大家先別看“Block”部分。很一目了然吧? 一起繼續YY: 如果Account是那塊硬盤,Container就代表不同分區(可惜分區里沒有文件夾概念),Blob就是分區根目錄里不同的文件。那么上圖的意思是:在我的那塊叫做"sally”的硬盤里,有"pictures”和"movies”兩個分區,"pictures”分區根目錄里有"IMG001.JPG “”IMG002.JPG”這兩個文件。
這塊云端的無限大硬盤在哪里呢?怎樣才能找到它?也很簡單,它仍然采用Azure的管理,使用REST的方式操作它。地址是:
http://.blob.core.windows.net//
例如:http://maheshwar.blob.core.windows.net/livesearchimages/AcacusDesert_EN-US1025081982.jpg (這是一張圖片,點擊鏈接可直接訪問)
現在可以繼續解釋上圖中的“Block”了。既然是采用REST的方式,就是通過HTTP的方式,那么真正很大很大的文件,比如1G的電影,要直接傳上去顯然是一件非常困難的事。Block就是為解決這個問題而存在的。只要你心情好,你大可以把這個電影分割成1000個1M的Block來上傳。Block對下載流程是透明的,下載者根本不知道也不用去知道它正在下載的文件被分成了多少個block。
(事實上筆者真的用它做自用的網絡硬盤,從開發和使用角度來說都非常方便,以后有機會我整理一下代碼與大家分享一下)。
Windows Azure Table
這個服務是很多人心中的最愛。
正在使用VS200X來開發簡單ASP.NET應用程序的時候,你會許和很多人一樣有以下兩個重要習慣:使用關系數據庫(如SQL Server);數據庫中的某些表直接對應程序里的實體類。你或許會使用代碼生成工具,ORM工具,或者自己寫三層架構來完成關系數據庫to對象的映射。發現沒,此時的你是多么希望能夠直接將實體存入數據庫當中啊!
Windows Azure Table服務就是用來解決這個問題的。它可以直接將實體類、實體對象存入表格結構當中。它讓太多的人感到欣喜。
它比較類似傳統關系數據庫當中的表格,但是又有很大不同。先看下圖的結構:
與你想的一樣,它支持LINQ, REST。HTTP地址是 http://.table.core.windows.net
這部分內容比較多,過幾天我會單獨使用一節的內容來做一個簡單Demo講解它的使用。
Windows Azure Queue
Windows Azure Queue因為Windows Azure的服務架構而存在——這個一個需要消息隊列的架構。
我們在《【Azure Services Platform Step by Step-第7篇】別把Windows Azure當虛擬主機使——理解Windows Azure服務架構》里了解過,Windows Azure VM中是如何引入了Web Role和Worker Role這一非常創新的概念,從而脫離了普通虛擬主機,晉升為“云主機” : )
Windows Azure Queue最常見的一個應用就是作為Worker Role和Web Role之間通訊的消息隊列。
再舉個例子。Web Role是前臺賣牛肉面的,Worker Role是后臺煮牛肉面的。顧客只能接觸到Web Role這個店員,它收集不同顧客的需求,保持先來后到的順序記錄這些需求到一疊紙條上遞給大廚Worker Roler。大廚Worker Role帶著口罩,什么話也說不出來,他的工作就是按順序完成紙條記錄的任務。Windows Azure Queue就充當了這個“任務紙條”的作用。
理解完了“牛肉面”的例子,再看看下圖結合一下“云計算”的實際吧。是不是很容易理解呢?
Windows Azure Table 與SQL Data Services 的重要不同之處:
在實際開發中,這兩者都是最常用的數據存儲服務。
博客園網友 montaque和老趙同志在《【Azure Services Platform Step by Step-第8篇】開發部署Azure留言板》一文的評論中一起討論了Windows Azure Table和SQL Data Services的不同。
Windows Azure Table 旨在提供輕便快捷低成本的大規模存儲數據,包含實體和屬性。它不是關系數據庫,所以不能提供類似SQL中joins的方法,也不能管理 foreign keys。
SQL Data Services旨在提供嚴謹的關系數據方法。
在當前的Azure版本中(Azure平臺第一個版本,feasure還很不完善),如果開發者對joins或foreign keys等關系數據庫的功能需求較大,你可以選擇SQL Data Services,反之建議使用開發更為快捷的Windows Azure Table。