本文重点聚焦在云计算的IaaS层面(基础设施即服务)及配套组件。由于内容太多,对云计算的其它领域可能会提及但不会过多介绍,例如PaaS、SaaS和LBaaS等等。
云计算结构图怎么看
公有云整体架构涉及的组件非常繁多,本文尽量将这些组件都介绍清楚。同时,本文介绍的过程中会介绍实现该功能对应的开源项目,这样完成阅读之后基本上就可以利用开源项目搭建起一套云计算环境。如图是整个云计算的架构图,从途中可以看出云计算IaaS层架构除了计算、网络和存储3大件外,还需要很多辅助组件,例如身份与认证鉴权、订单管理、监控管理和日志管理等。
图1 云计算整体架构
当然,云计算的核心还是计算、网络和存储。云计算环境与传统数据中心的差异点在于资源的池化,也就是将上述资源形成一个大的资源池,然后按需分配,粒度可变,从而最大限度的提高资源的整体利用效率。
计算,计算服务组件主要实现对计算资源的协同管理,包括计算资源的虚拟化、资源分配和资源调度。在云计算中计算资源不仅仅包括虚拟计算资源,还包括裸机计算资源。
云计算的主要技术架构
网络,网络服务组件主要实现对网络资源的协同管理,包括软件定义网络、资源分配和组网等。云计算环境中的网络组件与传统意义上的网络组件有着本质的区别,传统IT网络设备通常是实实在在的物理硬件,而云计算环境的网络则是基于普通物理服务上的软件虚拟出来的虚拟设备,例如交换机,在云计算环境下就是基于OpenvSwitch或者其它软件实现的虚拟交换机。
存储,存储服务组件主要实现存储资源的协同管理,包括存储资源虚拟化、资源分配和容灾等。云计算环境中的存储与传统存储也有比较明显的差异。传统存储的使用往往具有硬件专有性的特点,存储硬件通常是定制的存储设备,而云计算领域的存储网络通常是采用普通物理服务器构建集群,提供分布式的软件定义存储。特点是可以构建大的存储资源池,存储池通常多租户公有,进而降低成本,提高存储资源利用率。
云计算的架构
云计算涉及了很多产品与技术,表面上看起来的确有点纷繁复杂,但是云计算本身还是有迹可循和有理可依的,下面介绍一套云计算的架构,具体请看图
上面这个云架构共分为服务和管理这两大部分。
在服务方面,主要以提供用户基于云的各种服务为主,共包含三个层次:其一是Software as a Service软件即服务,简称SaaS,这层的作用是将应用主要以基于Web的方式提供给客户;其二是Platform as a Service平台即服务,简称PaaS,这层的作用是将一个应用的开发和部署平台作为服务提供给用户;其三是Infrastructure as a Service基础架构即服务,简称IaaS,这层的作用是将各种底层的计算(比如虚拟机)和存储等资源作为服务提供给用户。从用户角度而言,这三层服务,它们之间关系是独立的,因为它们提供的服务是完全不同的,而且面对的用户也不尽相同。但从技术角度而言,云服务这三层之间的关系并不是独立的,而是有一定依赖关系的,比如一个SaaS层的产品和服务不仅需要使用到SaaS层本身的技术,而且还依赖PaaS层所提供的开发和部署平台或者直接部署于IaaS层所提供的计算资源上,还有,PaaS层的产品和服务也很有可能构建于IaaS层服务之上。
在管理方面,主要以云的管理层为主,它的功能是确保整个云计算中心能够安全和稳定的运行,并且能够被有效地管理,主要包括用户管理、监控系统、计费管理、安全管理、服务管理、资源管理、容灾支持、运维管理、客户支持几个方面。
下面主要对Saas、PaaS、IaaS几个方面做介绍
1、软件即服务SaaS
软件即服务(SaaS)为商用软件提供基于网络的访问。您有可能已经使用过SaaS,即使您当时并不知道。SaaS的示例太多了,例如Netflix、Photoshop.com、Acrobat.com、Intuit QuickBooks Online、Gmail、Google Docs、Office Web Apps、Zoho、WebQQ、新浪微盘等等。可能不太明显的SaaS实现包括移动应用程序市场中的相当一部分。
SaaS为企业提供一种降低软件使用成本的方法 — 按需使用软件而不是为每台计算机购买许可证。尤其是考虑到大多数计算机在差不多70%的时间是空闲的,SaaS可能非常有效。企业不必为单一用户购买多个许可证,而是让许可证的使用时间尽可能接近100%,从而尽可能节省成本。
1.1 SaaS的优势
SaaS 给软件厂商提供了新的机会。尤其是,SaaS软件厂商可以通过四个因素提高 ROI(投资回报):提高部署的速度、增加用户接受率、减少支持的需要、降低实现和升级的成本。
(1)提高部署的速度
在过去,部署传统的桌面应用程序需要很大的工作量。正如Tariq Ahmed在Flex 4 in Action (Manning Press) 的第1章中指出的,“要想让数千甚至数万客户机同时运行软件的某一版本,后勤方面的复杂性是非常高的。”
这正是向云计算转移的过程比较缓慢且平缓的主要原因之一。在大多数情况下,符合逻辑的解决方案是分阶段地把软件转移到云中,首先以SaaS的形式提供原应用程序的高度简化的版本。考虑到开发商对版本控制的控制水平,这么做是很合理的。
云计算与过去的 “LAN 计算” 之间有许多相似之处。典型的LAN架构由站内的许多工作站组成,它们常常被称为哑终端,它们通过连接强大的大型机(常常由IBM 提供)运行应用程序。这种计算类型过去非常适合企业,因 IT部门能够完全控制版本,可以非常方便地多次部署更新。同样,过去妨碍桌面软件应用程序开发商进行版本控制的后勤障碍在云中也不存在,因为软件在开发公司能够直接访问的基础设施上运行。
考虑到SaaS必须能够服务的客户机数量,SaaS基础设施的规模要比LAN大得多。但是底层的概念是相同的。大型机能够驻留足够多的软件实例,从而为本地网络中连接它的所有客户机提供服务;而云由许多不同的计算机资源组成,它们共同提供计算能力,从而运行为世界各地的客户机提供服务所需的许多软件实例。
(2)增加接受率
以前一些软件的许可证费用太高,而现在SaaS让一般消费者能够以合理的价格使用它们。一个好例子是 Adobe 以SaaS的形式提供Adobe Photoshop。尽管这项工作是Adobe正在做的试验,但是已经取得了一些效果。
SaaS提供的多种业务模型尤其有吸引力。例如,Intuit 以SaaS的形式提供QuickBooks Online,按月收取服务费。作为经常旅行的企业主,这种服务非常有用。同时,Adobe在Photoshop.com和Acrobat.com中应用了SaaS,以freemium服务的形式提供软件 — freemium服务是指一种基于许可证软件产品的SaaS缩略版的业务模型。
freemium SaaS基于的收入模型是,预计免费用户中的一部分最终会觉得软件很有用,他们会升级到启用了更多特性的SaaS付费版本,或者购买包含所有特性和功能的桌面版本的许可证。这种方法往往比通过 “受限制的演示” 模式试用软件更好,因为演示模式要求用户在桌面计算机上安装他们可能不会购买的应用程序。另外,如果免费用户中升级的比例低于预期,还可以通过广告进一步补充这个模型。随着云计算的发展,传统的桌面软件厂商经常使用这种方法适应市场的变化。
(3)减少支持的需要
大型客户服务中心的成本很高,不得不支持多种平台会导致支持问题增加,而SaaS可以大大缓解这些难题。首先,部署的简便性让开发人员能够在发现bug之后很快进行修复,这意味着大多数bug可以在大量用户遇到它们之前被修复,这会减少客户支持部门接到的电话数量,提高客户满意度,降低客户流失的可能性。
另外,传统桌面软件应用程序的开发商常常必须支持多种平台。例如,开发商可能必须支持Windows 7和Apple Mac OS X 10.6操作系统,添加对第二种操作系统的支持差不多会让开发成本加倍;而且,如果支持这些操作系统的许多不同版本,问题会更多。支持操作系统的多个版本还会产生限制。
(4)降低实现和升级的成本
SaaS推动ROI的第四个因素与第一个因素有点儿相似。但是,部署的速度是指快速、简便地部署应用程序更新所带来的好处。与之相反,降低实现和升级的成本是指开发公司由于能够控制版本和运行软件的基础设施所获得的经济利益。
因为开发商可以控制运行软件的平台(平台通常对于用户完全透明),所以他们不必负担在多个平台上测试和部署bug补丁和新特性的额外开销,这会节省大量资金。这让SaaS应用程序的升级成本更低。节省的大量时间和资金让开发商有机会更好地响应客户的请求并增强易用性,从而提高客户满意度,降低客户流失的可能性,这会带来间接的经济利益。
1.2 SaaS使用的技术
SaaS层离普通用户非常接近,下面是其中最主要的五种:
(1)HTML :标准的Web页面技术,现在主要以HTML4为主,但是即将推出的HTML5会在很多方面推动Web页面的发展,比如视频和本地存储等方面。
(2)JavaScript :一种用于Web页面的动态语言,通过JavaScript ,能够极大地丰富Web页面的功能,最流行的JS框架有jQuery和Prototype 。
(3)CSS :主要用于控制Web页面的外观,而且能使页面的内容与其表现形式之间进行优雅地分离。
(4)Flash :业界最常用的RIA(Rich Internet Applications)技术,能够在现阶段提供HTML等技术所无法提供的基于Web的富应用,而且在用户体验方面,非常不错。
(5)Silverlight :来自业界巨擎微软的RIA技术,虽然其现在市场占有率稍逊于Flash,但由于其可以使用C#来进行编程,所以对开发者非常友好。
在SaaS层的技术选型上,首先,由于通用性和较低的学习成本,大多数云计算产品都会比较倾向HTML 、JavaScript和CSS这对黄金组合,但是在HTML5被大家广泛接受之前,RIA技术在用户体验方面,还是具有一定的优势,所以Flash和Silverlight也将会有一定的用武之地,比如VMware vCloud就采用了基于Flash的Flex技术,而微软的云计算产品肯定会在今后大量使用Silverlight技术。
2、平台即服务PaaS
平台即服务(Platform as a Service,PaaS)提供对操作系统和相关服务的访问。它让用户能够使用提供商支持的编程语言和工具把应用程序部署到云中。用户不必管理或控制底层基础架构,而是控制部署的应用程序并在一定程度上控制应用程序驻留环境的配置。PaaS的提供者包括Google App Engine、Windows Azure、Force.com、Heroku等。小企业软件工作室是非常适合使用PaaS的企业。通过使用云平台,可以创建世界级的产品,而不需要负担内部生产的开销。
通过PaaS这种模式,用户可以在一个提供SDK(Software Development Kit,即软件开发工具包)、文档、测试环境和部署环境等在内的开发平台上非常方便地编写和部署应用,而且不论是在部署,还是在运行的时候,用户都无需为服务器、 操作系统、网络和存储等资源的运维而操心,这些繁琐的工作都由PaaS云供应商负责。而且PaaS在整合率上面非常惊人,比如一台运行Google App Engine的服务器能够支撑成千上万的应用,也就是说, PaaS是非常经济的。 PaaS主要面对的用户是开发人员。
2.1 PaaS的优势
一般来说,和现有的基于本地的开发和部署环境相比,PaaS平台主要有下面这六方面有非常大的优势:
(1)友好的开发环境:通过提供SDK和IDE(Integrated Development Environment ,集成开发环境)等工具来让用户不仅能在本地方便地进行应用的开发和测试,而且能进行远程部署。
(2)丰富的服务:PaaS平台会以API的形式将各种各样的服务提供给上层的应用。
(3)精细的管理和监控:PaaS能够提供应用层的管理和监控,比如能够观察应用运行的情况和具体数值(比如吞吐量Throughput和响应时间Response Time等)来更好地衡量应用的运行状态,还有能够通过精确计量应用使用所消耗的资源来更好地计费。
(4)伸缩性强: PaaS 平台会自动调整资源来帮助运行于其上的应用更好地应对突发流量。
(5) 多租户(Multi-Tenant)机制:许多PaaS平台都自带多租户机制,不仅能更经济地支撑庞大的用户规模,而且能提供一定的可定制性以满足用户的特殊需求。
(6)整合率和经济性:PaaS平台整合率是非常高,比如PaaS的代表Google App Engine能在一台服务器上承载成千上万的应用。
2.2 PaaS的主要成分
PaaS分解为主要组件:平台和服务。考虑提供的服务,这称为解决方案堆。也就是说,PaaS 的两个主要成分是计算平台和解决方案堆。
为了说明这两个 “成分”,我们进一步研究一下它们的定义。按照最简单的形式,计算平台是指一个可以一致地启动软件的地方(只要代码满足平台的标准)。平台的常见示例包括 Windows、Apple Mac OS X和Linux操作系统;用于移动计算的Google Android、Windows Mobile和Apple iOS;以及作为软件框架的Adobe AIR和Microsoft .NET Framework。要记住的重点是,计算平台不是指软件本身,而是指构建并运行软件的平台。下面提供一张示意图以帮助理解这种关系。
云计算分类与PaaS元素之间关系的图形化解释
解决方案堆由应用程序组成,这些应用程序有助于开发过程和应用程序部署。这些应用程序是指操作系统、运行时环境、源代码控制存储库和必需的所有其他中间件。
2.3 PaaS使用的技术
PaaS 层的技术比较多样性,下面是常见的五种:
(1)REST :通过 REST(Representational State Transfer,表述性状态转移)技术,能够非常方便和优雅地将中间件层所支撑的部分服务提供给调用者。
(2)多租户:就是能让一个单独的应用实例可以为多个组织服务,而且能保持良好的隔离性和安全性,并且通过这种技术,能有效地降低应用的购置和维护成本。
(3)并行处理:为了处理海量的数据,需要利用庞大的x86集群进行规模巨大的并行处理,Google的MapReduce是这方面的代表之作。
(4)应用服务器:在原有的应用服务器的基础上为云计算做了一定程度的优化,比如用于Google App Engine的Jetty应用服务器。
(5)分布式缓存:通过分布式缓存技术,不仅能有效地降低对后台服务器的压力,而且还能加快相应的反应速度,最著名的分布式缓存例子莫过于Memcached 。
对于很多PaaS平台,比如用于部署Ruby应用的Heroku云平台,应用服务器和分布式缓存都是必备的,同时REST技术也常用于对外的接口,多租户技术则主要用于SaaS应用的后台,比如用于支撑Salesforce 的CRM等应用的Force.com多租户内核,而并行处理技术常被作为单独的服务推出,比如Amazon的Elastic MapReduce 。
3、基础架构即服务IaaS
基础架构,或称基础设施(Infrastructure)是云的基础。它由服务器、网络设备、存储磁盘等物理资产组成。在使用IaaS时,用户并不实际控制底层基础架构,而是控制操作系统、存储和部署应用程序,还在有限的程度上控制网络组件的选择。
通过IaaS这种模式,用户可以从供应商那里获得他所需要的计算或者存储等资源来装载相关的应用,并只需为其所租用的那部分资源进行付费,而同时这些基础设施繁琐的管理工作则交给IaaS供应商来负责。
IaaS的关键概念:
* 云爆发(cloud bursting)
* 多租户计算(multi-tenant computing)
* 资源共用(resources pooling)
* 虚拟机监控程序(hypervisor)
IaaS最与众不同的两个方面:可伸缩性和虚拟化(elasticity and virtualization)。
对于企业而言,IaaS的巨大价值通过云爆发(cloudbursting)概念实现。云爆发是指当业务瞬间增长,需要大量的计算资源时,将任务负载扩展到云环境的过程。云爆发促成的资本节约潜力巨大,因为企业无需额外投资利用率很低的服务器,那些服务器一年中只有两三次使用 70% 的容量,其余时间仅有 7-10% 的负荷。
3.1 从”基础架构即资产“到”基础架构即服务”
在过去50年之内,大量成功的公司花费大量宝贵时间和资源来构建基础架构,其目标是通过创建一个更大、更快、更强的网络来获取战胜其竞争对手的竞争优势。IT 行业中的 “基础架构即资产” 范式拥有上世纪六七十年代的 “暴力跑车(muscle cars)” 所拥有的相同或类似的低效率和不利特征。对于企业计算,这些低效率包括:
* 大量未使用的计算能力和容量,它们耗费的成本与大型、昂贵的数据中心中的硬件消耗的大量空间相关联。比如服务器一年中可能只有两三次使用70%的容量,其余时间仅有7-10%的负荷。 * 昂贵的人力资源需求,包括要求基础架构资产(服务器、路由器、交换机等)所在的数据中心的网络管理员进行24小时监控。 * 旨在应对高水平能源浪费的Green Computing计划的一个巨大障碍。
IaaS标志着从 “基础架构即资产” 到 “基础架构即服务” 的转变。云计算的其他两个类别也标志着范式转变。对于Platform as a Service (PaaS),转变来自 “平台即资产” 范式,该范式的特征是大量采购许可。同样的转变也适用Software as a Service (SaaS),这种转变是从 “软件以许可形式作为组织资产” 到 “软件以服务形式提供”。
3.2 IaaS的主要特征
(1)可伸缩性
可伸缩性是IaaS的首要关键特征。
假设云由一些粘在一起的棉花糖簇组成,这样人们就可以坐在它们上面。每个棉花糖都能承载一定数量的人,具体取决于组成云的棉花糖簇的数量和那些簇中包含的棉花糖的数量。随着越来越多的人登上棉花糖云,可以通过粘贴更多的棉花糖来扩展棉花糖簇,增加表面面积。人代表需要计算资源的应用程序,比如承载网站并运行软件的资源。棉花糖簇代表VM集群,每个棉花糖代表一 VM。
尽管这听起来有点像Seuss博士的书中可能出现的内容,但它提供了一种方法来理解许多黑魔法(dark art)考虑的一个概念:可伸缩的集群(elastic clustering)。集群化几个物理服务器来形成一个虚拟云称为云集群(cloud clustering),如果它真是一种黑魔法,则精通程度可以通过一位艺术家的系统设计的可伸缩性来衡量。
(2)虚拟化
IaaS很容易定位,因为它通常是独立于平台的。IaaS有一个硬件和软件资源组合组成。IaaS软件是低级代码,独立于操作系统运行,例如虚拟机监控程序。虚拟机监控程序负责管理硬件资源的库存并根据需要分配上述资源。这个过程称为资源共用(resource pooling)。虚拟机监控程序实现的资源共用使得虚拟化成为可能,虚拟化使多租户计算(multi-tenant computing)成为可能。多租户计算概念指由几个组织共享的一个基础架构,这些组织在安全需求和遵从性问题方面有类似的兴趣。
VMs、虚拟机监控程序和计算机之间的关系
通过 IaaS,我们可以拥有提供处理、存储、网络和其他计算资源的能力,可以在那里部署和运行任意软件,比如操作系统和应用程序。大多数云计算用例遵循已经习惯的基础分层结构:一个软件解决方案堆栈或平台被部署在一个网络基础架构上,一些应用程序在那个平台之上运行。但是,虚拟化使得云范式独一无二。
3.3 IaaS的优势
IaaS服务和传统的企业数据中心相比,在很多方面都存在一定的优势,下面是最明显的五个。
(1)免维护:主要的维护工作都有IaaS云供应商负责,所以不必用户操心。
(2)非常经济:首先免去了用户前期的硬件购置成本,而且由于IaaS云大都采用虚拟化技术,所以在应用和服务器的整合率普遍在10以上,这样能有效降低使用成本。
(3)开放标准:虽然很多IaaS平台都存在一定的私有功能,但是由于OVF等应用发布协议的诞生,使得IaaS在跨平台方面稳步前进,从而使得应用能在多个IaaS云上灵活的迁移,而不会被固定在某个企业数据中心内。
(4)支持的应用:因为IaaS主要是提供虚拟机,而且普通的虚拟机能支持多种操作系统,所以IaaS所支持应用的范围是非常广泛的。
(5)伸缩性强:IaaS云只需几分钟就能提供用户一个新的计算资源,而传统的企业数据中心则往往需要几周时间,并且计算资源可以根据用户需求来调整其资源的大小。
3.4 IaaS使用的技术
在IaaS所采用的技术方面,都是一些比较底层的技术,其中有四种技术是比较常用的:
(1)虚拟化:也可以理解它为基础设施层的“多租户”,因为通过虚拟化技术,能够在一个物理服务器上生成多个虚拟机,并且能在这些虚拟机之间能实现全面的隔离, 这样不仅能减低服务器的购置成本,而且还能同时降低服务器的运维成本,成熟的x86虚拟化技术有VMware的ESX和开源的Xen 。
(2)分布式存储:为了承载海量的数据,同时也要保证这些数据的可管理性,所以需要一整套分布式的存储系统,在这方面, Google 的GFS是典范之作。
(3)关系型数据库:基本是在原有的关系型数据库的基础上做了扩展和管理等方面的优化,使其在云中更适应。
(4)NoSQL:为了满足一些关系数据库所无法满足的目标,比如支撑海量的数据等,一些公司特地设计一批不是基于关系模型的数据库,比如Google的BigTable和Facebook的Cassandra等。
现在大多数的IaaS服务都是基于Xen的,比如Amazon的EC2等,但VMware也推出了基于ESX技术的vCloud ,同时业界也有几个基于关系型数据库的云服务,比如Amazon 的RDS(Relational Database Service,关系型数据库服务)和Windows Azure SDS(SQL Data Services, SQL数据库服务)等。关于分布式存储和NoSQL,它们已经被广泛用于云平台的后端,比如Google App Engine的Datastore就是基于BigTable和GFS这两个技术之上的,而Amazon则推出基于NoSQL技术的Simple DB 。
分享一个跨概念矩阵来理解云计算的这三个类别: