`
jgsj
  • 浏览: 960311 次
文章分类
社区版块
存档分类
最新评论

浅谈Windos Azure架构与存储

 
阅读更多

转载请注明出处:http://blog.csdn.net/zbf8441372

写在前面:

WindowsAzure是微软发展出来的一套云操作系统,用来提供云联机服务所需要的操作系统与基础存储与管理的平台。我关注Azure这个平台,主要是想了解他的架构,以及他的云计算存储技术。我觉得一个好的操作系统,就是一个好的架构。WindowsAzurePlatform现阶段提供的是PaaS(平台即服务),但未来可能会开放基础设施即服务IaaS)的服务项目。

接下来,我主要分析他的架构以及存储。


云计算与Azure:

给个我认为概括地比较好的云计算的定义:云计算是一种标准化的IT能力,将软件、应用平台、基础设施整合建立起一个系统,通过Internet技术以按需和自助的方式提供服务。下面我们会看到,Azure的框架中也整合了软件、应用平台、基础设施三块内容。而这三块内容正好对应SaaS,PaaS,IaaSAzure云操作系统看似的确涵盖了云计算的理念。

云计算是网格计算(GridComputing)、分布式计算(DistributedComputing)、并行计算(ParallelComputing)、效用计算(UtilityComputing)、网络存储(NetworkStorageTechnologies)、虚拟化(Virtualization)、负载均衡(LoadBalance)等计算机技术和网络技术相融合的产物。它将所有的计算资源集中起来,并由软件实现自动管理,无需人为参与。显然,因为分布式的关系,集群的管理需要负载均衡,海量的数据处理也将用到MapReduce这样的编程模式。

微软的张亚勤曾经给出过一个云计算公式:云计算=(数据软件+平台+基础设施服务。此公式表明了云最重要的是服务,基于云计算服务的三种模式,微软云计算采用了软件+服务+的策略。WindowsAzurePlatform正是这一策略的具体实现:一方面提供了可靠的软件平台;另一方面通过提供服务或者开放的系统运营企业服务。

接下来,我们就来看看WindowsAzure是个怎样的云操作系统。


概观:

WindowsAzure(以及Azure服务平台)由微软首席软件架构师·奥兹200810272008年在微软年度的专业开发人员大会中发表,并于在20102月正式开始商业运转(GeneralAvailability)。微软为因应WindowsAzure的营运需求,开始在全球主要地点建设数据中心,目前已正式营运的七个数据中心分别在:美国芝加哥圣安东尼奥得克萨斯爱尔兰都柏林荷兰阿姆斯特丹新加坡中国香港。目前已有41个国家可以使用WindowsAzurePlatform服务。

WindowsAzure是一个开放的平台,支持微软和非微软的语言和环境。开发人员在构建WindowsAzure应用程序和服务时,不仅可以使用熟悉的MicrosoftVisualStudioEclipse等开发工具,同时WindowsAzure还支持各种流行的标准与协议,包括SOAPRESTXMLHTTPS等。

下图是微软云计算的构画:


从图中可以看到,可以玩的概念貌似都玩上了,从SaaS,PaaSIaaSAzure作为一个云计算操作系统,提供AzurePlatform,实现的是平台即服务。左侧,看到最终的一个大目标叫ITasaService微软其实通过Azure这个平台,也在不断整合自己的力量。平台既可以作为SaaS等云服务的应用模式的基础,也可以与微软线下的系列软件产品相互整合和支撑。比如VisualStudio2010WindowsAzure提供了专门的项目模型,哈哈。



微软云计算的三驾马车

我们说Google公司有“三驾马车”:BigData,GFS以及MapReduceWindowsAzurePlatform同样有三驾马车WindowsAzureSQLAzureWindowsAzureAppFabricWindowsAzure可看成是云计算服务的操作系统;SQLAzure可看成云端的关系型数据库,接下去我们会在各种架构图中看到SQLAzure并对他做简单的介绍AppFabric则是一个基于Web的开放服务,可以把现有应用和服务与云平台的连接和互操作变得更为简单。


WindowsAzurePlatform的组成

WindowsAzure是一个云服务的操作系统,它提供了一个可扩展的开发、托管服务和服务管理环境。SQLAzure是以SQLServer2008为主,构建在WindowsAzure之上,运行云计算的关系数据库服务,是一种云存储的实现,并提供网络型的应用程序数据存储服务,简单地说就是SQLServer的云端版本。AppFabric作为中间件层,起到连接非云端程序与云端程序的桥梁功能。我觉得一个好的中间件就是要让开发人员可以把精力放在他们的应用逻辑上而不是在部署和管理云服务的基础架构上,不用去担心服务的部署和管理问题,你只要把你的东西丢给我,我中间件就给你动态部署,你需要了解的就是我给的接口信息。


架构:

说到云操作,一定离不开分布式的平台管理和运行机制。


service流程简图

我们用户在彼端,我们要使用的app在云端。Azureplatform接受我们的请求,包括传统的SOAP,现代一些的REST接口等等,然后在云端平台上接受并处理,用户只管租用这个平台来使用云端的服务,不需在本地下载这些services或者应用软件。


Azure内的监控师

“监控师”这个名字是我在看了Azure大大小小的框架结构后起的,这位监控师就是FabricController。

WindowsAzure被安装在数据中心的所有服务器中,并且通过定时和中控软件:WindowsAzureFabricController进行沟通,接收指令以及回传运行状态数据等等,系统管理人员只要通过WindowsAzureFabricController就能够掌握所有服务器的运行状态。从这里看FabricController这个系统在Azure的架构中起到了实时监控的作用。

WindowsAzure环境除了各式不同的虚拟机外,它也为应用程序打造了分散式的巨量存储环境(DistributedMassStorage),也就是WindowsAzureStorageServices,应用程序可以根据不同的存储需求来选择要使用哪一种或哪几种存储的方式,以保存应用程序的数据,而微软也尽可能的提供应用程序的兼容性工具或接口,以降低应用程序移转到WindowsAzure上的负担。存储的部分也是一块很重要的内容,在这里不细说了,在后面我会给出一点引子,提供一些资料供大家自己学习。

WindowsAzure不但是开发给外部的云应用程序使用的,它也作为微软许多云服务的基础平台,像SQLAzure或是DynamicCRMOnline这类的联机服务。


FabricController

FabricController是管理微软数据中心的WindowsAzure计算资源的中控管理系统,它负责自动化的管理数据中心内所有的实体服务器,包含由用户要求的WindowsAzureGuestOS的部署工作,定时的Hotfix修补,机器状态回报,以及管理不同版本的VM部署图像的复制等重要核心工作。我理解,GuestOS应该是用来接受和响应用户请求的ManagersHost是他们的Master。WindowsAzureHostOS,它是一个特制版本的Hyper-VServer,负责实体服务器内的Hypervisor虚拟平台层,总管其上的WindowsAzureGuestOS群,同时它内含一个FabricAgent中控软件,以回报目前虚拟机的各项信息给FabricController

FabricController本身也具有高可用性,并且有一个管理FabricController的子系统(称为"Utility"FabricController)来管理与监控FabricController的运作。

FabricController也处理虚拟机的HealthManagement工作,当WindowsAzureGuestOS发生当机时,会由FabricController自动选择不同的实体机器重新部署与启动。当应用程序提交即地更新(In-placeupgrade)时,FabricController也负责即地更新的协调工作,以保持应用程序在更新时仍可保持SLA(服务等级协议)所承诺的服务水平。


WindowsAzure计算资源与管理框架

总的来说,FabricController是管理存储数据的服务器的中控管理系统,其内部也有一个"Utility"FabricController的子系统监控他自己,他自己也相当于是一个集群,有Master,有Manager,应该还有分布式协调器之类的东西来实现集群中的负载均衡等问题。


网络基础架构与应用程序部署模型

WindowsAzure本身的设计是负责处理大量分散式计算的工作,并且符合云计算的特性,因此应用程序在WindowsAzure上可以自由设置一个或多个运行个体(ComputesInstances),并且利用WindowsAzure平台的特性,应用程序可切割为处理用户界面服务的Web应用程序,以及专门处理背景计算或数据处理工作的服务应用程序(ServiceApplication),后端则可以用WindowsAzureStorages或是SQLAzure数据库来存储数据。这就相当于前台和后台的关系。


SQLAzureAzureServicesPlatform这个平台之上的微软自己的东西。在Azure这个平台之上,微软也推出了新的Live或者Online的云端客户端,本地是不需要安装的。只要你付钱租用Azure这个云操作系统,你就可以用这些服务。这也符合PaaS的思想。


简单介绍一下SQLAzure

SQLAzure是一个云的关系型数据库,它可以在任何时间提供客户数据应用。它基于SQLServer技术构建,但并非简单地将SQLServer安装在微软的数据中心,而是采用了更先进的架构设计,由微软基于云进行托管,提供的是可扩展、多租户、高可用的数据库服务。这里又谈到了一个新的概念,多租户。其实在谈及分布式框架的时候,如果设计到了云计算,那么SaaS,多租户这样的概念往往是和云计算捆绑出现的。

他其实在平台层实例了多个SQLServer数据库引擎,他们各有一套不被其他实例共享的系统和用户数据库,可以独立同时运行。他的底层框架是SQLServerFabric,也是一个分布式框架,能实现负载均衡,备份恢复,数据容灾等功能。如下分别是客户端层,服务层,平台层,基础设施层。


再回到网络架构。为了处理单一应用程序多份运行个体的平衡负载,WindowsAzureHypervisor层都有自带WindowsAzureLoadBalancerLB,它会将连入应用程序的连接进行负载分配,以维持每个运行个体都有足够且合理的负载量。他相当于是一个分布式协调器,同样做这样的事的还是hadoopzookeeper


WindowsAzure网络与计算资源部署架构


WindowsAzure提供了一个叫做“Role”的概念,每个Role可以被认为是一段程序,与普通的应用程序不同的是这段程序可以同时在一台或者多台机器上运行。每个Role可以有多个实例(Instance),每个实例就对应一台虚拟机。对同一个Role而言,它所有的实例执行的程序都是相同的。现在有两种类型的RoleWorkerRole(工作者角色)WebRole(Web角色)WebRole:是一个Web应用程序,它可以通过HTTPHTTPS与外界通信,一般来说,Web角色响应请求,执行一个动作,然后等待下一个请求的到来。WorkerRole:是一种后台执行(RunningOnBackground)的应用程序,运行.Net框架代码的后台进程应用程序。


前台发来的请求,经过LB处理,然后分送给后台,后台WebRoleWorkerRole是两套不同的处理环境。WebRole相当于是个Web应用程序的用户服务端,接受并处理ASP.NETPHPJSP之类的请求。WorkerRole是不带用户界面的处理大量计算工作的应用程序。它可以进行MapReduce型的分布式计算,也可作为处理高负载数据访问或运行商业逻辑的应用程序。MapReduce是一个编程模型,也可以说是个分布式数据处理模型和执行环境。它的计算密集型的数据分析能力很强,本身分为MapReduce两部分,他会尽量在计算节点上存储数据,以实现数据的本地快速访问,而这种datalocality是他的核心特征。此外,MapReduce自己采用的是shared-nothing框架,所以他能实现失败检测,这意味着各个任务之间彼此独立,所以程序是并行的(这里可能讲的简单了一些)。


以上主要分析了Azure平台的两桃框架,以及简单介绍了下SQLAzure的框架,以及两种分布式协调器,Fabriccontrollerzookeeper,也谈到了MapReduce的计算模型。接下来谈一下他的存储。



存储服务(StorageServices



这是最近的一篇SOSP上的关于Azurepaper,标题是WindowsAzureStorage:AHighlyAvailableCloudStorageServicewithStrongConsistency,讲的是它云存储的数据一致性。

WASWindowsAzureStorage)目前用的是三种存储形式:Blobfiles),Table(structuredstorage)以及Queuemessagedelivery)。就简单说一下这三种存储形式的实现情况。


BLOB用来存储像是文件,图片,视频档,可执行文件,压缩档等二进制格式的文件,基本上它的存储单位就是文件,为了要让BLOB的功能应用更宽广,微软也在BLOB服务上开发了内容传递网络ContentDeliveryNetwork)的服务,让BLOB可以作为大容量的文件或数据存储与供应的地方,以支持类似YouTube这样的大型Web应用程序的服务。

Table:是给具结构化数据的应用程序存储与管理的一种存储服务,它在WindowsAzure存储区中会以Key-Value键值对方式存储,并且由Partition来切割在WindowsAzure存储区的存储位置,它实际的数据是XML,通过RESTAPI调用时,会需要依据SDK上的说明,自行建置XML的要求与解析回应的数据

Queue:是一种FIFO(先入先出)的存储服务,它可以允许应用程序将消息存储到队列中排队,然后由负责处理的应用程序(通常是Worker)由队列提取消息并处理以后,将消息由队列中移除。


存储具体可以见SOSPWindowsAzureStorage:AHighlyAvailableCloudStorageServicewithStrongConsistency这篇paper。等我读懂了paper里内容的时候可能再编辑上来。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics