《Windows Azure Platform 系列文章目錄》
如果讀者使用的是國內由世紀互聯運維的Azure China服務,請參考筆者的博文Azure China (4) 管理Azure China Storage Account
update 2014-3-31
Windows Azure Storage帶寬10GB,WindowsAzure Blob帶寬60MB
Windows Azure PaaS本質上來說就是將你本地的應用程序打包,然后上傳到Windows Azure VM進行托管運行。
注意:任何保存在Windows Azure PaaS盤符的內容都是臨時的、非持久化的。比如,我通過Windows Azure
VM在D盤新建了一個txt文件,這個文件不會一直被保存。因為某些特殊情況,VM節點會宕機(系統升級、物理損壞)等,后台Fabric Controller會把該VM下的Web Role和Worker Role的內容遷移到同一數據中心的另外一台機器上,但是不會自動遷移D盤新建的txt文件!如果需要保存持久化的內容,一定要使用Windows Azure Storage,切記切記!
Windows Azure Storage是支持三重冗余的,也就是說,保存在Azure Storage的內容,會在同一個數據中心保留有3個副本。這樣的好處顯而易見:當數據中心發生一般性故障的時候,比如磁盤損壞,機架服務器損壞等,用戶保存在Azure Storage的數據不會丟失。每次對於Storage的寫操作,都會對三個副本進行同步寫操作,等到在副本操作完畢之后,才會返回執行成功給客戶端。
Windows Azure提供了三種不同類型的存儲服務(這里的存儲是非關系型數據,比如圖片、文檔等文件),用來提供給Windows Azure上運行的應用程序存儲數據使用。依據不同的存儲格式會有不同的限制,因為這些存儲服務都是以分散式巨量存儲(Distributed Mass Storage)為核心概念所設計出來的,為了要達成快速在分散式存儲空間中存儲與管理數據(還包含高可用度的贅余存儲管理),微軟有在數據的存儲上做一些限制。
微軟還提供了REST API來方便用戶操作Storage Service。

1.BLOB
BLOB(大型二進制對象)數據是用來存儲文件、圖片、文檔等二進制格式的文件。
BLOB分為2種:
-Block BLOB(區塊型BLOB存儲),這類的存儲以4M為一個區塊單位,單一文件最大可以存儲200GB,且區塊不會連續存儲,可能會在不同的存儲服務器分塊存放。為了適應文件的上傳和下載而專門進行了優化。當應用程序要求時,會一招文件的KEY以及區塊存儲區提供數據。
-Page BLOB,是優化的隨機訪問。它會在存儲區中划分一個連續的區域供應用程序存放數據,它本身可以視為一個大型的VHD(虛擬機軟盤)。如果我們拿我們的應用程序遷移到Windows Azure平台上,對於文件的讀寫操作可能需要進行一些修改,但是通過Page Blob就可以方便我們遷移:微軟特別在Page BLOB上提供了一組將Page BLOB虛擬成軟盤的功能,稱為Windows Azure Drive(研發代號為XDrive),它能夠支持NTFS API,也就是說應用程序可以利用現有的文件管理API(包含System.IO的類型)來訪問Windows Azure Drive中的文件夾與文件數據,並且這些數據會保存在Windows Azure數據中心內。
Block Blob和Page Blob的區別,請參考Windows Azure Storage (19) 再談Azure Block Blob和Page Blob
BLOB服務由BLOB本身以及其收納容器(Container)構成,容器可視為一般本機上的文件夾。
你可以通過REST API來訪問,如下:
http://accountName.blob.core.windows.net/<containerName>/<blobName>
accountName表示哪個Azure帳號(Account)下的資源。
blob.core.windows.net表示我訪問的是blob的資源。
containerName表示容器的名字,可以認為是訪問某一文件夾下的資源
blobName表示我要訪問的資源的名字。
ContainerName容器,從概念上來將類似於文件夾
Container類型分為三種: Public Container,Public Blob和Private
Private(私有)表示,這個Container(文件夾)里面的內容,都不允許匿名訪問
比如 http:/mystorage.blob.core.chinacloudapi.cn/privatephotos/1.jpg
上面的container name是privatephotos,類型是私有(private)
所以不允許匿名文檔,這也是為什么你之前上傳的資源無法通過IE匿名訪問
對於某些私密的信息,比如內部的圖片、文件,可以設置private類型
公共blob,表示允許訪問這個某一個資源,但是無法遞歸訪問這個container (文件夾)
對於可以匿名訪問資源,比如公共圖片、照片,可以設置公共blob
公共容器(container),表示可以遞歸訪問這個container(文件夾)下的所有資源
注意:ContainerName的命名規則
1.必須以英文或數字開頭,且名稱內只能有英文、數字及dash(-)
2.不能以dash(-)開頭或結尾,dash(-)不能連續出現
3.所有英文的字符都必須是小寫
4.長度為3-63之間
Blob的命名規則:
1.除了URL的保留字符以外,其他的字符組合都可以使用
2.長度為1-1024個字符
3.盡量避免以dot(.)或者是forward slash(/)結尾。否則會造成Blob Service誤判。

2.Table
這里的Azure Table是非關系型數據庫的表,不能與SQL Server中的Table混淆。
Azure Table中表最大容量是200T,每個Azure Table 都必須有Partition Key和Row Key。
Partition Key的值可以設置記錄的物理位置。在Azure Table中的2條數據,如果Partition Key值相同,則表示這2條數據存儲的物理位置是相同的;如果Partition Kay不同,則表示這2條數據可能存儲在同一台物理介質上,或者不同的2台物理介質之上。
Row Key表示一行數據的唯一值。使用PartitionKey和RowKey可以定位一個唯一的實體。
Azure Table也提供REST API來訪問,如下:
http://accountName.table.core.windows.net/<TableName>

3.Queue
Queue(隊列)是一種先到先服務(First-Come, First-Serve),或稱為FIFO(先入先出)的存儲服務,它可以允許應用程序將消息存儲到隊列中排隊,然后由負責處理的應用程序(通常是Worker)由隊列提取消息並處理以后,將消息由隊列中移除。消息可以是字符串或是最長8KB的二進制數據,隊列經常會作為跨運行個體通信以及工作切割通知的消息傳遞之用。
Queue消息隊列的每個消息(Message)最大支持64K,Queue最大容量200TB
http://<account>.queue.core.windows.net/<QueueName>

