Windows Azure 提供具備可高度延展的儲存機制,來儲存結構化與非結構化資料,此一機制稱為 Windows Azure Storage。 Windows Azure Storage 以 REST 為基礎的 Web Service 提供開發介面。這意味著任何平台下的任何程式語言,只要能夠支援 HTTP 通訊協定,即可藉由此一開發介面存取 Windows Azure Storage。當然位處於相同資料中心內的 Windows Azure 應用程式存取 Windows Azure Storage 效能表現會更為突出。

就如同 Windows Azure Cloud Services 託管服務 (hosted service) 一樣,Windows Azure Storage 提供了維持高可用度所需的容錯能力,目前所有儲存於Windows Azure Storage 內的資料微軟皆會自動備份三份以防資料損毀遺失,若用戶願意付額外的費用, Windows Azure Storage 也提供自動跨越資料中心之資料備份服務。

由於 Windows Azure Storage 所儲存的資料皆以 REST 架構透過 HTTP 通訊協定存取之, 因此 .NET Framework 內眾多支援 REST 架構的函式庫可以運用不同抽象層級方式使用 Windows Azure Storage。例如: 熟悉 .NET Framework 的���發人員可以直接運用 WCF 呼叫 Windows Azure Storage API ,也可以透過 WebRequest 類別直接以 HTTP 通訊協定存取 Windows Azure Storage,而 Windows Azure SDK 也針對 .NET Framework 提供封裝妥善的用戶端函式庫,讓熟悉 .NET Framework 開發人員更容易地使用 Windows Azure Storage。由於 Windows Azure Storage 採用 REST 架構,使得其它非微軟的程式語言與軟體框架;例如 : Java、PHP、Ruby 能輕易與之整合。目前 Windows Azure Storage 提供四種型態的儲存機制,分別為 blobs、drives、tables與queues。在使用 Windows Azure storage 這項服務之前,用戶必須先透過 Windows Azure 管理入口網站 https://manage.windowsazure.com/  建立妥儲存帳號 (storage account)。

 

image

建立儲存帳號的同時,用戶必須決定 Windows Azure Storage 所在之資料中心地理位置,以台灣用戶而言,建議使用微軟東亞 (East Asia) 資料中心,可以得到較佳之存取速率。目前每個儲存帳號允許儲存高達 100 terabytes 之資料量,用戶預設可以建立五個帳號,若用戶需要擴增較預設值更高的儲存量,可連絡 Microsoft Online Support 請求協助以達成擴增目的。

Blobs

一般而言 blob 是專為儲存大型二進制資料所提供的儲存機制,所謂二進制資料包含影像、影片、音樂等各類檔案,每個儲存帳號可以擁有任意數量的容器 (containers),而每個容器內可以存放任意數量的二進制型態資料,任何程式或瀏覽器在權限管制允許存取的前提下,可以透過儲存帳號與容器所組合出來的 URL 來存取特定二進制檔案,其格式如下

http(s)://<儲存帳號名稱 storage account name>.blob.core.windows.net/<容器名稱 container name>/<二進制資料檔案名稱blob name>

Windows Azure blob儲存機制亦支援根容器 (root container) 這樣的概念,當我儲存的二進制檔案僅希望搭配 domain name 方式表達時,這項功能即可發揮作用,用戶僅需使用保留名稱 $root 即可代表根容器。假設某一個名為"mypicture.jpg" 的影像檔儲存於 blob 之中,而用戶註冊的儲存帳號為"myaccount",當用戶以下列的方式表達此一檔案的 URL :

http://myaccount.blob.core.windows.net/$root/mypicture.jpg

將等同於如下的這個 URL :

http://myaccount.blob.core.windows.net/mypicture.jpg

用戶可以自由組織blob 內儲存的眾多檔案與配合之命名空間 (namespace) 的層次 (hierarchical),但在多數的應用情境中,命名空間通常都很簡單而不會有太複雜的層次關係。關於 blob 命名空間的實例如下:

http://myaccount.blob.core.windows.net/pictures/trips/seattle/spaceneedle.jpg

乍看之下您或許會以為有多個樹狀層級的資料夾 "pictures"、"trips" 與 "seattle" 會對應到此 blob 的命名空間,但實際上所有路徑中許多成員僅是二進制檔案自己的名稱而已。在這個例子中,容器的名稱 (container) 為"pictures",所儲存的二進制檔案名稱則是 "trips/seattle/spaceneedle.jpg"。

容器 (container) 與二進制檔案都可以自由選擇是否要儲存些額外的 metadata,這些額外的 metadata 是以連串配對的 名稱(name)/數值(value) 所組成,最多可以儲存 8 kilobytes (KB) 的資訊,此外開發人員可以透過 CreateUpdateDelete 等方法來新增、異動與刪除 Windows Azure blob 內的資料。blob 也提供 CopySnapshotLease 等進階資料操作命令。

在 Windows Azure blob 中容器 (container) 也是權限管制的基本單位,預設所有存取 blob 的應用程式都需要知道一組安全鍵值 (secret key),而開發人員可以用容器為單位設定存取規則,當然用戶也可以透過此一機制把 Windows Azure blob 開放給任何人以匿名方式存取二進制檔案。除了容器層級的權限管制之外,Windows Azure blob 也提供二進制檔案層級的權限管理,容器層級的權限存取控制,將會影響一個程式能否順利尋得與存取該容器內的所有二進制檔案。而二進制檔案層級的權限管理則更進一步決定特定檔案的 URI (Uniform Resource Identifier) 是否能被某一程式順利存取。下圖是 Windows Azure 管理入口網站中管理容器 (container)  之使用者介面。

image

Windows Azure 提供 CDN (content delivery network) 快取服務,所有置放在 Windows Azure blob 的資料皆可與 CDN 服務相結合,將您的資料快取在離您客戶地理位置最近的資料中心,提升用戶存取二進制檔案的速度。例如,某一個大型影片檔在台灣特別熱門,用戶可以將此影片檔儲存於 WindowsAzure blob 並且啟用 CDN 服務,讓台灣地區的用戶存取速度更快,Windows Azure 是少數在台灣設有 CDN 資料中心的雲端服務,此一服務將大幅提升二進制檔案存取速率,亦會增加額外支付給微軟的費用。

下圖展現了Windows Azure blobs 如何組織眾多儲存於其內的二進制檔案,一個儲存帳號之下可包含多個blob 容器,而容器內可以包含多個二進制檔案。

clip_image001

Blob 儲存服務

Windows Azure blob 又區分為兩種類型,分別為 block blob 與 page blob,分別說明如後。

Block Blob

每個 block blob 最大能夠儲存 200 gigabytes (GB) 的單一二進制檔案,儲存於其內的檔案可以切割成多個資料區塊 (data blocks),每個資料區塊最大可容納 4 megabytes (MB) 的資料,block blobs 是針對存取大型檔案工作流 (streaming workloads) 所設計的機制,能夠處理大型影音串流、影像、文件等各式二進制檔案之存取,block blob 對於大型檔案上傳特別做了最佳化的處理,例如: 開發人員可以透過 API 將大型檔案切割成多個資料區塊同時上傳,待全部資料區塊順利上傳完畢之後,再組合還原為該檔案,也就是說;倘若資料上傳過程中出現問題,僅需要重傳特定的資料區塊即可,而不需要重新上傳整個檔案。

下圖是一個典型的案例,倘若用戶打算上傳一個 10 GB 的大型檔案至 Windows Azure blob,可以將檔案切割成眾多 4 MB 大小的資料區塊,在程式碼中透過 PutBlock 方法將每個資料區塊獨立上傳到微軟的資料中心,開發人員甚至可以透過多執行緒 (thread) 的方式平行上傳這些資料區塊,以提升上傳大型檔案的效率,當全部資料區塊傳送完畢之後,程式碼可以運用 PutBlockList 組合資料區塊寫入 Windows Azure blob 之中。

clip_image002

上傳一個 10 GB 的檔案

Page Blob

page blobs 最大能夠儲存 1 terabyte 的二進制檔案,page blobs 是由眾多資料頁 (page)  所組成的陣列 (array),每個資料頁最大可容納 512 bytes 之資料。Page blobs 是針對隨機存取 (random access) 所設計的儲存機制。寫入資料的動作例如呼叫 PutPage 方法必須搭配一個特定的資料頁,這意味著所有資料的寫入都是以 512 bytes 倍數為單位的一個偏移量 (offsets),相對地當我們要進行資料讀取動作例如呼叫 GetPage 方法時,您可以透過偏移量讀取任一合理資料範圍 (range) 內的二進制資料,讀取資料範圍到不一定要是 512 bytes 為單位。Page BLOB 則是以空間長度設定的二進位資料,由於 page blob 讀寫的單位是透過資料範圍 (range) 來設定,就像一般的二進位檔案讀寫,作業系統不會去管理資料寫入的正確性,因此 Page BLOB 的寫入不會有認可 (commit) 的問題,一旦資料寫入 Page BLOB 區時就會自動被認可。Page BLOB 非常適合用來處理即時性讀寫的資料,Windows Azure Drive 就要求 BLOB 空間必須要是 Page BLOB 。下圖展現出 page blob 存取的概念,目前 Windows Azure Storage drive 與 Windows Azure Virtual Machines 內的檔案系統都是實作在 Paga Blob 之上。

clip_image003

基本讀取與寫入的動作

Blobs 開發相關資料與範例 (英文)

Microsoft .NET 相關範例 http://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/

Java 相關範例 http://www.windowsazure.com/en-us/develop/java/how-to-guides/blob-storage/

PHP 相關範例 http://www.windowsazure.com/en-us/develop/php/how-to-guides/blob-service/

Python 相關範例 http://www.windowsazure.com/en-us/develop/python/how-to-guides/blob-service/

Node.js 相關範例 http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/blob-storage/

Blobs 開發相關小工具

用戶可以運用免費視窗小工具 Windows Azure Storage Explorer 建立與管理 Windows Azure Storage Blobs 容器 (Container)

http://azurestorageexplorer.codeplex.com/

網路上也有許多免費工具可以協助 Block Blobs 的檔案上傳與下載,方便您測試與熟悉環境,例如:

http://clumsyleaf.com/products/cloudxplorer