2.2 理解不同云分类
既然已经知道云计算的支撑技术(如虚拟化、弹性、存储和数据库),那么理解这些概念在所提供的不同类型(种类)云计算服务中如何应用将是有帮助的。让我们回到第1章的云类型分类法—IaaS、PaaS和DaaS,用它来分类业界最出名提供商的云产品。
2.2.1 亚马逊EC2:基础设施即服务
亚马逊EC2被划分到IaaS(有些云观察员把它称为HaaS(Hardware as a Service),但亚马逊加入了太多额外服务,硬件即服务现在已变得不合适它了)。它是首家同时也是目前为止该类型中最大的提供商。亚马逊于2006年开放了其服务,最初利用的是零售业务的额外容量。该公司声称到2008年年底使用者已经超过50万个。
亚马逊EC2是最通用的大型云,但只提供了最少的自动伸缩或故障转移(failover)支持,这两个功能都必须在应用中编码才能实现。这与在PaaS类型云(如Google App Engine)中发生的自动透明的伸缩形成了鲜明对比,我们将在2.2.3节中讨论PaaS。在像EC2这样的IaaS类型云中,需要使用它们的API仔细地编程才能实现弹性。另外,你可以使用任何编程语言,并且可以在IaaS云中完全控制应用。不错,这需要更多的手工劳动,但你得到了类似物理硬件的外观,可以从操作系统中对其进行控制。LAMP栈是最简单同时也是最常见的EC2配置(见表2.6)。
亚马逊EC2利用了开源Xen hypervisor的一个定制版本来实现超虚拟化(paravirtualization)。由于超虚拟化出来的客户操作系统依赖hypervisor对特权操作提供支持,因此客户操作系统的运行不会加剧对CPU的访问。
超虚拟化要比那种客户操作系统无需修改即可运行的虚拟化环境高效。但是操作系统必须移植到超虚拟化环境,以便必须由VMM执行(并且运行也更慢)的操作系统任务可直接被客户操作系统执行。这就是亚马逊不会随便运行你想要的操作系统的原因—它只运行由它或原始厂商移植和完全测试过的操作系统。
亚马逊为其所有服务提供了丰富的API,表2.7描述了其中的一部分。它有SOAP形式的API,也提供了简单的HTML(GET、POST)形式。请求和配置云中虚拟化硬件,一般仅需12.5次调用。
EC2的定价策略从低端的每小型Linux实例(CPU)小时5美分,一直到高端Linux实例的0.5美元。S3的定价大约是每月每GB 0.15美元,存储用得越多,费用也越低。
2.2.2 微软Azure:基础设施即服务
微软的Azure和亚马逊的EC2同属IaaS,它同样也提供了更偏向于PaaS层级的额外服务。许多微软的最终用户应用正在翻新,以便能在云中运行。最终结果是,随着应用不断增加,整个平台最终试图达到SaaS层级,以抵御Google凭借Google Docs对微软Office发动的进攻,以及Google Apps SaaS产品。
图2.6中标记为Windows Azure的方框是经过修改使之能运行于云环境中的Windows Server 2008。这说明它是经过超虚拟化的,可有效运行于由微软Hypervisor(运行于微软云数据中的裸硬件上)创建的虚拟化环境中。
在其内部,这个由Windows Server 2008衍生出的操作系统层分成4大部分:存储,类似文件系统;组织控制器(fabric controller),它是用于建模/部署和供应的管理系统;虚拟化计算/VM;开发环境,它允许开发人员在其桌面模拟Windows Azure,同时为Visual Studio、Eclipse等其他工具提供了插件,开发运行于其上的云应用。基于这种架构,你只需将Azure部署于一台机器上,然后你就可以把它的多个实例复制到利用虚拟化技术的云中的其余服务器上。
Windows Azure架构和框架。底部是Windows Azure操作系统。它运行在由微软Hypervisor创建的虚拟化环境中,Hypervisor运行在裸硬件之上。顶部是最终用户应用,它是微软正在翻新作为SaaS交付的产品。来源:微软
微软Azure的应用是用像Visual Studio这样专有的编程环境使用.NET类库编写的,并且被编译成公共语言运行时(Common Language Runtime),它是微软的语言无关的受管理环境。
Windows Azure API
Windows Azure API是基于REST的API,认证采用的是X.509客户端证书。表2.8列出了部分API,有助于你了解运行于Azure云中的应用被操纵和控制的方式。这是一组跟执行托管服务上操作相关的调用。
类似亚马逊,Azure顶部运行了一组预置服务,用于提供微软的PaaS功能。刚开始的服务包括:
- Live服务
- SQL服务
- .NET服务
- SharePoint服务
- CRM服务
在构建云应用时,你可以把低层级服务视为API,它们没有用户界面元素。
相比起亚马逊的定价,Azure的定价:计算时间集(computing time set)为0.12美元/小时,存储为0.15美元/GB,存储事务为0.01美元/10kB。对于结构化数据库,Web版定价为每月1GB关系数据库不超过9.99美元;对于企业版,每月10GB关系数据库不超过99.99美元。据说,微软马上会推出一种分层、一站式(有限制)模型。
2.2.3 Google App Engine:平台即服务
App Engine是一种专门面向传统Web应用的纯PaaS云,它强加了一种应用结构,在无状态的计算层和有状态的存储层之间进行了干净的分离。IaaS模型中如此明显的虚拟化和弹性,在此处几乎完全不露痕迹。但它们在幕后发挥着巨大的作用。这种模型的一个卖点就是,在面对容量需求变化时的自动弹性。
App Engine的编程语言是Python和Java。App Engine不适合通用计算。它最适合Web应用,建立在请求-回复计算的假设之上,这种结构假定长时间无CPU利用(如,人类思考时间)。因此,Google可以并且能够严格地给每个请求划定CPU时间。
App Engine的自动伸缩和高可用性机制,以及其专有的巨型数据存储(建立在BigTable之上),全都依赖这些约束。但应用若符合这些约束,构建一个可以自动伸缩且运行于这个星球上最大的云上的应用,不会有比这更快和更便宜的方式了。
App Engine开发环境
App Engine的开发环境包含以下元素:
- 沙箱(sand box)—应用运行在一个对底层操作系统提供有限访问的安全环境之中。这些限制允许App Engine在多个服务器间分配针对应用的Web请求,启停服务器以满足流量需求。沙箱把应用隔离在一个安全可靠,同时独立于硬件、操作系统和Web服务器物理位置的环境里。
- Java运行时环境—你可以使用常见的Java Web开发工具和API标准开发Java 6运行时环境的应用。应用与环境使用Java Servlet标准进行交互,而且可以使用常见的Web应用技术,如Java服务器页面(JavaServer Page,JSP)。应用可以使用Java标准API访问大多数App Engine服务。这个环境包含Java SE 6运行时环境(Java SE Runtime Environment,JRE)平台和类库。应用可以使用任何JVM字节码或类库特性,只要不超过沙箱限制。
Python运行时环境—你可以使用Python 2.5编程语言开发应用,并将之运行于Python解释器之上。App Engine包含了Python Web应用开发的API和工具,包括数据建模API、Web应用框架,以及管理和访问应用数据的工具。Python环境包含受沙箱环境限制的Python标准库。为Python环境编写的应用代码只能用Python编写。Python环境提供了访问数据存储库、Google账号、URL fetch和邮件服务的API。
数据存储库—App Engine提供了一个分布式数据存储服务,其特点是包含查询引擎且支持事务。该分布式数据存储库会根据应用需求量自动伸缩。正如前面讨论云数据库时所说,App Engine数据存储库有别于传统关系数据库。数据对象或实体(entity)有类别和一组属性。查询可以检索按属性值过滤和排序的实体。属性的值可以是任何被支持的值类型。数据存储库的实体是无模式的(schemaless)。应用代码强制和提供数据实体的结构。Java JDO/JPA接口和Python数据存储库接口包含了应用和强加这种结构的特性。
如果日使用量不超过6.5 CPU小时和1GB进出应用的数据,App Engine是免费的。超过这一标准,传出带宽的成本是0.12美元/GB,传入带宽的成本是0.10美元/GB,CPU时间是0.10美元/小时,数据存储是每月0.15美元/GB,邮件接收为每收到一封邮件0.0001美元。
2.2.4 云中的Ruby on Rails:平台即服务
Ruby on Rails(RoR)是Ruby编程语言的开源Web应用框架。它旨在用于采用敏捷开发方法学的项目里,由于非常适合工期短、客户驱动的项目,也常被Web开发者使用。类似Google的App Engine,RoR应用也限于请求-响应架构的Web应用。
开源软件 以源代码形式获得的计算机软件。这类软件在软件许可证之下提供了源代码和一般为版权持有者保留的其他权力,允许使用者学习、改变和改善软件。有人认为开源是一种哲学;另一些人则认为它是一种务实的方法学。在开源一词被广泛接纳之前,开发者和生产者使用了各种词汇来描述这一概念;开源随着互联网的兴起和计算源代码的大规模重新工具化赢得了支持。开源软件大多采用一种公开、协作的方式进行开发。
Ruby语言的设计结合了Smalltalk的优雅概念、Python的易于使用和学习,以及Perl的务实主义。许多团队在使用RoR开发Web应用时体会到了10倍的速度提升。但许多人报告说,在使RoR完成巨大伸缩时,面临了极大挑战,可能必须对应用的架构和设计做出有悖于RoR本身特有性质的决策。
许多小公司开始着手提供可运行于亚马逊EC2之上的RoR栈,包括Heroku、Aptana和EngineYard等。
2.2.5 Salesforce.com的Force.com:平台即服务
Salesforce.com是最成功的供企业使用的SaaS应用。自1999年以来,它是严格以云应用运行的客户关系管理(Customer Relationship Management,CRM)应用。
Force.com是该公司的PaaS功能,在这里,开发者使用Apex编程语言创建可集成进主Saleforce应用、托管在Salesforce.com云基础设施之上的附加应用。
Google和Saleforce已经集成了App Engine和Force. com,由此,应用可使用其中任意一种环境搭建,并且仍然可以访问存储于Salesforce网站上的公司数据存储库。
Force.com还经营着被称为AppExchange的交换市场;它是由第三方开发者为Salesforce开发出的应用的目录,用户可以购买应用,并将其添加到自己的Salesforce环境中。超过450家的ISV提供了800多种应用。
Force.com的列表价是每登录名5.00美元,每月每个用户最多5个登录名。按照该公司网站的说法,“Force.com云定价是针对偶尔使用、广泛部署的应用,仅针对平台的使用,而非CRM应用。”
我们最后的分类有点特别—特别之处在于,它不是按照应用环境类型的不同划分的,而是按照所有权结构。所谓的数据中心即服务就是私营公司为自己的使用而创建的私有云。
2.2.6 私有云:数据中心即服务
私有云(也称内部云和公司云)是针对为防火墙背后数量有限的人提供托管服务的计算架构的术语。在推动亚马逊、微软和Google提供云服务的虚拟化、自动化和分布式计算方面,它有相同优势,允许公司的网络和数据中心管理员有效地成为满足公司内部消费者需求的服务提供商。
私有云概念专门是为了吸引想要对他们的数据拥有比通过使用第三方托管服务(如亚马逊的EC2或S3)获得的控制权更多的组织而设计的。构建私有云的内部IT提供者必须对他们的运营做根本性改变,才能使他们的行为和提供的好处(以更小的规模)类似云计算提供商。除了通过更高的利用率和随用随付模型获得的经济效应外,还可以推动采用私有云模型的企业实现业务转变,至少让组织可以在合适时机更好地转变或延伸到公有云。
反方观点
这里有一些不同的观点:有人认为,私有云就是昂贵的数据中心加上一个好听的名字。Pundits预测,大约在2012年,就会看到这个概念的崛起和陨落。不过,所有人都同意虚拟化、面向服务架构和开放标准,对于运营数据中心的公司来讲,这些都是要考虑的好事情。批评者认为,所有这些关于私有云的鼓噪都是要掩盖真正的新闻:绝大多数的公司都不需要操心运营某种形式的数据中心,不管像不像云。
1.考虑私有云的人需要注意的问题
假如你正在考虑实施私有云,请记住以下几点:
私有云规模小。这是大多数创新云计算提供商专注于能进一步释放消费者能力的Web技术的原因—数量摆在那儿。公司数据中心面对的用户容量极少能接近这些提供商所面临的级别。而且,我们已经讨论过,容量借助巨型的规模经济驱动节约成本。
遗留应用无法轻易地迁移到云中。迁移到私有云的遗留应用至多会看到边际改进(marginal improvement)。取得这一成绩的唯一办法就是不要把这些应用针对云基础设施重新进行架构设计。
在公司内部并不意味着安全。私有云最大的驱动因素是对于安全的恐惧、不确定和疑虑。在很多人看来,让数据待在防火墙后自己控制的数据中心里会让他们感到更安全。但这是一种谬误,除非你的公司在考虑安全性方面耗费的金钱超过了亚马逊、Google和Salesforce。
做自己最擅长的事情。并不存在一套简单技巧可以让数据中心运营人员照搬亚马逊或Google的做法。因为这些公司靠运营世界上最大的数据中心为生。根据来自数以百万的交易的实时性能反馈,这些公司在持续优化自己的运营方式。你可以尝试向他们学习和模仿,但你们的创新率永远不会处于同一水准—私有云将总是远落后于公有云。
2.亚马逊虚拟私有云
亚马逊虚拟私有云(Virtual Private Cloud,VPC)可以安全无缝地桥接公司现有IT基础设施和AWS云。尽管它不是我们前面定义的私有云,但这种方式给公司提供了一种将它们的数据中心和亚马逊云融合的混合模型。
Amazon VPC使企业可以将现有基础设施经由虚拟专用网(Virtual Private Network,VPN)连接到一组被隔离的AWS计算资源,将现有管理功能(如安全服务、防火墙和入侵检测系统)扩展到包含进来的AWS资源上。你将在第4章了解更多关于云安全、私有云和VPC的内容。
到目前为止,为了知道云的工作方式,我们已经探索了云的技术支撑;为了理解它们的差异,我们已经将这些知识应用到各种类型中最著名的云中。你现在已经有了足够信息提出这样一个问题:我需要哪种类型的云?