2013年12月22日 星期日

What's Windows Azure Part 1 儲存方式 - Blob、Tables、Queues

Window Azure這東西,其實有非常多且新的專有名詞,對於很多傳統開發者而言,雲端是一個個如同「神龍見首不見尾一般」的一團迷霧。尤其是許多的概念技術,在傳統的開發模式中,它抽離了許多開發者必需要去注意、維護、升級、資料轉移等繁鎖的事項,「雲端系統」把這些工作,全都交由專職於這類技術產業的公司去負責。筆者花了時間從微軟官方和網路上各高手的資訊分享上,匯整了資訊,依內容切割介紹,本篇就來介紹一些需端的東西,基本的專有名詞,和三種儲存方式。

Windows Azure 平台是一種「平台即是服務 Platform as a Servive」(PaaS) 產品,它具有針對資料中心架構的自我管理(autonomous)機能,可以自動監控劃分在資料中心數個不同的分區(微軟將這些分區稱為Fault Domain)的所有伺服器與儲存資源,自動更新修補程式,自動執行虛擬機器部署與鏡像備份(Snapshot Backup)等能力。這提供組織一種平台來執行 Windows 應用程式並將資料儲存至雲端。這些應用程式可以是組織目前已經過轉換後的既有應用程式,或者是為了要在 Windows Azure 上執行而專門設計的全新應用程式。開發者可以使用熟悉的工具,利用 Windows Azure 雲端服務快速部署及管理功能強大的應用程式和服務。直接上傳應用程式,Windows Azure 就會部署詳細資料 - 從佈建和負載平衡,到持續可用性的健康狀況監視。開發者只要專心在應用程式,不需擔心基礎結構,Windows Azure不但是開發給外部的雲端應用程式使用的,它也作為微軟許多雲端服務的基礎平台,像Windows Azure SQL Database或是Dynamic CRM Online這類的線上服務。

Windows Azure 提供各種的服務:Windows Azure、SQL Azure 以及 Windows Azure 平台 AppFabric。這些的組成等於是作業系統、資料庫以及「通訊與安全」服務。

Windows Azure 提供三個核心元件,分別是運算 (Compute)、儲存庫 (Storage) 以及結構 (Fabric)。「運算」實際上就是 Windows 作業系統,這是一種執行個體(instance)。這些執行個體包含應用程式的複本。執行個體有兩種,一種是 Web 角色,另一種是 Worker 角色。Web 角色會使用 IIS 來接受以及處理 HTTP 要求,Worker 角色執行個體與 Web 角色執行個體非常相似。差別在於 Worker 角色並未由 IIS 預先設定為在每個執行個體中執行。Web 角色和 Worker 角色可以透過 WCF 的技術,或者 Windows Azure Storage 查詢,就可以彼此溝通。但Web 角色和 Worker 角色都需要儲存資料。Windows Azure 提供三種儲存選項,分別是 Blob、表格(Tables)以及佇列(Queues)。Blob 使用最簡便,它們可以非常大,最多可高達 1 TB,而且可以分割成數個區塊。要想使用 Blob,另一種方法就是透過 Windows Azure Drives – Web 角色執行個體或 Worker 角色執行個體掛載。Windows Azure Drives 相關的儲存庫就是 Blob。磁碟機掛載之後,這個執行個體可以讀取或寫入資料,這樣便可以永久儲存到 Blob 中。

Blob 只適用於某些類型的資料,大部分時它們的結構很鬆散。為了讓應用程式可以用更精細的方式來處理資料,Windows Azure 儲存庫提供表格儲存。但這些稱為「表格」,並不是關聯式表格,它們包含的實際上是儲存在一組附帶各種屬性的個體中。表格沒有定義的結構描述;反而,屬性可以有不同的類型,例如 int、string、 Bool 或 DateTime。而且除使用 SQL 外,應用程式可以使用 ADO.NET 資料服務或 LINQ 來存取資料。單張表格可以十分巨大,裡面有百億個個體在保存數以 TB 的資料,並且在需要時,Windows Azure 儲存庫可以將它切割至多個伺服器,用來提高效能。

BLOB依照性質分為兩種:
  • Block BLOB(區塊型BLOB儲存體),這類的儲存以4MB為一個區塊單位,單一檔案最大可以儲存200GB,且區塊不會連續儲存,可能會打散到不同的儲存伺服器中存放,當應用程式要求時,會依照檔案的Key以及區塊由儲存區提取資料。另外,區塊在儲存時會經過一道認可程式,以讓應用程式決定是否要重新傳送。
  • Page BLOB(分頁型BLOB儲存體),它會在儲存區中劃分一個連續的區域供應用程式存放資料,它本身可以視為一個大型的VHD(虛擬機器磁碟),在Page BLOB的資料寫入會直接認可。而基於Page BLOB的特性,微軟特別在Page BLOB上提供了一組將Page BLOB虛擬成磁碟的功能,稱為Windows Azure Drive(研發代號為XDrive),它能夠支援NTFS API,也就是說應用程式可以利用現有的檔案管理API(包含System.IO的型別)來存取Windows Azure Drive中的資料夾與檔案資料,並且這些資料會保存在Windows Azure資料中心內。
Blob服務由Blob本身以及其收納容器(Container)構成,容器可視為一般本機上的資料夾。而容器和BLOB都支援額外的Metadata設定,這些Metadata會附掛在HTTP Header中傳輸給用戶端,每一個Metadata的大小限制為8KB。Blob也支援權限管理的功能,透過Shared Access Signature可設定Blob或Container的存取權限與有效期限等。

Windows Azure 儲存庫中的第三個選項是佇列,佇列的用途主要是提供一種方法給 Web 角色執行個體來與 Worker 角色執行個體進行溝通。例如,使用者可以提交一項要求,透過 Windows Azure Web 角色運行的網頁來執行某些需要大量運算的工作。收到這項要求的 Web 角色執行個體可以將一則訊息寫入佇列中,用於描述要完成的工作。然後,等候這個佇列的 Worker 角色執行個體可以讀取訊息並執行指定的工作。任何結果都可以透過另一個佇列傳回或者用另一種方法加以處理。好比是開發一個訊息傳送的功能,透過佇列功能,將每個要傳送的訊息寫入佇列,然後再指定要處理的時間。

Table(表格)是給具結構化資料的應用程式儲存與管理的一種儲存服務,它在Windows Azure儲存區中會以Key-Value鍵值對方式儲存,並且由Partition來切割在Windows Azure儲存區的儲存位置,它實際的資料是XML,透過REST API呼叫時,會需要依據SDK上的說明,自行建置XML的要求與解析回應的資料,但若是.NET Framework,在Windows Azure SDK中提供的Microsoft.WindowsAzure.StorageClient命名空間就有提供輔助的API以及型別,將這件事在API中處理掉了。SDK提供的輔助組件所應用的技術是WCF Data Services。

Queue(佇列)是一種先到先服務(First-Come, First-Serve),或稱為FIFO(先入先出)的儲存服務,它可以允許應用程式將訊息儲存到佇列中排隊,然後由負責處理的應用程式(通常是Worker)由佇列提取訊息並處理以後,將訊息由佇列中移除。訊息可以是字串或是最長8KB的二進位資料,佇列經常會作為跨執行個體通訊以及工作切割通知的訊息傳遞之用。

-雲遊山水為知已逍遙一生而忘齡- 電腦神手

沒有留言:

張貼留言