最近,没有哪家技术性网站不提到所谓的云计算的。云计算其实就是以服务的形式提供计算资源(计算机和存储)。这又涉及到以一种简单、透明的方式动态地将服务延伸到更多的计算机和存储的能力。所有这些都类似于效用计算(utility computing)
背后的思想。在效用计算中,计算资源被看作一种计量服务,就像更传统的公共设施(例如水或电)一样。它们的区别不在于这些思想背后的目标,而在于组合到一起、使这些思想成为现实的现有技术。
云计算背后最重要的概念之一就是可伸缩性,而实现它的关键则是虚拟化(virtualization)。虚拟化在一台共享计算机上聚集多个操作系统和应用程序,以便更好地利用服务器。虚拟化还允许在线迁移,因此,当一个服务器超载时,可以将一个操作系统的一个实例(以及它的应用程序)迁移到一个新的、不那么繁忙的服务器上。
IBM 和 Amazon Web Services
云计算提供一种在虚拟环境中开发应用程序的方法,该环境的计算能力、带宽、存储、安全和可靠性都不成问题 — 您不需要在自己的系统上安装软件。在虚拟云计算环境中,可以开发、部署和管理应用程序,您仅需支付所使用的时间和容量,但这使您能够根据不断变化的业务需求调整应用程序。
IBM 和 Amazon Web Services 进行合作,让您能够在 Amazon Elastic Compute Cloud (EC2) 虚拟环境中使用 IBM 软件产品。我们在 EC2 上提供的软件产品包括:
- DB2 Express-C 9.5
- Informix Dynamic Server Developer Edition 11.5
- WebSphere Portal Server and Lotus Web Content Management Standard Edition
- WebSphere sMash
这是产品级别的代码,其中的所有特性和选项都是可用的。从 IBM developerWorks Cloud Computing Resource Center 了解更多信息,并下载运行这些产品的 Amazon Machine Images。
要获得更多关于云计算的资源,请参见 developerWorks 上的 Cloud Computing for Developers space。
从外部看,云计算只是将计算和存储资源从企业迁出,并迁入到云中。用户定义资源需求(例如计算和广域网、带宽需求),云提供者在它的基础设施中虚拟地装配这些组件,如图 1 所示。
图 1. 云计算在 Internet 中迁移资源但是,为什么您会心甘情愿地放弃对自己资源的控制,而让它们虚拟地存在于云中呢?原因有很多,但我相信最重要的两个原因是成本和可伸缩性。云计算的目标是使这些资源比您自己所能提供和管理的资源更廉价。云计算除了降低成本外,还有更大的灵活性和可伸缩性。云计算提供者可以轻松地扩展虚拟环境,以通过提供者的虚拟基础设施提供更大的带宽或计算资源。
云计算在环保方面的优势是,它可以在不同的应用程序之间虚拟化和共享资源,以提高服务器的利用率。图 2 显示了一个例子。在这个例子中,不同的应用程序使用了 3 个独立的平台,每个应用程序都在它自己的服务器上运行。在云中,可以在多个操作系统和应用程序之间共享(虚拟化)服务器,从而减少服务器的数量。更少的服务器意味着需要更少的空间(减少数据中心占用的空间)和更少用于制冷的电力(减少碳污染)。
图 2. 虚拟化和资源使用但是,有得必有失,云计算并非没有缺点。本文后面会探索其中的一些问题。但是现在,让我们更深入地探究云计算。
云计算剖析
当您深入观察云时,您会发现,它实际上并不是一个单独的服务,而是一个服务集合,如图 3 所示。这些层定义了提供的服务的级别。
图 3. 云计算的层次我们从最低级的服务开始,即基础设施(Infrastructure-as-a-Service
或 IaaS)。IaaS 就是将基础设施(计算资源和存储)作为服务出租。这意味着虚拟计算机不仅具有有保证的处理能力,而且为存储和 Internet 访问预留了带宽。实际上,IaaS 具有在有特定服务质量约束的情况下出租计算机或数据中心的能力,使之能执行任意操作系统和软件。
云计算的价值
除了减少与云计算资源相关的管理成本外,云计算还有其他优点。例如,当您通过 Internet 将自己与自己的资源分离开时,那些资源在哪里并不重要。又如,它们可以在一个可自然制冷的环境中,从而减少能耗。
顺着栈往上看,上一级的服务是平台(Platform-as-a-Service
或 PaaS)。PaaS 类似于 IaaS,但是它包括操作系统和围绕特定应用的必需的服务。例如,除了虚拟服务器和存储外,PaaS 还提供一个特定的操作系统和应用程序集(通常是作为一个虚拟机,即 VM,或文件,例如 VMware 的 .vmdk 格式),以及对必要的服务(例如 MySQL 数据库或其他专用本地资源)的访问。换句话说,PaaS 就是 IaaS 加上一个用于给定应用的定制软件栈。
最后,在 图-3 顶部是可以提供的最简单的服务:应用程序。这一层被称作 Software-as-a-Service
(SaaS),它是从一个集中的系统部署软件,使之在一台本地计算机上(或从云中远程地)运行的一个模型。由于是计量服务,SaaS 允许出租一个应用程序,并计时收费。
这是高度概括的云计算的视图。这个视图忽略了云的其他一些方面,例如data-Storage-as-a-Service
(dSaaS),后者以计量服务的形式提供存储,消费者按使用的容量(使用的存储的容量)和利用率(存储的带宽需求)付费。另外还有云服务,它为互操作性和外部应用程序编程接口(API),例如 Web 服务,提供了内部机制。
云计算现状
最近几个月,对云计算和相关基础设施的投资呈爆炸式增长。这样巨大的投资表明,对云中资源的虚拟化存在着巨大的需求。去年已经有了很多新的服务,图 4 展示了其中一部分。
图 4. 云计算各层及相关产品这绝不是一份详尽的产品类别,因为变化非常频繁。但是,这的确给出了一些产品的概览,并展示了它们之间的区别。
Linux 和开放源代码在云中的应用
现在让我们来探索一下,Linux 和开源社区如何为云计算领域做出贡献。您可能已经猜到,Linux 和开放源代码扮演着极其重要的角色。
Software-as-a-Service
SaaS(软件即服务)就是以服务的形式访问 Internet 上的软件。一种早期的 SaaS 方法是 Application Service Provider(ASP)。ASP 提供对 Internet 上存放或交付的软件的订阅。ASP 交付软件,并根据软件的使用收费。这样一来,您就不必购买软件,只需随需租用软件。
SaaS 实例
传统应用程序与 Saas 应用程序之间的对比的一个有趣的例子是 SoftwarePlanner.com 提供的应用程序生命周期管理工具。该公司以传统形式或 SaaS 的形式提供他们的工具。当使用传统形式时,客户将应用程序套件放在他们的企业中;而当使用 SaaS 形式时,客户拥有应用程序套件,并将其放到 Internet 上。
SaaS 的另一个方面是在 Internet 上使用远程执行的软件。这种软件可以是本地应用程序所使用的服务(并定义为 Web 服务
),也可以是通过 Web 浏览器看到的远程应用程序。远程应用程序服务的一个例子是 Google Apps,它通过一个标准的 Web 浏览器提供一些企业应用。要远程地执行应用程序,通常需要依赖于一个应用服务器来公布所需的服务。
应用服务器 是一个软件框架,它公布软件服务的 API(例如事务管理或数据库访问)。具体的例子有 Red Hat JBoss Application Server、Apache Geronimo 和 IBM® WebSphere® Application Server 等。
SaaS 的另一个最近的例子是 Google 的 Chrome 浏览器。这个浏览器是作为新桌面的理想环境,除了具有传统的 Web 浏览体验外,还可以通过它来(以本地或远程方式)交付应用程序。
Platform-as-a-Service
PaaS 可描述为一个完整的虚拟平台,它包括一个或多个服务器(在一组物理服务器上虚拟而成)、操作系统以及特定的应用程序(例如用于基于 Web 的应用程序的 Apache 和 MySQL)。在某些情况下,这些平台可以预先定义和选择。而在另一些情况下,可以提供一个 VM 镜像,该镜像包含所有的特定于用户的应用程序。
PaaS 一个有趣的例子是 Google App Engine。App Engine 是一个服务,通过它可以在 Google 的可伸缩性极佳的架构上部署 Web 应用程序。App Engine 为可通过 Internet 引用的 Python 应用程序提供一个沙盒(将来还会支持更多的语言)。除了支持用户认证、镜像操作和电子邮件发送外,App Engine 还提供了 Python API,用于持久地存储和管理数据(使用 Google Query Language 或 GQL)。Web 应用程序运行时所在的沙盒将限制对底层操作系统的访问。虽然 App Engine 限制了应用程序可用的功能,但是它支持有用的 Web 服务的构造。
注意:在一定的带宽和存储约束范围内,在 App Engine 中部署应用程序是免费的。但是,如果要用 App Engine 构建生产 Web 站点,则需要评估使用费。
PaaS 的另一个例子是 10gen,它既是一个云平台,又是一个可下载的开放源代码包,可用于创建您自己的私有云。10gen 是类似于 App Engine 的一个软件栈,它提供与 App Engine 类似的功能 — 但有一些不同之处。通过 10gen,可以使用 Python 以及 JavaScript 和 Ruby 编程语言开发应用程序。该平台还使用沙盒概念隔离应用程序,并且通过自己的应用服务器的许多计算机(当然,是在 Linux 上构建)提供一个可靠的环境。
Infrastructure-as-a-Service
IaaS 是以服务的形式交付计算机基础设施。这一层与 PaaS 的不同之处在于,只提供虚拟硬件,而没有软件栈。客户提供一个 VM 镜像,该镜像在一个或多个虚拟服务器上被调用。IaaS 是作为服务的计算的最原始的形式(除了对物理基础设施的访问)。最著名的商业 IaaS 提供程序是 Amazon Elastic Compute Cloud(EC2)。在 EC2 中,可以指定一个特定的 VM(操作系统和应用程序集),然后将应用程序部署到它上面,或者提供要在服务器上执行的 VM 镜像。然后,只需根据计算时间、存储和网络带宽付费。
Eucalyptus 项目(Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems)是 Amazon EC2 的一个开源实现,它与商业服务接口兼容。和 EC2 一样,Eucalyptus 依赖于 Linux 和 Xen 进行操作系统虚拟化。Eucalyptus 是加利福尼亚大学(Santa Barbara)为进行云计算研究而开发的。另一个 EC2 风格的 IaaS 是 Enomalism 云计算平台。Enomalism 是一个开放源代码项目,它提供了一个功能类似于 EC2 的云计算框架。Enomalism 基于 Linux,同时支持 Xen 和 Kernel Virtual Machine(KVM)。与其他纯 IaaS 解决方案不同的是,Enomalism 提供了一个基于 TurboGears Web 应用程序框架和 Python 的软件栈。
其他云开发
除了前面已经讨论过的开发外,还有其他一些基于 Linux 的开放源代码包,它们在云环境中也比较有用。Hadoop 是一个开放源代码 Java™ 软件框架,它类似于 PaaS,但是着重于在一组联网的服务器上操纵大型的数据集(受 Google MapReduce 的启发,后者支持大型数据集的并行处理)。因此,它在 Web 搜索和广告应用中派上用场 — 特别是在 Yahoo! 上。Hadoop 还提供一些子项目,这很像 Google 应用程序。例如,HBase 提供类似于 Google BigTable 数据库的功能,Hadoop Distributed File System(HDFS)提供类似于 Google File System(GFS)的功能。
问题和挑战
云计算的问题显而易见 — 其中最重要的两个问题是保密性和安全性。保密性可以通过加密来解决,但是在选择云计算服务时,要审慎一些。在 Web 刚开始发展时,即使是电子商务也受到了怀疑。在全球,每年要发生价值上万亿美元的电子商务事务,所以云计算可以收益于当今所有提供 Web 安全的技术(例如安全套接字层或 SSL)。
结束语
云计算的风暴已经开始,推动云计算的 Linux 开源开发也在迅猛发展。随着云计算领域出现巨大的投资,向集中式数据中心的转型已显而易见。有趣的新技术和架构即将到来!