2014年2月6日星期四

Windows Azure

Windows Azure[编辑]

维基百科,自由的百科全书
Microsoft Windows Azure
Microsoft Windows系列的一部分
WindowsAzureLogo.png
开发人员
Microsoft
网站Windows Azure官方网站
发布
初始版本2010-02-01 (1.1) [信息]
稳定的发行版2012 Spring Release (2012-06-07) [信息]
源模型专有软件
许可证EULA+ SLA
支持状态
商业运转 (General Availability)
Windows Azure是由微软所发展的一套云计算操作系统,用来提供云在线服务所需要的操作系
统与基础存储与管理的平台,是微软的云计算的核心组成组件之一,以及微软在线服务策略
的一部份。Windows Azure Platform一开始提供的是平台即服务(PaaS),在 2012 
Spring Release 时,正式开放了基础建设即服务 (IaaS) 的相关解决方案。为微软为云服务的
品牌,好处是企业不需要有实体的服务器就可以创建自己的系统服务。


概观[编辑]

Windows Azure(以及Azure服务平台)由微软首席软件架构师雷·奥兹(Ray Ozzie)在
2008年10月27日于2008年在微软年度的专业开发人员大会中发表,并于在2010年2月正式开始商
业运转(General Availability)[1]。微软为因应Windows Azure的营运需求,开始在全球主
要地点建数据中心,目前已正式营运的九个数据中心分别在:芝加哥圣安东尼奥德克萨
都柏林阿姆斯特丹新加坡香港北京上海[2]
2012年4月5日,微软宣布在美国增加 West 与 East 两座数据中心。[3]
2012 Spring Release 后,目前已有90个国家可以使用Windows Azure Platform服务[4]
2013年5月22日,上海-微软公司宣布由世纪互联运营的微软 Windows Azure 公有云平台及服务
式在中国落地,公众预览(www.windowsazure.cn)于6月6日正式上线。微软是首个将公有云
服务落地到中国的跨国公司。[5]
Windows Azure 是 Microsoft 为公有云提供的应用程序平台。您可以多种不同方式使用此平台。
例如,可以使用 Windows Azure 构建一个在 Microsoft 数据中心运行并存储其数据的 Web 应用
程序。或者只使用 Windows Azure 存储数据,而使用此数据的应用程序则在本地(即公有云之外)
运行。可以使用 Windows Azure 创建虚拟机以用于开发和测试,或运行 SharePoint 和其他应用
程序。可以使用 Windows Azure 构建拥有海量用户的高度可缩放应用程序。因为此平台提供了种
类广泛的服务,所以所有这些想法都有可能实现。

由中国世纪互联运营的Windows Azure平台[编辑]

在中国,Windows Azure 由世纪互联运营。世纪互联是中国最大的电信运营商中立互联网数据中心
服务提供商,微软将技术授权给世纪互联。世纪互联通过这些技术,结合自身运营经验,为中国用户
提供 Windows Azure 服务。微软在包括平台支持、技术支持在内的多个领域协助世纪互联。
Windows Azure 在中国运行于北部和东部两个主要城市的数据中心,将帮助客户解决异地灾备问题。
数据中心将有多家主流运营商接入,以此提高网络服务性能。[6]

架构[编辑]

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来管理在数据中心中所有服务器的能力。
Windows Azure环境除了各式不同的虚拟机外,它也为应用程序打造了分散式的巨量存储环境
(Distributed Mass Storage),也就是Windows Azure Storage Services,应用程序可以根据
不同的存储需求来选择要使用哪一种或哪几种存储的方式,以保存应用程序的数据,而微软也尽可能
的提供应用程序的兼容性工具或接口,以降低应用程序移转到Windows Azure上的负担。
Windows Azure不但是开发给外部的云应用程序使用的,它也作为微软许多云服务的基础平台,
Windows Azure SQL Database或是Dynamic CRM Online这类的在线服务。

Fabric Controller[编辑]


Windows Azure计算资源与管理框架
Fabric Controller是管理微软数据中心的Windows Azure计算资源的中控管理系统,它负责自动化
的管理数据中心内所有的实体服务器,包含由用户要求的Windows Azure Guest OS的部署工作,定
时的Hotfix修补,机器状态回报,以及管理不同版本的VM部署图像的复制等重要核心工作,Fabric
 Controller本身也具有高可用性,并且有一个管理Fabric Controller的子系统(称为"Utility"
 Fabric Controller)来管理与监控Fabric Controller的运作。
Fabric Controller也处理虚拟机的健康管理(Health Management)工作,当Windows Azure
 Guest OS发生死机时,会由Fabric Controller自动选择不同的实体机器重新部署与启动。当应用
程序提交即地更新(In-place upgrade)时,Fabric Controller也负责即地更新的协调工作,以
保持应用程序在更新时仍可保持SLA所承诺的服务水平。

Windows Azure Host OS[编辑]

在Fabric Controller之上与Windows Azure Guest OS之间,是由Fabric Controller在建置实体
服务器时所部署的Windows Azure Host OS,它是一个特制版本的Hyper-V Server,负责实体服务
器内的Hypervisor虚拟平台层,总管其上的Windows Azure Guest OS群,同时它内含一个Fabric
 Agent中控软件,以回报目前虚拟机的各项信息给Fabric Controller,同时让应用程序可以利用
事件处理的方式来判断与针对目前Fabric Agent控制虚拟机的状态做回应与控制。而依照不同的虚
拟机的等级,其运行的Windows Server 2008操作系统也不一样。

网络基础架构与应用程序部署模型[编辑]


Windows Azure网络与计算资源部署架构
Windows Azure本身的设计是负责处理大量分散式计算的工作,并且符合云计算的特性,因此应用程
序在Windows Azure上可以自由设置一个或多个运行个体(Computes Instances),并且利用
Windows Azure平台的特性,应用程序可切割为处理用户界面服务的Web应用程序,以及专门处理背
景计算或数据处理工作的服务应用程序(Service Application),后端则可以用Windows Azure
Storages或是SQL Azure数据库来存储数据。
为了处理单一应用程序多份运行个体的平衡负载,Windows Azure的Hypervisor层都有内置Windows
 Azure Load Balancer(LB),它会将连入应用程序的连接进行负载分配,以维持每个运行个体都
有足够且合理的负载量。而在Windows Azure内部网络的所有虚拟与实体机器,都由Fabric
Controller来自动配署IP位置与通信端口,在默认的情况下Fabric Controller对外只会开放Port
80与443 (for SSL),若应用程序需要特殊的连接端口时,要在应用程序本身的服务组态档中登录需
要的终端点(Endpoint),Fabric Controller会配置适当的IP终端点资源给应用程序。

虚拟机操作系统[编辑]

Windows Azure上所运行的虚拟机(Guest OS),被称为计算单元(Compute Unit),以最基础的
小型计算单元为基础,共分为五种类型,不同的类型有不同的硬件资源,操作系统与单价。以一个
小型计算资源来说,它拥有1.6GHz的CPU,1.75GB的存储器,以及225GB的硬盘空间,同时它的I/O
优先权为中级。而在它之上的有中型(Medium),大型(Large)与超大型(Extra Large)三种,
依2的倍数来强化虚拟机的可用资源[7]
VM大小CPURAM本地存储大小I/O优先权
Extra Small(XS)1 * 1.0GHz768MB20GB
Small1 * 1.6GHz1.75GB225GB
Medium2 * 1.6GHz3.5GB490GB
Large4 * 1.6GHz7GB1000GB
Extra Large(XL)8 * 1.6GHz14GB2040GB
目前在Windows Azure上,已经部署了数个版本的操作系统[8],部署在Windows Azure虚拟机上的
操作系统,被称为Windows Azure Guest OS,但其实是Windows Server 2008 x64企业版操作
系统的虚拟化版本。每个不同的版本都会安装不同的功能与补丁,而用户可以选择可兼容自己开发
的应用程序的操作系统版本。
版本操作系统平台版次
3.xWindows Server 20123.0-3.1
2.xWindows Server 2008 R22.9-2.13
1.xWindows Server 2008 (SP2)1.17-1.21

应用程序运行环境[编辑]

Windows Azure是以作为云计算的平台即服务环境所设计,在Windows Azure平台上提供了四种不同
的应用程序角色(application role)[9],分别代表不同的应用程序运行环境(Runtime
Environment)。

Web Role[编辑]

Web Role是已安装并设置好IIS 7.0运行环境的Windows Server 2008 x64操作系统,开发人员可利
用Web Role来挂载HTTP-based的应用程序,包括ASP.NETPHP(FastCGI),JSP或是HTTP-hosted
 WCF应用程序,它通常会被作为Web应用程序的用户服务端,Fabric Agent的启动程序会自动将应用
程序文件组态并挂载到IIS运行空间内。虽然Web Role默
认只开放HTTP Port 80/443,但开发人员仍可利用组态档设置要要求Fabric Controller指派更多
的通信端口。而通过IIS 7.0本身的特性,新版本的Web Role中可支持Full IIS模式,即开发人员
可通过服务组态档在同一个Web Role中设置多个网站或单一网站(Site)内多个虚拟目录
(Virtual Directory),更扩大了Web Role的应用弹性。
在 2012 Spring Release 中,Web Role 可支持 ASP.NET, ASP.NET MVC3, ASP.NET MVC4,
Silverlight RIA 等应用程序。

Worker Role[编辑]

Worker Role可模拟于本机Windows操作系统(NT核心)上的Windows Service应用程序,它是一个
无用户界面的应用程序角色,开发人员可以利用Worker Role来运行不需用户界面的大量计算工作,
或是利用Worker Role进行MapReduce型的分散式计算,以有效的利用云上的计算资源,Worker
Role也可作为处理高负载数据访问或运行商业逻辑的应用程序。
在 2012 Spring Release 中,Worker Role 新增了 Cache Worker Role (搭载本地高速缓存引
擎的 Worker Role) 以及 Worker Role with Service Bus Queue (处理 Service Bus Queue
专用的 Worker Role) 两种。

Windows Azure Virtual Machine[编辑]

Windows Azure Virtual Machine 服务[10]是 Windows Azure 正式开放基础建设服务的重要里程
碑,它的前身是 VM Role。
VM Role是在2010年10月28日于微软PDC 2010上宣布的新应用程序角色,VM Role是一个类似于IaaS
层次的服务,它和Web Role与Worker Role最大的不同是,VM Role允许由企业使用Hyper-V自行安
装与组态基本的操作系统与应用程序组件,并存储基础磁盘 (Base Disk Image)和差异磁盘图像
(Differential Disk Image),再上传到Windows Azure云环境,此时Fabric Controller会将
这个磁盘保存到以订阅账户为主的图像存储库(Subscription-based Image Repository)中,订
阅账户的用户就可以利用这个图像在Windows Azure中部署应用程序角色的虚拟机。这对企业在移转
应用程序到云的需求上提供了相当大弹性的支持。VM Role的计费模式与Web Role/Worker Role相
同,企业可选择在差异磁盘中安装Windows Server 2008 R2 (未来可支持到Windows Server 2003
与Windows Server 2008 SP2),其操作系统授权已包含于云环境的计算资源计费[11]
而 Virtual Machine 则更进一步的在数据中心内直接提供 VM 所需要的操作系统 VHDs,不需一定
要企业自行制作,而且 VHDs 也可以由用户在线上产生,而最后的存储地会是在用户的 BLOB storage
空间内。
Virtual Machine 服务不但可以支持 Windows Server,也同时支持 OpenSUSE 12.1, CentOS 6.2,
 Ubuntu 12.04, SUSE Enterprise Linux 11 SP2 等 Linux 操作系统[12]
不论是Web Role,Worker Role还是VM Role,都可以设置一个以上的运行个体(instance),每个
运行个体都是独立的虚拟机,Windows Azure Fabric Controller中的Load Balancer(平衡负载
器)会自动分配负载到不同的instance中。也因为如此,不论是运行在Web Role上的Web应用程序,
或是运行在Worker的服务应用程序,都要考虑可能的跨实体(cross instance)以及不同实体通信
(inter-role or inter-instance communication)的设计。

Windows Azure Website[编辑]

Website 是 Windows Azure 基于 Web Role 上开发的新服务,它允许开发人员在 Website 的
VM 内新增 MySQL 的数据库,而其内的 IIS 也安装有 PHP 运行环境和 .NET Framework,开发人
员除了可以通过 Visual Studio, GitHub, Team Foundation Services 或 WebMatrix 做网站
发布与编修外,亦可直接由 Gallery 选择像 WordPress, Drupal, Orchard CMS 等知名的大型开
放源代码应用程序直接部署 [13]

存储服务[编辑]

Windows Azure提供了三种不同格式的存储体服务(Storage Services),用来提供给Windows
Azure上运行的应用程序存储数据使用。依据不同的存储格式会有不同的限制,因为这些存储服务都
是以分散式巨量存储(Distributed Mass Storage)为核心概念所设计出来的,为了要达成快速在
分散式存储空间中存储与管理数据(还包含高可用度的赘余存储管理),微软有在数据的存储上做一
些限制。
不论是哪一种存储服务,Windows Azure都有显露REST API[14],并符合Simple Cloud的标准[15]

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提供的辅助组件所应用的技术是WCF Data Services,因此若对WCF 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;
}

异地备援[编辑]

自 v1.5 版起的 Windows Azure Storage Services,开始支持异地备援 (Geo-replication)
的功能[16],只要应用程序将数据传送到 TABLE 或 BLOB 存储,Windows Azure 会自动将数据
往邻近的数据中心传递,以备援存储服务,当主要的数据中心发生断线或是无法提供服务时,
Windows Azure 核心中的 DNS Service 会自动将要求导向到备援的数据中心继续提供服务。
  • 异地备援所产生的网络与存储成本由微软自行吸收,不另计费。
  • 异地备援的工作是异步且自动化,应用程序无需做任何修改。
  • 异地备援可以通过联系 Windows Azure 支持团队的方式停用。

网络与高速缓存服务[编辑]

Windows Azure平台对外通过了内容散布服务(Content Delivery Network)来进内联容大量高
速缓存与散布的能力,以让Windows Azure上的应用程序可以利用它来提供快速且大量内容的服
[17]。截至目前为止,Windows Azure在全球有22个实体散布机房[18],亚太地区包含了日本
、韩国、台湾、香港与新加坡等地均设有机房。
为了要让Windows Azure应用程序或是VM Role可以更方便的与本地端计算机连接,Windows
Azure提供了与虚拟专用网(VPN)相同能力的Windows Azure Connect服务[19],本地端可以利
用此服务,在Windows Azure应用程序所在的VM与本地端计算机之间,创建以IPSec为主的私人
网络环境,Windows Azure应用程序即可以计算机名称的方式直接与本地端计算机连接并访问数
据。
在 2012 Spring Release 中,Windows Azure 扩张了网络功能以支持 Virtual Machine 服务
,允许企业的 IT 人员自行设置网络节点,包含网段、路由表以及 DNS 等服务环境[20]

服务管理[编辑]

Windows Azure平台的管理可分为由微软提供的管理用户界面(Management Portal)以及可编
程化的服务管理接口(Service Management API)两个部份,而在PDC 2010中,微软又宣布了
远程桌面管理功能以及多管理员的设置。

管理用户界面[编辑]

Windows Azure管理入口 (Management Portal)

Windows Azure的管理网站 (https://windows.azure.com) 提供一个Web-based GUI管理接口,
供管理人员与开发人员可使用浏览器于在线管理Windows Azure的各式资源,包含Computes
Instances, Storage以及服务管理的部份,以及SQL Azure和Windows Azure ) AppFabric等
平台服务功能。
微软于2010年11月30日发表全新以Silverlight开发的管理接口,此管理接口以现有的服务管
理API开发,具有较丰富的交互性用户经验(UX)。
2011年8月,微软宣布管理接口正式提供11个国家的本地化接口,包含繁体中文与简体中文均
有支持[21]
2012 Spring Release 中,微软再次更新管理接口,以 HTML5 打造的新管理接口具有较快的
回应速度以及具亲和力的操作接口等[22]

服务管理接口[编辑]

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)即
可(最多可登录五个)。

远程桌面[编辑]

在2010年10月28日的PDC 2010中,微软宣布在应用程序角色中加入远程桌面连接(Remote
Desktop Connection)的管理能力,管理人员可以利用远程桌面的客户端程序连到在云中的虚
拟机,以实际调控应用程序的组态或设置档等。

多管理员模式[编辑]

多位服务管理员(Multiple Service Administrators)模式是PDC 2010宣布,并配合
Silverlight-based管理接口上线时开始提供,允许管理人员登录多个用户的Windows Live ID
以授权用户服务管理的权力。
现阶段Windows Azure并没有提供自动化的Scale-Out(向外扩张)机制,但在MSDN Code
Center中有提供针对服务自动化Scale-Out机制的示例程序让开发人员套用,以支持服务
Scale-Out的机能[23]

应用程序开发支持[编辑]

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模拟环境(Emulators),称为Compute Emulator (原称 Development Fabric) 以及
Storage Emulator (原称 Development Storage)。
  • Compute Emulator会模拟Windows Azure的VM环境以供开发人员在本机测试用,同时也可
     以让开发人员直接在本机上监看应用程序的诊断输出以及在状态变更时应用程序处理的行
     为等。
  • Storage Emulator会利用本机上的SQL Server数据库来模拟Windows Azure Storage的各
     项服务。而在 Windows Azure SDK v1.7 开始,Storage Emulator 会自动侦测并选用 
     LocalDB 或是现存的 SQL Express/SQL Server 运行个体[24]
Windows Azure 平台亦致力于针对非微软平台以及开放源代码阵营的支持,目前可在 Windows
 Azure 上使用的编程语言除 C# 与 VB 外,像 Java, PHP, Python, node.js 等均有平台,
而自 2012 年的 Spring Release 开始,微软也提供了在 Linux 与 Mac 上的 Windows Azure
应用程序命令行工具[25]

参考[编辑]

外部链接[编辑]