2013年6月23日星期日

Paas (3)

http://www.ibm.com/developerworks/cn/cloud/library/cl-cloudindustry1/

云计算通过对基础设施、平台和应用程序的可消费服务增强了业务的灵活性。它可广义定义为使用有公司环境以外提供的,按使用次数付费的可扩展计算资源。公司只使用和支付他所需的。它可以通过 Internet 随时随地访问任何在 “云” 中的资源,无需担心后台维护。然而,企业往往被如何在传统行业中灵活运用云计算这一问题所困扰。
为了实现在客户和内部组织成功应用云计算的这一目标,企业必须重新考虑如何参与他们的业务模型。该系列文章将底层云原理变为实际的行业场景。第 1 篇文章显示了三个模型,Infrastructure as a Service(IaaS),Platform as a Service(PaaS),和 Software as a Service(SaaS),并讨论了 PaaS 如何能帮助交付行业解决方案。图 1 显示了三个模型分层的云计算。

图 1. 作为行业解决方案的服务分层云计算
作为行业解决方案服务的分层云计算 
IaaS 模型为行业解决方案的客户提供了基本的设施,特别是所需的硬件和带宽资源。客户必须处理平台和应用程序的配置,例如,操作系统和所需软件组件的安装。使用 IaaS 的行业解决方案拥有和传统交付方法相同的开发、测试和版本管理,但是他们可以充分地探索云计算的优势,包括解决方案的备份,以及硬件资源的全面使用。
PaaS 模型提供了部署应用程序的基本设施和平台。客户无需配置平台或者顾虑保留硬件资源。PaaS 模型通常提供 API 来开发、测试和部署行业解决方案。这个模型对长尾应用程序(long-tail applications)非常有用。通常来说,根据 Pareto 原理或者 80-20 规则,大约百分之 80 的收入来源于大约百分之 20 的产品或者解决方案。解决方案中剩余的大部分只贡献了收入的一小部分。但是对长尾产业领域来说, 越来越多的收入来源于长尾解决方案。电信业就是个例子。图 2 描绘了电信服务的长尾。

图 2. 电信服务的长尾
电信服务的长尾 
为了吸引和服务不断扩大的客户基础,电信服务供应商追求着眼长尾的服务和解决方案。于是,服务和解决方案就变得越来越有针对性和个性化,并且成为基于有多种组合的重复可用组件。您可以使用 PaaS 模型,通过重复使用多种组件,轻松地开发这些长尾解决方案。这是供应商的复杂性和客户的灵活性的折中模型。
SaaS 模型为不同的客户提供了应用程序的功能,这些应用程序完全由云支持,但客户享有一定的灵活性。有了 SaaS 模型,行业解决方案面市的时间就缩短了很多。
使用云计算三个模型中的任意一个,行业解决方案就能从得云计算中获益,同时也会从交付模型中获益,例如,更短的面市时间和组件的重复使用。
PaaS 模型是针对某些软件提供商的特殊方法,他们主要关注软件开发周期,新应用程序的货币化,因此避开维护应用程序设计、开发、测试、部署和托管的底层基础设施和服务的投入。
PaaS 系统通常是宿主在基于 web 应用程序开发的平台上,提供端到端的开发环境,或者在某些情况下,提供在线开发全部程序的局部环境。开发人员可以在当前的 SaaS 功能上构建或者开发新的 web 应用程序,而用户无需担心开发、托管、升级或者维护应用程序,或者存储数据。
业务处理是一个企业 IT 系统的中心,并且在常规的 Business Process Management(BPM)驱动的企业中,往往要演化出许多软件和管理用的 IT 设施来跟踪面向业务流程建模和 IT 为中心的流程开发、部署和监控的职责。改善商业例程的效率的关键 —— 因此引发业务改革 —— 就是将某个业务流程的 IT 关注点和业务分析分开。支持 PaaS 的以流程为中心的在线平台是提供这一业务转换的一个方法。
对基于行业解决方案的 BPM 应用程序,解决方案构建周期的加速会被不可管理的复杂性所阻碍。因此,为了最大化一个流程为中心的 PaaS 模型的好处,自定义行业解决方案模式的库可以和现成的可部署虚拟机模板一起在 PaaS 中预建。主机 PaaS 自身可以固化为一个盒子(设备),带有单纯作为安全控制和客户端定制提交访问门户输出的基于 web 的管理控制台。
我们设计 CloudLand,一个流程为中心的 PaaS 框架,来满足企业行业解决方案的需求。功能包括:
  • 备用开发和实现的基于 Web 2.0 的开发人员工作区的无代码开发
  • 易于自定义的固化设备
  • 行业解决方案模式的构建
  • 生命周期管理
  • BPM 多租户
根据拟定的 PaaS 框架,我们开发了几个应用云计算的行业解决方案,解决不同行业需求,包括:
  • 应用云计算的自助服务电信服务交付平台:用于在一个开放的开发人员社区和基于电信服务的公共云,例如,基于位置的服务(LBS),Short Message Service(SMS)、Multimedia Messaging Service(MMS)、Third Party Call 和 Converge Communication Services,支持个性化长尾应用程序。
  • 应用云计算的综合服务框架:用于化工和石油,支持在混合和私有云中的 Key Performance Indicator(KPI)流程和复合业务服务、价值链集成和企业 SaaS。
  • 应用云计算的保健解决方案:用于混合和私有云中基于的电子保健记录的应用程序。
  • 应用云计算的金融市场数据解决方案:用于混合云。
从业务角度,在公共云中的通用 PaaS 解决方案演化了以下场景:
  • 包含在厂商拥有的环境中的所有平台和应用程序。
  • 应用程序很大程度上是由正式编程模型中的草稿开发而来。
  • 由厂商提供的服务(例如,数据库和 web 应用程序服务器)是通用且稳定的。
  • 设计整体云服务环境时,业务模型角色从开始就很稳定。
  • 在平台中没有特定于行业的服务或者应用程序,因此平台非常易于设计和管理。
当 PaaS 模型移动到特定于行业环境中的企业时,会遇到更多的复杂性和需求。这一 PaaS 解决方案的常见挑战包括:
  • 私人或者混合云模式:这些解决方案往往寄宿在由多个分支或者组织单元共享的企业私有云中;或者在局部 IT 系统外包或者复杂供应链的案例中寄宿在混合云中。
  • 开放性:与当前内部或外部系统的集成。
  • 特定于行业的 IT 标准、应用程序和服务。
  • 业务模型和涉及角色的不确定性:有多种用户行为模型和系统使用模式的特定于行业的用户组,例如,工作量曲线、资源的任务需求类型和系统功能。
  • 建立解决方案的时间:很少有企业有足够的时间从草稿构建全新的 IT 基础设施,这牵涉到云环境的快速设置,替换旧的系统,与当前系统集成获得业务连续性。因此部署和管理的时间成为了导致考虑中的 PaaS 解决方案犹豫的关键因素。
  • 各种应用程序和用户类型:一个完整的行业解决方案包括跨由不同用户组(独立用户或者组织用户)开发和拥有的多业务线的应用程序。
  • 大多数的企业用户都并非 IT 专业人士,他们对使用复杂编程模型,例如 Java,Web 2.0 和 web 服务来开发、部署和管理应用程序和系统感到很恐惧。
  • 特殊业务需求由业务相关人士和客户推动,例如,更短的面市竞争时间,通过对流程或者业务逻辑的快速修改实现对业务灵活性的支持,以及企业系统的快速扩展。
测试和开发云也可以是 PaaS 框架的一部分,但是总的来说,这样的解决方案无需涉及行业内容。
从技术的角度,BPM,面向服务架构(SOA)和云计算可以联合在一起,在 PaaS 模型中提供 BPM 功能。使用云计算的 BPM 是交付过程和相关时间、人工任务或者数据库访问的方法。
行业解决方案的架构和其中的 PaaS 使用根据企业或者特定于解决方案的应用程序场景、业务模型和企业架构不同而不同。行业解决方案的集成模式也有相应变化。这些模式总结如下,在业务流程为中心的 PaaS 框架架构中进行考虑。
  • 行业解决方案中的 PaaS:这个模式在使用嵌入式 PaaS 的行业解决方案中导入;换句话说,PaaS 成为了行业解决方案的一部分,例如,化工和石油行业应用云计算的综合信息框架。在这一模式下,只有部分组件和功能作为 PaaS 服务输出,而行业解决方案的剩余部分并不寄宿在云中。
  • 行业解决方案上的 PaaS:这个模式服务于那些倾向于在其行业解决方案边界上的 PaaS 中支持增值服务的行业。整个系统可以在没有 PaaS 的情况下运作,它的核心功能和基础设施能够在非云环境中维护。支持 PaaS 的增值部分是未来业务增长点。此处的所有图示说明例子都是应用云计算的自助电信服务交付平台,帮助用户快速地从草稿中构建利用电信服务的增值应用程序。
  • 行业解决方案的 PaaS:在这个模式中,PaaS 和行业解决方案绑定在同一个云环境中。这个解决方案单纯是特定于行业的 PaaS。其典型例子就是应用云计算的金融市场数据解决方案。解决方案的目的就是提供一个基于 PaaS 的自定义金融市场数据集线器。PaaS 将企业的整体业务模型作为特定于行业的生态系统中的独立节点进行支持。
图 3 描述了行业解决方案的业务流程为中心的 PaaS 框架架构,用于支持上述的三个集成模式。

图 3. 行业解决方案的业务流程为中心的 PaaS 框架架构
行业解决方案的业务流程为中心的 PaaS 框架架构 
如图 3 所示,拟定的 PaaS 框架包括以下核心组件:
  • 核心虚拟镜像,自动作为可部署的运行时平台在云设施中供使用。这些镜像可以作为运行时业务流程的基础中间件进行实例化,例如,进程服务器、事件服务器、或者规则服务器。根据框架的实现模式,部署的运行时平台可能是整个或者部分行业解决方案;或者它可以和解决方案进行交互。
  • 备用编程模型,带有支持形成无代码开发人员工作区的开发工具。框架的内置工作区功能包括用于编辑业务流程、混合用户界面、业务事件和业务规则。
  • 用于管理三种关注中服务的自助服务管理门户:特定于行业服务、PaaS 生成服务、以及外部服务。
  • 所有 BPM 相关工件的多组织定义和强制的 BPM 多组织管理。
还有各种从 PaaS 框架输出的扩展点:
  • 自制虚拟镜像的扩展点,用于能够简易插入到框架虚拟镜像库中的特殊行业解决方案需求。
  • 自定义备用开发工具的扩展点,它不在框架内置功能之中,但是为个体解决方案开发所需。无代码开发人员工作区容易配置扩展工具。
  • 特定于行业的服务注册的扩展点,用于迎合不同行业和第三方调用的外部服务。
在构建云基础设施的过程中,其他考虑包括基础设施资源管理和功能规划。PaaS 框架中管理的资源以虚拟机和相关资源的形式提供。资源的管理等同于虚拟资源的管理。
在行业解决方案中,不同服务提供商的角色需要不同的功能、质量、或者资源范围。所有这些都能够通过调整云设施上的虚拟资源轻松获得。更进一步说,某些行业服务在业务增长过程中会增加很多需求来提高服务质量。内置在虚拟模板的框架提供拓扑,例如,正常的和更强大的系统吞吐量的独立应用程序服务器和集群。业务用户只需在服务管理门户中指定服务质量选项。对应的虚拟系统资源能够自动地联合,满足服务质量需求。
更进一步来说,为了实现资源管理和扩展,功能规划可以用于适应不同的用户角色。行业服务提供商和业务合伙人可以定义资源约束,用于初始资源分配,决定未来潜在增长的上限。他们还可以定义政策、描述资源扩展和恢复的条件。比如,当被某些用户使用的虚拟资源达到预定义的阈值时,云设施就通过分配更多的内存和磁盘空间,或者在集群中添加更多节点来平衡负载,从而扩展虚拟机资源。相反的,当虚拟系统的使用在某段时间内低于预定义的阈值,空闲的节点就被删除、或者内存就被收回。
云计算在云计算环境中将行业解决方案系统和设备连接在一起。特别介绍了 PaaS 框架,同时您了解了在行业解决方案中使用云计算的需求,架构模式和实现技术。根据框架,该系列之后的两篇文章将会讨论如何将云计算功能应用到化工、石油和电信领域。

Java PaaS


PaaS 是一种云服务类型,其中供应商不但提供按需硬件和操作系统服务,而且还提供应用程序平台和解决方案堆栈。PaaS 服务可将与应用程序部署关联的大多数 IT 管理方面自动化,包括资源配置、分段和测试、负载平衡、数据库访问以及访问平台库。PaaS 的关键功能是多组织体系结构:即多个不相关的应用程序可运行在相同的硬件和软件基础设施上,从而节约成本以及更有效地利用计算资源。开发人员只需关注应用程序本身,而不需要关注部署和 IT 问题。
Java 开发人员能够很好地了解并利用 PaaS 的开发模型。毕竟,在早期服务器端 Java 中,PaaS 的概念就已经深深地植入了。当时,IT 组织出售使用应用程序服务器作为 “容器” 的远景,然后再将其放入应用程序存档文件中以便在共享资源环境中运行(请参考 PaaS 的前身 侧边栏)。这一远景与我们今天所看到的 PaaS 服务非常相似。
但是 Java 企业应用程序的早期 PaaS 远景没有成功。Java 应用程序服务器从来没有稳定到可以随意地部署和取消部署多个不相关的应用程序。存档结构最后将开销添加到 Java 应用程序开发周期中:鉴于 Rails 上的 PHP 和 Ruby,开发人员可以更改某行代码并重新加载浏览器以便查看不同,然而 Java 开发人员必须重新编译,重新包装并重新部署其应用程序,并经常重新启动应用程序服务器。

PaaS 的前身:自包含 Java EE 部署单元

当 Java servlet 技术出现时,将 Java web 应用程序与 CGI 或 PHP 应用程序中区分开来的关键功能之一就是 Java 应用程序应该自包含在 “编写一次,随处可用” 的 WAR 文件中。WAR 文件包括所有代码、配置、媒体以及其他应用程序需要的文件。在运行时,WAR 应用程序还应该是自包含的 — 即应用程序只可 “查看” 其自己的 WAR 文件内的类和资源,这是为了不干扰其他 WAR 文件的类和文件。后来扩展了应用程序存档格式以便包括其他类型的自包含、企业应用程序模块。那些自包含应用程序部署单元与 PaaS 简直就是天作之合。
事实证明,PaaS 远景仅随着远比 JVM 先进的新一代虚拟化技术而实现。随着 Google App Engine 的开创,新一代 Java PaaS 服务履行了 Java EE 的旧承诺。同时它们提供随您需求成长的按需支付的 IT 基础设施而无需您在昂贵的硬件和系统管理功能上投入太多。
在本文中,我将会研究三个主要的 Java 公开 PaaS 产品以便比较它们的方法、优点和缺点。这三种都提供同一套功能,包括:
  • 上传并部署应用程序 WAR
  • 版本控制已部署的应用程序
  • 测试并分段环境
  • 在线访问日志文件
  • 自动监控和使用报告
然而除了那些共同的功能以外就是一些重要的区别。鉴于我自己使用这些新兴技术的经验,我将为比较它们提供框架并讨论潜在的解决方法以便在您使用它们时帮助您避免问题。
Google App Engine (GAE) 是第一个被广泛采用 Java PaaS 平台。(Java 版本有时被称为 GAE/J,以便将其与基于 GAE Python 的 PaaS 产品中区分开来。)它也可能是市场上 “最纯净” 的 PaaS 产品 — 在这个意义上它几乎完全为开发人员抽象化了底层基础架构。
从 2009 年开始,GAE 就已经支持 Java 平台作为开发和部署环境。然而,GAE 的 Java 支持是有限的且不符合标准。由于它在其应用程序上强加诸多限制 — 它们中的许多都有充分的理由来维持可伸缩性 — GAE 不支持某些 Java 平台 API:最明显的是,文件写入 I/O(因为 GAE 不对应用程序提供文件系统访问)和许多网络 I/O API(因为 GAE 在源于应用程序的网络操作上施加了严格的限制)。要获得 GAE 所支持的 Java 平台 API 的完整列表,请参考 参考资料
通过支持其自己的有限网络 I/O API,GAE 限制了应用程序连接到其他服务的能力。GAE 名义上允许应用程序出站连接其他服务器。但为了在可控的系统中保持线程数,GAE 会强迫任何应用程序发起的连接在 5 到 10 秒后关闭。这使 GAE 成为不可靠混合类型应用程序平台。对于越来越多的使用第三方 web 服务 API 的应用程序来说,这就是 GAE 的主要限制。
此外,在您需要使用现有应用程序框架或将现有应用程序移动到 GAE 时,这些 API 限制构成了挑战。经过多年的演化,企业 Java 开发在很大程度上依赖于框架。虽然在 GAE 上一些流行的框架(如 Spring 和 Struts)都是开箱即用的,但是其他一些要么不工作要么需要对其源代码打补丁。因为您基本上是正在创建一个打破上游兼容性的分支,所以手动获取框架源代码以便使其在 GAE 上运行永远都不是一个好主意,且其可能将难于调试的错误引入框架。一个好的示例是 JavaServer Faces (JSF) web 框架:其需要源代码级获取以便在 GAE 环境中运行,即使如此在 JSF 顶端的许多 UI 库都兼容 GAE。(要获得一系列支持 GAE 的 Java 框架,请参考 参考资料。)
同样地,已经开发的大型企业应用程序可能使用 GAE 禁止的 API。将这些应用程序迁移到 GAE 可能是昂贵的,因为您不仅需要识别问题并创建解决方法,而且还要从头再为整个应用程序做质量保证。
如果不支持 Java 平台 API 的一部分,那么 GAE 将不能履行 Java 关于 “编写一次,随处可用” 的承诺。虽然这对于许多人来说并不是致命的弱点,但这是潜在用户需要意识到的。

云计算和 IBM 的 PaaS

在与 IBM WebSphere 的 CTO Jerry Cuomo 的 访谈 中了解 IBM 正在云中做什么。Cuomo 讨论了 IBM 关于专用和混合云计算的远景,详细讲述了 IBM 针对围绕 WebSphere、DB2 和 MQ 构建的 PaaS 产品 的计划,以及对云中标准化的需要。
GAE 承诺并传递可伸缩性,但不一定是原始性能。Web 应用程序的原始性能是通过对 web 请求的响应时间来衡量的。可伸缩性是指无论多少用户正在访问系统,平台都能保持一致响应时间的能力。例如,3 秒钟对 100 个并发用户作出响应的可伸缩的系统应该也可以 3 秒钟对 100 万并发用户作出响应。
GAE 提供出色的可伸缩性就像通过一致响应时间所衡量的那样。但是其原始性能通常是缓慢的。以我的经验,GAE 常常用 1 到 3 秒对数据库相关请求作出响应。
该特点对应用程序开发人员有明显影响。对于在大部分时间里空闲的 web 应用程序来说(即大多数小型 web 应用程序),在 GAE 基础设施上进行部署不会产生性能优势,即使是在低端虚拟专用服务器上。在您需要扩展应用程序远远超越低端服务器硬件容量时,真正的性能优势才会到来。
低流量网站的另一个问题是 GAE 将无效(inactive) JVM 换出(swap)内存,以便在系统中优化高流量 web 应用程序。如果您的 JVM 被换出内存,那么在下一次请求到来时,GAE 必须花费更多的时间来启动整个应用程序。对于低流量 web 应用程序来说,这可能导致缓慢的性能(第一次请求的等待时间超过 5 秒钟)。为了获得更一致的性能,GAE 为开发人员提供付费的选择让无效的 JVM 保存在内存中。一个建议:在 GAE 内建立 cron 作业以便每 2 到 3 分钟加载一次您自己的网站,从而保持 JVM 活跃。
GAE 的关键创新就是使用了真正可伸缩的数据存储:即 Google BigTable。大多数 web 应用程序都使用关系数据库作为后端数据。但是关系数据库难于扩展是出了名的。要解决此问题,Google 的研究人员开发了一个名为 BigTable 的替代数据存储解决方案,它是 NoSQL 数据库世界中的数据存储解决方案之一。
正如在关系数据库中那样,BigTable 中的数据可以组成具有行和列的表,且每一行都有一个惟一的索引 ID。不像关系数据库那样,BigTable 表没有固定的模式且通常是非规范化(denormalized)的。表中的每一行可能都有不同的列。相对于通过键列跨不同的表链接不同行,最佳实践将是在一行中有许多列。对于数模型的设计来说这已经产生了重大的影响。为了便于检索应用程序,开发人员被鼓励将冗余信息放入每一行,而不是设计规范化的关系模型。想一想 web 服务器的访问日志,其中每一行都重复了 IP 地址和浏览器代理,这虽然占用了空间但却简化了批量处理。
BigTable 的优点是可伸缩性。Google 工程师宣称 BigTable 中数据查询的响应时间只根据结果数据集的大小确定。无论查询是针对 1000 行的表或者 1 亿行的表,您都可以获得同样的性能,只要结果被限制为 1000 行。就其本身而言,GAE 将每次查询的返回数据集限定为 1000 行。
调整到 NoSQL 范例,虽然它可能对来自 SQL 背景的开发人员来说具有挑战性,但是对于正在面临 “大数据” 挑战的越来越多的 IT 组织来说,这是一个重要的技能。我发现 GAE 是 Java 开发人员开始了解 NoSQL 的最佳和最容易的地方之一。
然而,虽然 BigTable 对于 GAE 的强大可伸缩性来说是关键,但是其目前的执行留下了很多有待 Java 开发人员改进的地方。BigTable 的具体缺陷(以及一些潜在的解决方法)包括:
  • 微弱的数据查询支持:以 Google 查询语言(Google Query Language,GQL)编写的查询用于从 BigTable 检索数据。GAE 需要将查询中涉及到的所有数据列编入索引,且该索引不包含 BLOB 或文本列。这很好,除了 GAE 只允许每个表 100 个索引以外。虽然这对于标准 SQL 数据库来说可能足够了,但是像 BigTable 那样的非规范化 NoSQL 数据库可能潜在具有数以千计的列,因此 100 个索引可能会限制很多应用程序。更糟的是,GAE 没有提供简单的方式来删除不再使用的索引。
    决定要创建哪个索引对于 GAE 开发人员来说是一个很大的负担。如果查询使用没有进行索引的列的组合,那么当执行查询时,GAE 将只在运行时出现一个异常。虽然由于您在本地计算机上测试应用程序而导致 SDK 可为自动生成索引配置文件提供工具,但是如果您没有手动地详尽测试所有执行路径,那么您可能会一直错过索引。将自动生成的索引合并到已经部署的应用程序中也是一个潜在的容易出错的过程,该过程直到 web 应用程序用户点击错误配置的索引前都没有错误提示。
    最后,这有点让人震惊 — 考虑到 BigTable 是 Google 产品 — 在数据库中不支持免费的文本搜索。您可以将搜索引擎实现(如 Apache Lucene)嵌入您的应用程序,以便索引并搜索文本列(请参考 参考资料)。但是对于那些标准 SQL LIKE 语句就足以进行简单文本搜索的小型网站来说,这就是一个大麻烦。
  • 导入和导出数据的难题:BigTable 的另一个主要问题是无法导入和导出数据。因为没有直接访问 BigTable 的标准 API,所以在您自己的应用程序内,您必须将数据导入和数据导出逻辑写入 servlet,并使用您自己的 web 界面来导入或导出数据。
    因为 GAE 会在 30 秒以后终止任何 web 请求线程,所以不可能通过持久连接将大量数据上传到 BigTable。常用的解决方法就是将数据导入分成许多块,且每一块都要求上传并处理的时间少于 30 秒。然后,您可以使用自动 HTTP 设备,如 JMeter 或 Grinder,以便一个接一个地运行这些任务直到所有数据都被导入。不用说,这将是一个繁琐的过程。
    从 BigTable 导出数据更成问题。因为 API 将每个数据查询限制为 1000 条结果,所以导出数据必须在比 30 秒处理超时限制所允许的还要小的块中进行管理。
认识到 BigTable 对于大多数开发人员的局限性,GAE 就可以通过其付费业务产品对已托管的 MySQL 服务提供访问。
GAE 提供与其他 Google 服务的出色集成。值得注意的是,应用程序可与 Google Accounts 集成在一起,以便用户使用 Google 用户名和密码登录应用程序。鉴于构建用户管理系统是每个网站都必须做的重复工作,所以这可能潜在地为您节约时间。然而,缺点是并非所有的用户都有 Google 帐户,且将您的网站与 Google 帐户捆绑使得更难于移动到另一个 PaaS 供应商。
GAE 应用程序也可使用简单 API 以便通过 GMail 服务器发送电子邮件。相对于不安全的 SMTP 服务器,不太可能通过收件人 ISP 阻塞 GMail 服务器。
如果您在 Google Apps 上托管您的域,那么通过将 Google Apps 帐户与 GAE 帐户链接,您还可以配置通过任何在您控制下的子域访问的应用程序。例如,如果通过 Google Apps 托管 mydomain.com,那么您就可以从 www.mydomain.com 而不是 mydomain.appspot.com 访问应用程序。
总体而言,GAE 提供了精心设计并可伸缩的 PaaS。对于小型网站来说,其慷慨的免费配额也是很吸引人的。然而,缺乏对完整 Java 平台的支持是一个潜在的致命伤,且 GAE 中的一些组件尚处于试验阶段而不是已经生产就绪。
Amazon Elastic Beanstalk(来自 Amazon Web Services 的相对新的产品)提供了基于 Amazon Elastic Computing Cloud (EC2) 基础设施的受管理的 Apache Tomcat 运行时环境。EC2 是 Infrastructure-as-a-Service (IaaS) 产品,因此它可以提供比 GAE 更多的灵活性。但是作为权衡,它也需要更多的开发人员努力对应用程序进行管理和扩展。
Beanstalk 环境支持运行在 EC2 虚拟服务器上的完全 Tomcat 服务器。它是一个可访问基础文件系统的纯 Java 环境。因为 Tomcat 的声望,所以几乎所有企业 Java 框架都支持 Tomcat 部署。这些框架可从 Tomcat WAR 文件启动或引导,并为您提供广泛的框架和库选择。
普通 Tomcat 运行时对线程以及文件或网络 I/O 没有限制。只要需要网络 I/O 线程就可以一直保持打开。您只受限于基础虚拟机的容量。
通过自动启动新的 EC2 实例并将您的 WAR 文件部署到新的实例,Beanstalk 可以扩展您的应用程序。所有 Beanstalk EC2 实例都正运行在负载平衡器后面。您可以使用基于 web 的管理控制台来监控可用于每一个 EC2 实例上的资源,并设置规则,从而在现有服务器负载超过预设限制时自动启动负载平衡器后面的新服务器实例。
负载平衡 web 集群中常见的问题是如何处理 HTTP 会话。每一个 Tomcat 服务器节点都可以为其客户端创建并管理会话对象。如果跨多个服务器节点负载平衡 web 请求,那么您需要确保服务于请求的服务器节点都有正确的会话对象。实现其的简单办法是在负载平衡器中启用 “粘性会话(sticky session)”,这需要负载平衡器记住通过其后面的每一个服务器保持的会话 cookies,并将请求转发到基于传入 cookies 的正确服务器。可在 Beanstalk 负载平衡器管理控制台中打开 “粘性会话”。更有效的和防止故障的解决方案包括跨服务器节点建立共享的内存或将会话对象简单保存到中央数据库。因为每一个服务器节点都有相同的对话状态信息,所以这些选项允许负载平衡器将请求转发到随机或最繁忙的服务器节点。但是所有这些选项都需要来自应用程序开发人员的努力。不同于 GAE,其自动将会话数据保存到 BigTable,Beanstalk 需要您做所有的工作。
也许 Beanstalk 最大的缺陷之一就是其价格,尤其是对于可以在其他地方获得免费托管的小型网络。虽然 Amazon EC2 有一个 “一年免费” 计划提供给新注册的用户,但是 Beanstalk 的标准价格即使对于单节点安装来说也要接近每个月 40 美元。这对于需要时在短短几分钟内就可以自动向外扩展的集群就绪的基础设施来说是便宜的价格,但是如果您的应用程序除了偶然的流量激增以外大都处于闲置,那么相对于 GAE 来说就比较贵了。
Elastic Beanstalk 平台的优点之一就是在选择数据库技术上的灵活性。其提供以下几个选项:
  • 关系数据库:通过 Amazon 自己的关系数据库服务(Relational Database Service,RDS),您可以部署各种关系数据库。这些数据库服务器都通过 Amazon 管理并监控,这很容易将数据导入并从中将其导出。在您的应用程序内,所有您需要做的就是将数据源指向 RDS 服务器。但是请注意每一个 RDS 实例都是另一个运行数据库的专用服务器实例 — 数据库实例比具有可比性的 EC2 实例贵 30%。成本可以积累,且许多应用程序不需要专用数据库服务器。
  • NoSQL:与 RDS 服务器同样的问题就是它是一个难于扩展的关系数据库。如果您喜欢类似于 Google BigTable 的 NoSQL 方法,那么它也可与 Amazon SimpleDB 一起使用。SimpleDB 的 Java API 可让您的应用程序轻松访问数据。
  • 您自己的数据库服务器:因为 EC2 提供对原始虚拟服务器的访问,所以您可以在独立的 EC2 实例上建立自己的数据库或 NoSQL 数据源(如 Apache Cassandra)并只将 Beanstalk 应用程序指向您自己的数据库服务器。
数据库选择中的灵活性(尤其是使用 Amazon 托管关系数据库的能力)很可能吸引企业开发人员。
除了 Amazon RDS 和 SimpleDB,Beanstalk 服务器可访问其他 Amazon 服务,如 Simple Queue Service、S3 Storage、Simple Email Service (SES) 以及付费 API。SES 特别有趣并提供了与 GAE 中的 GMail API 的很好比较点。
SES 有一个简单的 API,其允许您使用 Amazon 的 SMTP 服务器发送电子邮件。相对于在您自己的 EC2 实例上建立不安全的 SMTP 服务器来说,使用 Amazon SMTP 服务器的优点就是,Amazon 服务器不太可能被主要 ISP 的垃圾邮件过滤器封锁。为此,SES 提供了一系列丰富的工具以便控制高速增长的电子邮件数量并接收来自 ISP 垃圾邮件过滤器的反馈。所有这些功能都被提供给您的 Beanstalk 应用程序,以便您可以监控您的活动,并为了更有效的交付而优化您的电子邮件内容。
总体而言,Amazon Elastic Beanstalk 大大简化了 Tomcat 应用程序的部署和扩展。然而,它一直提供基本 EC2 基础设施的灵活性,这使其非常适合企业应用程序。然而,对于低流量网站或业余开发人员来说其成本是很高的。
CloudBees 是 Java PaaS 场景的新参与者。虽然它可能只是一个开始,但是其后面的开发人员都是企业 Java 的老手。(它由 JBoss 前 CTO Sacha Labourey 启动,并聘用了开源 Java 重量级人物以 JBoss 闻名的 Adrian Brock 和以 Hudson 闻名的 Kohsuke Kawaguchi。)其 PaaS 技术是从 Stax Networks 收购的,该公司已经对企业客户提供托管 Java 应用程序服务超过 10 年。CloudBees RUN@Cloud 服务基于健全的 Stax 平台,并通过自服务 web 门户提供给单个开发人员。
与大公司相比,RUN@Cloud 旨在受管理的可伸缩性(如在 GAE 中)和灵活性(如在 Amazon 的 PaaS 服务中)之间发现正确的平衡,同时通过该平台添加自己的端对端开发生命周期支持。
RUN@Cloud 服务目前基于 EC2 基础设施,可以将其看做自动化程度更高的 Beanstalk + RDS 版本。与 Beanstalk 一样,RUN@Cloud 也为每一个 web 应用程序提供在 EC2 虚拟服务器上运行的专用 Tomcat 实例。其提供纯 Java 环境,没有对文件系统访问、网络 I/O 以及线程的人为限制。
作为小型独立公司,RUN@Cloud 的优点之一就是无需与 Amazon 捆绑在一起。在不久的将来,其计划提供其他基础设施供应商以便补充 EC2。
也类似于 Beanstalk,RUN@Cloud 提供了可扩展的基础设施,将按需启动负载平衡器和服务器实例以满足流量激增。但是 RUN@Cloud 比 Beanstalk 提供了更多的自动化。例如,RUN@Cloud 已经配置了其 Tomcat 服务器,以便将会话保存到其管理下的数据库中,而不是使用 “粘性会话”。此托管会话对象数据库对开发人员透明 — 这很像 GAE。
因为 RUN@Cloud 可以使用共享的负载平衡器来管理在单个 EC2 实例上运行的多个 Tomcat 服务器,所以其无需每个 Tomcat 实例都有一个 EC2 实例。因此它可以用比 Beanstalk 低的多的成本运行低流量网站。实际上,RUN@Cloud 有一个对于低流量应用程序或业余开发人员以及学生来说非常好的免费使用层。
然而,也像 GAE 那样,如果应用程序长时间处于不活动状态,那么 RUN@Cloud 可以将您的 JVM 交换出内存。这可能会导致对第一个请求的缓慢响应,就像应用程序在 “预热”。
RUN@Cloud 服务本身支持与 Tomcat 服务并列的托管 MySQL 服务。您可以通过基于 web 的管理控制台创建并管理数据库。您可以通过 MySQL 客户端直接连接到数据库服务器以便管理您的数据。
不同于 Amazon RDS,RUN@Cloud 服务跨多个应用程序部署共享数据库服务器。每一个应用程序都有自己的数据库但不一定是专用的服务器。PaaS 平台自动部署数据库以便最大化利用数据库服务器。与 RDS 相比,共享数据库服务器可能更有效地利用虚拟服务器,从而降低成本。
RUN@Cloud 对通过基本基础设施供应商支持的平台 API 和服务提供访问。特别是对于在 Amazon EC2 上部署的 RUN@Cloud 应用程序来说,这些应用程序可以从您的应用程序内完全享有所有的 Amazon web 服务 API — 如 S3、SQS 以及 SES。
但是 RUN@Cloud 真正的亮点是其紧密地与 DEV@Cloud(基于云的 Continuous Integration 平台)集成在一起。DEV@Cloud 提供源代码、版本控制系统(Subversion 和 GIT);一个生成库 (Apache Maven);以及生成服务器(jenkins,以前称为 Hudson)。其允许您在云中而不是在您自己的计算机上运行应用程序的自动化生成和测试。这种类型的集中生成系统被灵敏软件团队广泛采用,以便确保总是测试库中的源代码且该代码处于可释放状态。
通过将 RUN@Cloud 与 DEV@Cloud 集成在一起,CloudBees 提供了一系列引人注目的 PaaS 服务,这些服务可以管理企业 Java web 应用程序的整个开发、测试以及部署周期。您只需在您自己的计算机上编辑源代码,所有一切在云中都可以用最小的 IT 开销委派给自动化系统。
CloudBees RUN@Cloud 是 Amazon Elastic Beanstalk 和 RDS 的低成本(甚至免费的)替代品。它集成了连续构建系统,使其可以引起那些希望在开发过程中自动化所有 IT 功能的敏捷软件开发团队的注意。
在经过了多年的失望之后,Java PaaS 服务最终达到了黄金时代。在本文中回顾并比较的三种服务中的每一种都有其独特的方法,因此具有独特的优点和缺点。
如果您正在开发新的应用程序并可以忍受 GAE 的限制,那么 GAE 就是出色且免费的选择。RUN@Cloud 和 Elastic Beanstalk 都是应用程序级的可内部交换的运行时。标准的 Java EE 应用程序可以在任何平台上运行而不需要进行修改。RUN@Cloud 起步更便宜且更易于配置,其为连续集成的开发过程提供出色的支持。我建议用免费的 RUN@Cloud 起步,因为如果您不愿意使用 CloudBees 的服务,您可以轻松地转换到 Elastic Beanstalk。

PaaS (2)

http://www.ibm.com/developerworks/cn/cloud/library/cl-cloudservices2paas/

平台即服务 (PaaS) 常常是最容易让人迷惑的云计算类别,因为很难识别它,常常把它误认为是基础设施即服务 (IaaS) 或软件即服务 (SaaS)。在这个分三部分的文章系列的第二部分中,了解 PaaS 的特点以及如何在企业中应用它。

常用缩略词

  • API: 应用程序编程接口
  • HTTPS: 安全超文本传输协议
  • IDE: 集成开发环境
  • ROI: 投资回报
  • SQL: 结构化查询语言
  • SSL: 安全套接字层
  • UI: 用户界面
PaaS 的独特特点是,它让开发人员可以在驻留的基础设施上构建并部署 web 应用程序。换句话说,PaaS 让您能够使用云基础设施似乎无穷的计算资源。
当然,计算资源的数量看起来无穷只是幻想,限制取决于基础设施的规模。但是,正如在本系列的第一篇中了解到的,Google 基础设施大约包含超过一百万台基于 x86 的计算机。另外,因为用于 PaaS 的基础设施是弹性的(第 1 部分中讨论过这个概念),在需要时云可以扩展以提供更多的计算资源,所以无穷的资源并不完全是想像。
开发人员常常误以为云计算只适用于网络管理员。但是,这个错误的观念忽视了云计算可能给开发和质量保证团队带来的许多好处。
在软件开发过程中,一些东西常常会出问题。以我的经验,设置服务器环境以驻留开发团队要构建的 Web 应用程序可能会带来许多争吵。即使在最大的企业中,通常一位网络管理员要负责为几个开发团队服务。在不使用 PaaS 的情况下,设置开发或测试环境通常需要完成以下任务:
  • 获取并部署服务器。
  • 安装操作系统、运行时环境、源代码控制存储库和必需的所有其他中间件。
  • 配置操作系统、运行时环境、存储库和其他中间件。
  • 转移或复制现有的代码。
  • 测试并运行代码以确保一切正常。
在很多情况下,管理员已经非常忙了,所以让他们抽出时间部署新环境会很困难。对于客户机和服务器端的 web 应用程序开发人员来说,另一个主要问题是在本地复制运行时环境以便执行测试。
现在,想像一下您是使用 PaaS 的开发团队的成员。在这种情况下,您会有一个虚拟机 (VM),其中包含完整的服务器环境,可以把它放在 USB 闪存驱动器中带在身边。
我希望您把注意力转到第 1 部分中给出的概念交叉矩阵上,使用它作为参考分析 PaaS。表 1 再次给出这个矩阵。

表 1. 三类云计算的概念交叉矩阵 
范型转变特征关键词汇优点缺点和风险不应该使用的场合
IaaS基础设施即资产常常独立于平台;分担基础设施成本,因此会降低成本;服务水平协议 (SLA);按使用量付费;自我伸缩网格计算,效用计算,计算实例,系统管理程序,暴雨 (cloudbursting),多租用者计算,资源池避免在硬件和人力资源方面花费资产费用;降低 ROI 风险;降低进入门槛;简化和自动化伸缩过程企业效率和生产力很大程度上取决于厂商的能力;可能会增加长期成本;集中化需要新的/不同的安全措施当资产预算大于运营预算时
PaaS许可证购买消费云基础设施;能够满足敏捷的项目管理方法解决方案堆简化的版本部署集中化需要新的/不同的安全措施
SaaS软件即资产(企业和消费者)SLA;由 “瘦客户机” 应用程序提供 UI;云组件;通过 API 进行通信;无状态;松散耦合;模块化;语义性互操作能力瘦客户机;客户机-服务器应用程序避免在软件和开发资源方面花费资产费用;降低 ROI 风险;简化和迭代式的更新数据的集中化需要新的/不同的安全措施
了解 PaaS 的最好方法可能是把它分解为主要组件:平台和服务。现在,考虑提供的服务,这称为解决方案堆。也就是说,PaaS 的两个主要成分是计算平台和解决方案堆。
为了说明这两个 “成分”,我们进一步研究一下它们的定义。按照最简单的形式,计算平台 是指一个可以一致地启动软件的地方(只要代码满足平台的标准)。平台的常见示例包括 Windows™、Apple Mac OS X 和 Linux® 操作系统;用于移动计算的 Google Android、Windows Mobile® 和 Apple iOS;以及作为软件框架的 Adobe® AIR™ 和 Microsoft® .NET Framework。要记住的重点是,计算平台不是指软件本身,而是指构建并运行软件的平台。图 1 提供一张示意图以帮助理解这种关系。

图 1. 云计算分类与 PaaS 元素之间关系的图形化解释 
云计算分类与 PaaS 元素之间关系的示意图 
既然理解了计算平台的概念,现在就来看看什么是解决方案堆解决方案堆由应用程序组成,这些应用程序有助于开发过程和应用程序部署。这些应用程序是指操作系统、运行时环境、源代码控制存储库和必需的所有其他中间件。
解决方案堆也反映不同 PaaS 公司的差异,在决定采用 PaaS 之前,需要深入考察各个提供商提供的解决方案堆。
在与某家 PaaS 提供商签约之前,您应该问几个基本问题:
  • 它支持哪些框架和语言?理想情况下,PaaS 应该支持基于此平台选用的语言的任何框架。
  • 可以创建多少个应用程序?大多数 PaaS 提供商会根据您签订的计划或服务包限制可以构建的应用程序数量。要确保提供商提供的计划或服务包能够满足您的需要。
  • 允许哪些内容类型?支持 PaaS 的基础设施通常涉及多租用者计算 的概念,也就是说许多 “租用者” 分享单一服务器上的 “空间”,这些空间由系统管理程序 管理的 VM 实例分隔。PaaS 提供商可能会对要驻留的应用程序和内容的类型加以限制。
  • 支持哪些数据库类型?如果您的数据要随应用程序转移,这个问题就是非常重要的。必须确保提供商提供的数据库与您想要用来导入数据的格式兼容。
  • 它是否支持 SSL (HTTPS)?这个问题对于确保安全性非常重要。如果您打算通过应用程序处理事务,但是发现不支持 SSL,您就遇到大麻烦了。
既然已经了解了 PaaS 的基本知识,现在研究一下在比较 PaaS 提供商时应该考虑的特性:
  • 应用程序开发框架。健壮的应用程序开发框架应该基于广泛使用的技术。理想情况下,您应该避免厂商锁定。使用 Java™ 技术等开放源码框架通常比较好。
  • 容易使用。PaaS 应该附带容易使用的 WYSIWYG 工具,应该有预先构建的部件、现成的 UI 组件、拖放工具和对某些标准 IDE 的支持。这应该会促进快速的迭代式应用程序开发。
  • 业务流程建模 (BPM) 工具。需要使用强大的 BPM 框架对业务流程进行建模,围绕业务流程构建应用程序。
  • 可用性。应该能够在任何时候从任何地方访问并使用所选的平台。
  • 可伸缩性。平台应该足够智能化,能够利用底层基础设施的弹性计算能力处理应用程序将承受的负载。
  • 安全性。为了有效地防御安全威胁,平台应该解决跨站点脚本、SQL 注入、拒绝服务和通信流加密等问题,并让安全措施完全融入应用程序开发中。另外,平台必须支持单点登录功能,让您能够把它与现有的内部应用程序或其他云应用程序集成起来。
  • 包容性。平台应该能够包容、嵌入和集成在相同平台或其他平台上构建的其他应用程序。
  • 可移植性。平台应该不限制底层基础设施类型,允许公司把应用程序从一个 IaaS 转移到另一个。
  • 移植工具。为了轻松、快速地把数据从陈旧的内部应用程序迁移到基于新平台的应用程序中,平台的工具包中必须有批量导入转换工具。
  • API。为了执行各种任务,比如用户身份验证、存储和获取文件(例如 Web 应用程序文件和资产)甚至直接调用数据库,平台应该有文档齐全的 API。这让企业能够灵活地创建和定制软件应用程序以与平台交互,从而满足公司的特殊需要。
厂商锁定 (Vendor lock-in) 意味着消费者依赖于某一厂商,除非花费巨大的转换成本,否则无法使用另一厂商的产品。当采用像云计算这样的正在流行起来的新技术时,会增加出现厂商锁定局面的机会。早期的使用者必须很清楚他们将处于什么境地,然后才能够签署长期的 IaaS 和 PaaS 协议。
避免厂商锁定的方法之一是通过 API 和平台技术的标准化。Simple Cloud(见 参考资料)等组织已经开始与参与这个开放源码项目的各种规模的厂商协作,力求让云中的 PHP 保持一致。为了创建 Simple Cloud,Zend Technologies、Microsoft、IBM 和 Rackspace 正在共同努力,其目标是跨不同的平台提供一个抽象层。
Simple Cloud API 的目标是为文件存储、文档存储和简单队列服务创建通用的接口。这让开发人员能够编写出可跨主要云平台移植的应用程序。参与云计算标准化的厂商应该得到赞扬,应该鼓励他们继续努力。在选择为您的公司提供 PaaS 服务的厂商时,我强烈建议优先考虑支持标准化的提供商。标准化会让 IT 部门的工作更轻松,更重要的是,这会节省公司的资金。
为了避免 PaaS 市场上出现厂商锁定,需要支持相同底层 API 的服务提供商。答案很简单:坚持采用专有技术的服务提供商必须同意支持 Simple Cloud 等标准化项目。

PaaS (1)


云计算的三种服务模式是SaaS(Software as a Service),PaaS(Platform as a service)和IaaS(Infrastructure as a service)。相对于SaaS和IaaS,PaaS最难被理解,人们对PaaS的解读往往也不尽相同。这是我继“云计算与SOA之我见”之后的又一篇文章,希望通过这篇文章来分享我对PaaS的理解,并阐述为什么PaaS在云计算中处于战略核心地位。

一、 PaaS是云环境下的应用基础设施

有些人认为PaaS的核心就是分布式技术,如分布式计算、分布式存储、分布式数据库等,目的是把多台计算机虚拟成一台性能极强的超级计算机。有些人认为PaaS是一种云服务,能提供由提供者托管于硬件基础设施上的软件和产品开发工具,是面向开发人员的,开发人员可直接在上面创建和运行新的应用程序。
持有上述第一种观点的人受互联网技术(如Google)的影响很深,我认为分布式技术(类Hadoop技术)仅是PaaS的enabling technology之一,并不是PaaS的全部。上述第二种观点把PaaS局限在APaaS(application platform as service,如GAE和Heroku)上,APaaS主要提供开发SDK和应用运行环境。完整的PaaS平台除了提供APaaS功能外,还应提供IPaaS(Integration platform as a service),IPaaS提供集成、编排和互操作的功能。

从传统角度来看,PaaS实际上就是云环境下的应用基础设施,也可理解成中间件即服务,如下图所示:

PaaS的功能

PaaS为部署和运行应用系统提供所需的基础设施资源应用基础设施,所以应用开发人员无需关心应用的底层硬件和应用基础设施,并且可以根据应用需求动态扩展应用系统所需的资源。完整的PaaS平台应提供如下功能:
  1. 应用运行环境
    • 分布式运行环境
    • 多种类型的数据存储
    • 动态资源伸缩
  2. 应用全生命周期支持
    • 提供开发SDK、IDE等加快应用的开发、测试和部署。
    • 公共服务:以API形式提供公共服务,如队列服务、存储服务和缓存服务等。
    • 监控、管理和计量:提供资源池、应用系统的管理和监控功能,精确计量。应用使用所消耗的计算资源。
  3. 集成、复合应用构建能力:
  4. 除了提供应用运行环境外,还需要提供连通性服务、整合服务、消息服务和流程服务等用于构建SOA架构风格的复合应用。
PaaS的全局功能视图如下:

多租户弹性是PaaS的核心特性

PaaS的特性有多租户、弹性(资源动态伸缩)、统一运维、自愈、细粒度资源计量、SLA保障等。这些特性基本也都是云计算的特性。多租户弹性是PaaS区别于传统应用平台的本质特性,其实现方式也是用来区别各类PaaS的最重要标志,因此我认为多租户弹性是PaaS的最核心特性。
多租户(Multi-tenancy)是指一个软件系统可以同时被多个实体所使用,每个实体之间是逻辑隔离、互不影响的。一个租户可以是一个应用,也可以是一个组织。弹性(Elasticity)是指一个软件系统可以根据自身需求动态的增加、释放其所使用的计算资源。
多租户弹性(Multi-tenancy elastic)是指租户或者租户的应用可以根据自身需求动态的增加、释放其所使用的计算资源。
技术上来说,多租户有如下几种实现方式:
  1. Shared-Nothing:为每一个租户或提供一套和On-premise一样的应用系统,包括应用、应用基础设施和基础设施。Shared-Nothing仅在商业模式上其实现了多租户。Shared-Nothing的好处是整个应用系统栈都不需要改变、隔离非常彻底,但是技术上没有实现资源弹性分配,资源不能共享。
  2. Shared-Hardware:共享物理机,虚拟机是弹性资源调度和隔离的最小单位,典型例子是Microsoft Azure。传统软件巨头如微软和IBM等拥有非常广的软件产品线,在On-premise时代占据主导地位后,他们在云时代的策略就是继续将on-premise软件stack装到虚拟机中并提供给用户。
  3. Shared-OS:共享操作系统,进程是弹性资源调度和隔离的最小单位。相比于Shared-Hardware,Shared-OS能实现更小粒度的资源共享,但是安全性方面会差些。
  4. Shared-Everything:基于元数据模型以共享一切资源,典型例子是force.com。Shared-Everything方式能够实现最高效的资源共享,但实现技术难度大,安全和可扩展性方面会面临很大的挑战。

二、 PaaS的战略核心地位

在云产业链中,如同传统中间件所起的作用一样,PaaS也将会是产业链的制高点。无论是在大型企业私有云中,还是在中小企业和ISV所关心的应用云中,PaaS都将起到核心的作用。

以PaaS为核心构建企业私有云

大型企业都有复杂的IT系统,甚至自己筹建了大型数据中心,其运行维护工作量非常大,同时资源的利用率又很低——据统计大部分企业数据中心的计算资源利用率都不超过30%。在这种情况下,企业迫切需要找到一种方法,整合全部IT资源,进行池化,并且以动态可调度的方式供应给业务部门。大型企业建设内部私有云有两种模式,一种是以IaaS为核心,另外一种是以PaaS为核心,如下图所示:
首先,企业会采用成熟的虚拟化技术首先实现基础设施的池化和自动化调度。当前,有大量电信运营商、制造企业和产业园区都在进行相关的试点。但是,私有云建设万不可局限于IaaS,因为IaaS只关注解决基础资源云化问题,解决的主要是IT问题。在IaaS的技术基础上进一步架构企业PaaS平台将能带来更多的业务价值。PaaS的核心价值是让应用及业务更敏捷、IT服务水平更高、并实现更高的资源利用率。
以PaaS为核心的私有云建设模式是在IaaS的资源池上进一步构建PaaS能力,提供内部云平台、外部SaaS运营平台和统一的开发、测试环境:
  1. 内部云平台:建立业务支撑平台
  2. 外部SaaS运营平台:向企业外部供应商或者客户提供SaaS应用
  3. 开发、测试环境:为开发人员提供统一的开发和测试环境平台
以某航空运输领域的集团为例。它正从单一的航空运输企业,转型为以航空旅游、现代物流、现代金融服务三大链条为支柱,涵盖“吃、住、行、游、购、娱”六大产业要素的现代服务业综合运营商,其产业覆盖航空运输、旅游服务、现代物流、金融服务、商贸零售、房地产开发与管理、机场管理。对于这么一个大型企业集团,当前信息化的挑战不仅在于如何高效整合、集中管控整个集团的IT资源,更重要的在于如何快速地、更好的满足客户的需求,如何更高效地整合外部供应商,使IT真正成为其创新的驱动力。云计算为该集团带来契机,以PaaS为核心构建其对内、对外云平台必将成为其最佳选择。

以PaaS为核心构建和运营下一代SaaS应用

对于中小企业来说,大部分缺乏专业的IT团队,并且难以承受高额的前期投入,他们往往很难通过自建IT的思路来实现信息化,所以SaaS是中小企业的天然选择。然而,SaaS这么多年来在国内的发展状况一直没有达到各方的预期。抛开安全问题不讲,最主要的其他两个原因是传统SaaS应用难以进行二次开发以满足企业个性需求,并缺少能够提供一站式的SaaS应用服务的运营商。
无论是Salesforce.com,还是国内的SaaS供应商都意识到SaaS的未来在于PaaS,需要以PaaS为核心来构建和运营新一代的SaaS应用。
在云计算时代,中小企业市场的机会比以往任何时候到大。在这个以PaaS为核心的生态链中,每个参与者都得到了价值的提升。
  1. 中小企业:一站式的SaaS应用服务;可定制的SaaS应用。
  2. SaaS运营商:基于统一PaaS平台提供一站式的SaaS应用服务;实现规模效应。
  3. 应用开发商:基于PaaS平台,将已开发的成熟应用SaaS化、开发新的SaaS应用;为中小企业提供二次开发服务;开发效率得到提升。
  4. 基础设施提供商:专注于基础设施运维;实现资源更高效利用和回报。

三、 PaaS是未来软件开发的“银弹”之一

没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。即便没有银弹,人们仍会在不同的方向为提高软件交付的效率和质量做出不懈努力。PaaS毫无疑问是其中的方向之一,PaaS改变了传统的应用交付模式,促进了分工的进一步专业化,解耦了开发团队和运维团队,将极大地提高未来软件交付的效率。

PaaS改变传统的应用交付

PaaS是开发和运维团队之间的桥梁

四、 结束语

Gartner的最新研究,所有重要软件企业厂商和大型的云计算专业公司将会在2011年推出新的平台即服务(PaaS)产品,这将使2011年成为平台即服务(PaaS)产品主导的一年。另一方面,PaaS已经渐渐变为PaaS + IaaS的融合,大型PaaS服务供应商不仅是能够让开发商或用户在其PaaS平台上面构建和运行应用,同时还负责供应并维护底层的基础架构,包括虚拟化、操作系统修补、安全问题等。
不论是大型企业,中小企业,软件开发商,软件供应商、运营商,还是开发和运维人员,都需充分认识到PaaS的战略核心地位和即将带来的变化,做好充分的准备,迎接PaaS时代的到来。

Ruby之父松本行弘谈《代码的未来》


http://www.ituring.com.cn/article/45484

伊藤:您刚刚讲的这些,在本书的最后一章“多核时代的程序设计”中也进行了总结吧?
Matz:是的。不仅是多核技术,云计算的发展状况基本上也是这样的。
在计算机中有多个CPU的话即为“多核”,在网络中的话即为“云”。总之,预测软件开发的未来的关键词应该集中体现为“如何运用多台计算机”。
伊藤:那么,在引入了多核技术和云计算之后,您认为软件开发者应该如何改变工作方式呢?
Matz:就目前的变化来讲,这10年间,
基于Web的开发不断增加,Web应用的可扩展性很强,是一种适于分散设计的应用架构,所以熟悉Web的人,对多核和云计算的概念也会比较熟悉。与只了解通用机架构的工程师相比,他们应该更容易适应。
伊藤:在采访从事Web服务和智能手机应用开发的新兴企业时,我们感到,在这一两年,利用PaaS和云技术从事服务开发的工程师在快速增加。
Matz:是的。我也认为今后“公司在开发过程中不必购买主机的方式”会成为主流。而且,“不持有”这种思考方式不仅对开发很重要,对企业经营也会产生重大影响。

迈向“持有”不是资产而是负债的时代

Matz:以前,“持有”被认为是企业活力的源泉。拥有高性能通用机的公司能快速处理各种业务,而无法购买昂贵的通用机的公司只能兀自打着算盘……
但是,如今“未持有”的一方反而有利。配备计算机硬件的话,收回成本需要5年,这期间必须让机器充分运转、物尽其用。这种方式表面上看好像有利于压缩成本,但实际上使用旧计算机,会降低生产力,成本反而更高。
也就是说,现在我们已经步入“持有不是资产而是负债”的时代。如果配备最先进的设备,那些优秀的工程师就可以进行高效开发,但仍然有一些人还在使用3年前的旧机器,那也难怪仅仅编译就需要一个小时(笑)。Heroku等云平台的诞生,使得开发中“持有者的优越感”荡然无存。
另一方面,“不持有”的好处也体现在了商务上和开发上。比如,受其影响出现了许多新兴企业。以前,想要创业必须具备一定数量的储备资产,用于向数据中心投资、向服务器租赁公司购买10台服务器等。然而,现在只需要使用Heroku即可,最初的1节点是免费的。这样一来,创业之初,除了进行开发,程序员们会花一些时间以外,几乎没什么风险和成本。
我曾经读过美国投资公司Y Combinator的创立者保罗•格雷厄姆写的一篇短文,其中有一段我深有同感――“现代的新兴创业公司的团队人数很少,只要能挣够供大家吃方便面的钱,他们便会开始新的挑战”。这一断言岂不妙哉!“不持有”的灵活性和快捷性,正是推动有能力的人不断挑战的后盾。这一趋势不仅只体现在新兴公司内,从前年开始,这股风潮已经影响到了一些大企业。
在美国,迪斯尼和百思买等正是利用Ruby、Rails和Heroku,迅速地以低成本构建起了本公司的服务体系。此前,只属于投资公司的特权的“新服务开发的迅捷性”以及“开发的灵活性”已经不再由他们独享。

伊藤:您为什么认为软件开发的前景不容乐观?
Matz:传统的软件开发仍然是主流。虽说在安装Web服务的最终环节中使用了Amazon的云服务,但整个开发流程与过去没什么不同。通常仍然是由没写过一行代码的系统工程师来完成设计。一个软件开发团队动辄出动十人,这种情况很多见。
这与刚才所说的“不持有主机所带来的优势”完全相反。仅从皮毛上引入流行技术的开发案例并不少见。
我对“私有云”(又称内部云或企业云)感到无比失望。这是因为,云服务的最大优点就是在网络中使用多台计算机,而私有云的服务对象仅仅是公司内部的若干台计算机。这本质上不还是“拥有自己的主机”吗?这样可不行啊。