Windows Azure架構分析概述

   Windows Azure是由微軟所發展的一套雲計算操作系統,用來提供雲在線服務所需要的操作系統與基礎存儲與管理的平臺,是微軟的雲計算的內核組成組件之一,以及微軟在線服務策略的一部份。 

圖1 Windows Azure Logo

  一、概述

Windows Azure(以及Azure服務平臺)由微軟首席軟件架構師雷·奧茲在200810272008年在微軟年度的專業開發人員大會中發表,並於在20102月正式開始商業運轉 (General Availability) 。微軟爲因應 Windows Azure 的營運需求,開始在全球主要地點建設數據中心,目前已正式營運的七個數據中心分別在:美國的芝加哥、聖安東尼奧及德克薩斯、愛爾蘭的都柏林、荷蘭阿姆斯特丹;新加坡及中國的香港。

目前已有21個國家可以使用Windows Azure Platform服務,預計2010年七月可以擴張到40個國家

二、架構描述

Windows Azure 是專爲在微軟建設的數據中心管理所有服務器,網絡以及存儲資源所開發的一種特殊版本 Windows Server 操作系統,它具有針對數據中心架構的自我管理 (autonomous) 機能,可以自動監控劃分在數據中心數個不同的分區 (微軟將這些分區稱爲 Fault Domain) 的所有服務器與存儲資源,自動更新補丁,自動運行虛擬機部署與鏡像備份 (Snapshot Backup) 等能力,Windows Azure 被安裝在數據中心的所有服務器中,並且定時和中控軟件:Windows Azure Fabric Controller 進行溝通,接收指令以及回傳運行狀態數據等等,系統管理人員只要通過 Windows Azure Fabric Controller 就能夠掌握所有服務器的運行狀態,Fabric Controller 本身是融合了很多微軟系統管理技術的總成,包含對虛擬機的管理 (System Center Virtual Machine Manager),對作業環境的管理 (System Center Operation Manager),以及對軟件部署的管理 (System Center Configuration Manager) 等,在 Fabric Controller 中被髮揮得淋漓盡致,如此才能夠達成通過 Fabric Controller 來管理在數據中心中所有服務器的能力。

Fabric Controller 之上的,就是分佈在數據中心服務器內的虛擬機 (Virtual Machine),每臺虛擬機都安裝 Windows Server 2008 (同時會視版本更替而更新),並且內含一個 Fabric Agent 中控軟件,以回報目前虛擬機的各項信息給 Fabric Controller,同時讓應用程序可以利用事件處理的方式來判斷與針對目前 Fabric Agent 控制虛擬機的狀態做迴應與控制。而依照不同的虛擬機的等級,其運行的 Windows Server 2008 操作系統也不一樣。

Windows Azure 環境除了各式不同的虛擬機外,它也爲應用程序打造了分佈式的巨量存儲環境 (Distributed Mass Storage),也就是 Windows Azure Storage Services,應用程序可以根據不同的存儲需求來選擇要使用哪一種或哪幾種存儲的方式,以保存應用程序的數據,而微軟也儘可能的提供應用程序的兼容性工具或界面,以降低應用程序移轉到 Windows Azure 上的負擔。

Windows Azure 不但是開發給外部的雲應用程序使用的,它也作爲微軟許多雲服務的基礎平臺,像SQL Azure或是Dynamic CRM Online這類的在線服務。

圖2 Windows Azure 架構

三、虛擬機平臺與運行環境

Windows Azure 上所運行的虛擬機,被稱爲計算單元 (Compute Unit),以最基礎的小型計算單元爲基礎,共分爲四種類型,不同的類型有不同的硬件資源,操作系統與單價。以一個小型計算資源來說,它擁有 1.6GHz 的 CPU,1.75GB 的存儲器,以及 225GB 的硬盤空間,同時它的 I/O 優先權爲中級。而在它之上的有中型 (Medium),大型 (Large) 與超大型 (Extra Large) 三種,依 2 的倍數來強化虛擬機的可用資源。
目前在 Windows Azure 上,已經部署了四個版本的操作系統,分別是 1.0, 1.1, 1.2 與 1.3 版,在 Windows Azure 正式商轉時的版本是 1.1 版,而在 .NET Framework 4.0 RC 發佈時,Windows Azure 也曾部署一個內置 .NET Framework 4.0 RC 的版本,即爲 1.2 版。微軟在 Tech.Ed 2010 North America 宣佈 1.3 版,這個版本裝載了 .NET Framework 4.0 的 RTM 版本。部署在 Windows Azure 虛擬機上的操作系統,被稱爲 Windows Azure Guest OS,但其實是 Windows Server 2008 的虛擬化版本。
在 Windows Azure 上,目前可建置兩種虛擬機作業環境:
►        Web Role: 在虛擬機上運行 Web 應用程序,目前可以運行在它上面的有 ASP.NET,PHP,Ruby 等 Web Application Framework (非 ASP.NET 的應用程序是使用 FastCGI 模塊運行),基本上只要能夠順利掛載在本機 IIS 7.0 上的 Web 應用程序,都可以在 Web Role 中使用。
        Worker Role: 在虛擬機上以週期方式運行特定指令,可將它視爲 Windows Azure 上的 Windows Service 服務應用程序,它可以用來處理分散工作 (例如 Map-Reduce 型應用程序),或是掛載 WCF 服務。
不論是 Web 或是 Worker,都可以設置一個以上的運行個體 (instance),每個運行個體都是獨立的虛擬機,Windows Azure Fabric Controller 中的 Load Balancer (平衡負載器) 會自動分配負載到不同的 instance 中。也因爲如此,不論是運行在 Web Role 上的 Web 應用程序,或是運行在 Worker 的服務應用程序,都要考慮可能的跨物理 (cross instance) 以及不同物理通信 (inter-role or inter-instance communication) 的設計。
四、存儲
Windows Azure 提供了三種不同格式的存儲體服務,用來提供給 Windows Azure 上運行的應用程序存儲數據使用。依據不同的存儲格式會有不同的限制,因爲這些存儲服務都是以分佈式巨量存儲 (Distributed Mass Storage) 爲內核概念所設計出來的,爲了要達成快速在分佈式存儲空間中存儲與管理數據 (還包含高可用度的贅餘存儲管理),微軟有在數據的存儲上做一些限制。
不論是哪一種存儲服務,Windows Azure 都有顯露 REST API,並符合 Simple Cloud 的標準。
BLOB
BLOB (大型二進位對象) 數據是用來存儲像是文件,圖片,視頻檔,可運行檔,壓縮檔等二進位格式的文件,基本上它的存儲單位就是文件,爲了要讓 BLOB 的功能應用更寬廣,微軟也在 BLOB 服務上開發了內容傳遞網絡 (Content Delivery Network) 的服務,讓 BLOB 可以作爲大容量的文件或數據存儲與供應的地方,以支持類似 YouTube 這樣的大型 Web 應用程序的服務。
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 的訪問權限與有效期限等。
private void EnsureContainerExists()
{
    var container = GetContainer();
    container.CreateIfNotExist();
 
    var permissions = container.GetPermissions();
    permissions.PublicAccess = BlobContainerPublicAccessType.Container;
    container.SetPermissions(permissions);
}
 
private CloudBlobContainer GetContainer()
{
    var account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
    var client = account.CreateCloudBlobClient();
 
    return client.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("ContainerName"));
}
Table
Table (表) 是給具結構化數據的應用程序存儲與管理的一種存儲服務,它在 Windows Azure 存儲區中會以 Key-Value 鍵值對方式存儲,並且由 Partition 來切割在 Windows Azure 存儲區的存儲位置,它實際的數據是 XML,通過 REST API 調用時,會需要依據 SDK 上的說明,自行建置 XML 的要求與解析迴應的數據,但若是 .NET Framework 的開發人員,在 Windows Azure SDK 中提供的 Microsoft.WindowsAzure.StorageClient 命名空間就有提供輔助的 API 以及類,將這件事在 API 中處理掉了。SDK 提供的輔助組件所應用的技術是 ADO.NET Data Services,因此若對 ADO.NET Data Services 熟悉的開發人員,會很容易的上手 Table 存儲的開發。
namespace TableExample
{
    public class Contact : TableServiceEntity
    {
       public string Name { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
        public string Cellphone { get; set; }
 
        public Contact()
        {
            base.PartitionKey = "ContactTable";
            base.RowKey = Guid.NewGuid().ToString();
        }
    }
}
雖然 Table 可以存儲結構化的數據,但它並不是關係性數據庫,所以像是 join,彙總函數等都無法使用,要由開發人員另外處理。
Queue
Queue (隊列) 是一種先到先服務 (First-Come, First-Serve),或稱爲 FIFO (先入先出) 的存儲服務,它可以允許應用程序將消息存儲到隊列中排隊,然後由負責處理的應用程序 (通常是 Worker) 由隊列提取消息並處理以後,將消息由隊列中移除。消息可以是字符串或是最長8KB的二進位數據,隊列經常會作爲跨運行個體通信以及工作切割通知的消息傳遞之用。
protected void cmdAddQueue_Click(object sender, EventArgs e)
{
    CloudStorageAccount account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
    CloudQueueClient queueClient = account.CreateCloudQueueClient();
    CloudQueue queue = queueClient.GetQueueReference("theaterseatorders");
 
    queue.CreateIfNotExist();
 
    queue.AddMessage(new CloudQueueMessage("SEATNUM=1-1,[email protected]"));
    queue = null;
}
 
四、服務管理
Windows Azure 基於雲計算的特性以及開發工具的需要,在 Fabric Agent 上有顯露 REST API 供外部應用程序調用,以自動化運行服務管理 (Service Management) 的功能。服務管理的項目包含了部署 (deployment),更新 (upgrade),編輯組態 (configuration changes) 以及環境切換 (virtual IP swap) 等功能,這些功能除了可以在 Windows Azure 在線管理工具外,Visual Studio Tools for Windows Azure 1.2 版也開始支持在開發工具中直接運行服務管理的能力,只要在 Windows Azure 在線管理工具中登錄管理憑證 (management certification) 即可 (最多可登錄五個)。
現階段 Windows Azure 並沒有提供自動化的 Scale-Out (向外擴張) 機制,但在 MSDN Code Center 中有提供針對服務自動化 Scale-Out 機制的示例程序讓開發人員套用,以支持服務 Scale-Out 的機能。
五、應用開發支持
Windows Azure 在每個不同版本間都有發表 SDK 包以供開發人員開發可運行在 Windows Azure 運行的雲應用程序 (Cloud Application),而微軟重量級開發工具 Visual Studio 也通過外掛的 Visual Studio Tools for Windows Azure 讓開發人員能利用 Visual Studio 的 Cloud Project 來自動化管理雲應用程序部署所需要的 Service Definition 以及 Service Configuration 設置檔,並可加入新專案或現有專案爲雲應用程序角色 (Web Role or Worker Role) 之一,並進一步設置存儲連接設置,計算資源大小以及內部連接信息等等。
Windows Azure SDK 除了文件、工具和必要的支持函數庫以外,還包含了在本機使用的 Windows Azure 模擬環境 (Emulations),稱爲Development Fabric以及Development Storage。
Development Fabric 會模擬 Windows Azure 的 VM 環境以供開發人員在本機測試用,同時也可以讓開發人員直接在本機上監看應用程序的診斷輸出以及在狀態變更時應用程序處理的行爲等。
Development Storage 會利用本機上的 SQL Server 數據庫來模擬 Windows Azure Storage 的各項服務。

針對非微軟平臺,微軟通過像 Interoperability Bridge 提供針對 PHP, Ruby, Java, Perl 等非微軟平臺工具,以及 Eclipse IDE 的擴充能力,以支持 Windows Azure 開發的功能。

 

 

 

Windows Azure Platform 現階段提供的是平臺即服務 (PaaS),但未來可能會開放基礎建設即服務 (IaaS) 的服務項目。

圖1 Windows Azure LOGO

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章