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=test@test.com"));
    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