`

Java开发者PaaS指南

 
阅读更多
转自:http://blog.csdn.net/zhoujianghua_2008/article/details/7472901
PaaS(Platform-as-a-Service)是云服务的一种,服务提供商不仅提供按需索取的硬件和操作系统服务,还提供了应用程序平台和解决方案栈。对开发者而言,PaaS极大程度上减少了IT部署的开销和痛苦,按需为应用程序提供资源,让其更易伸缩。
                
               JVM、应用服务器和部署包(例如,WAR和EAR)为Java应用程序提供了天然的隔离,允许不同开发者在同一套基础设施中部署应用程序,因此Java平台十分适合PaaS。但是,过去几年里,大多数PaaS产品都围绕着Ruby和Python这样的平台,当时Google App Engine是唯一为Java开发者提供PaaS服务的。幸运的是,现在的情况已经大为改善了。
差不多从去年开始,多家商业服务商进入了Java PaaS领域。这一举动很有意义,因为Java开发者差不多有1000万之多,也许是世界上最大的开发者群体之一。本文中,我们将从开发者的角度来比较这些服务提供商。特别要说明一下,具体比较以下4个方面:
  • 对技术平台和技术栈的支持。
  • 对开发者生产力和开发过程的支持。
  • 性能和可伸缩性。
  • 价格和其他商业考量。

文中我们会比较以下Java PaaS产品(按字母排序)。

  • Amazon Elastic Beanstalk是Amazon构建于EC2云上的Java PaaS产品。其中提供了运行于EC2上的受管Tomcat实例,带有负载均衡器,还可按需提供伸缩能力。Amazon Elastic Beanstalk集成了Amazon Web Services的其他服务,能访问受管关系型数据库(RDS)、大数据存储(SimpleDB)、消息队列、电子邮件和其他服务。
  • CloudBees 是一家风投的创业公司,成员由JBoss和Sun的前雇员组成,最近在两轮融资中共募得1400万美元。CloudBees也许是个新名字,不过它在这个领域中的影响力正在不断扩大,为Java PaaS带来了多项独特的特性,尤其是持续集成——一个完整的云端开发/部署周期管理。此外,和Heroku一样,它还包含一个第三方插件和服务的市场。
  • Cloud Foundry 是VMware发起的一个开源产品。VMware软件驱动着虚拟化数据中心,这是大多数PaaS产品的基础。VMware还是Spring Framework的拥有者,它是在企业Java中非常流行的一个平台栈。Cloud Foundry的一个独一无二的特性是它根本无需成为受托管的PaaS,你可以下载其代码,自己托管PaaS!这样一来,它既是一个托管平台,也是一个受托管PaaS服务。
  • Google App Engine for Java 也许是市面上问世时间最长(也是最成熟)的Java PaaS产品。它的目标是提供线性伸缩性,而且不担心对Java平台本身做出巨大变化。
  • Heroku for Java 是PaaS大厂Heroku最近才推出的产品,Heroku在Ruby社区颇受欢迎。
  • Red Hat OpenShift 是Red Hat试水PaaS的实验性产品。Red Hat的JBoss Application Server (AS)是最流行的Java应用服务器之一,OpenShift服务提供了全面的JBoss AS支持。

支持的技术平台和技术栈Java PaaS提供商最重要的属性之一就是它所支持的技术平台和技术栈。总而言之,技术平台是Java PaaS区别于其他PaaS产品的地方。在Java平台的长期进化中,涌现了很多颇有竞争力的技术栈。对于Java PaaS厂商而言,我相信尽可能多地支持不同技术栈是十分重要的。
这方面OpenShift和CloudBees对技术的支持面最广,从简单的Servlet容器(一般是Tomcat)到完整的Java EE 6 Web Profile(JBoss AS 7)都有支持。Java PaaS先驱,Google App Engine,在标准支持方面与后来者的差距最大。Google App Engine不支持完整的Java SE平台,因此对很多流行框架的支持都很差。它还要求用户使用Google App Engine自己的网络和持久化API,而不是支持公开标准,这让应用程序很难迁移。类似的,Heroku for Java要求应用程序围绕它自己的Jetty实例做封装,打破了传统Java EE应用程序的部署模型。
Cloud Foundry项目支持Tomcat容器,但它的应用程序开发和部署针对Spring Framework做了大量优化,创建了一个半外置的依赖。因为VMware拥有Spring Framework,所以Cloud Foundry很适合基于Spring的应用程序。此外,它还支持使用RabbitMQ 的消息队列,这是基于 AMQP 标准的。但它对其他Java框架(例如Java EE)的支持很弱。

              Amazon Beanstalk
            
            CloudBees
            
            Cloud Foundry
            
            Google App Engine
            
            Heroku for Java
            
            OpenShift
            
            Tomcat
            
            是
            
            是
            
            是
            
            否
            
            否
            
            是
            
            Java SE
            
            是
            
            是
            
            是
            
            否
            
            是
            
            是
            
            Java EE
            
            否
            
            是
            
            否
            
            否
            
            否
            
            是
            
            支持标准 Java库
            
            是
            
            是
            
            是
            
            否
            
            是
            
            是
            
            文件系统访问
            
            是
            
            是
            
            是
            
            否
            
            是
            
            是
            
            线程访问
            
            是
            
            是
            
            是
            
            否
            
            是
            
            是
            
            对外网络连接
            
            是
            
            是
            
            是
            
            受限
            
            是
            
            是
            
            MySQL
            
            RDS
            
            是
            
            是
            
            付费方案
            
            是
            
            是
            
            商业关系型数据库
            
            RDS
            
            外置
            
            外置
            
            否
            
            外置
            
            外置
            
            Big Data支持
            
            SimpleDB
            
            外置
            
            外置
            
            BigTable
            
            外置
            
            外置
            
            部署时无需特殊框架
            
            是
            
            是
            
            否
            
            否
            
            是
            
            是
            
            方便迁移现有应用
            
            是
            
            是
            
            否
            
            否
            
            否
            
            是
            
            应用可移植性
            
            高
            
            高
            
            中
            
            低
            
            低
            
            高
            
            可用于生产环境
            
            是
            
            是
            
            Beta阶段
            
            是
            
            Beta阶段
            
            Beta阶段
            

对开发者生产力和开发过程的支持PaaS的关键价值之一,是让应用程序开发者的生活更简单,因为它消除了应用程序和资源管理的开销。所以说,对开发者友好,有工具集成是我们的一个重要考量点。
在这方面CloudBees无疑是赢家。它不仅是一个PaaS运行时环境,还是一个完整的构建和测试环境。开发者可以利用Jenkins服务让CloudBees自动并持续地签出、构建、测试并报告代码库中的代码。这个持续集成过程已经被运用于多个大型团队,作为他们软件开发过程的重要环节。但是,构建服务器管理对QA团队而言是一项费时费力的工作。CloudBees替QA团队承担了这份痛苦,让这一过程对开发者更加透明。最近,Red Hat OpenShift通过支持Maven和Jekins集成,在这个领域里慢慢追上CloudBees了。
Amazon Beanstalk、OpenShift和Google App Engine都提供了开发工具、SDK和IDE插件,与其他市面上的基于Java的工具保持一致。
相比Java开发者,Cloud Foundry和Heroku for Java提供了更适合Ruby开发者的工具。试用了这些工具后,我怀疑很多Java开发者可能要花一些时间来适应其中的惯例和术语。另外,Cloud Foundry目前还缺乏文档,举个例子,它的很多文档还是视频教程形式的。虽然视频教程很容易让开发者上手,但在部署重要应用或希望了解视频场景之外的内容时,这些内容显然缺乏深度。尽管Cloud Foundry平台在最近几年里经历了重大变更,但官方入门指南文档的日期还停留在2007年。目前已经有了更多的文档——比如 这篇 ,但它们不该这么难找。
另一个重要的问题,Cloud Foundry允许开发者配置自己的云环境,部署Micro Cloud可比仅仅安装一套SDK麻烦多了。这也是一个障碍,让很多开发者对Cloud Foundry望而却步。

              Amazon Beanstalk
            
            CloudBees
            
            Cloud Foundry
            
            Google App Engine
            
            Heroku for Java
            
            OpenShift
            
            IDE工具
            
            是
            
            是
            
            是
            
            是
            
            否
            
            是
            
            命令行工具
            
            是
            
            是
            
            是
            
            是
            
            是
            
            是
            
            基于Web的控制台
            
            是
            
            是
            
            否
            
            是
            
            否
            
            是
            
            开发机上进行测试
            
            简单
            
            简单
            
            困难
            
            困难
            
            是
            
            简单
            
            构件时无非标准依赖
            
            是
            
            是
            
            否
            
            否
            
            否
            
            是
            
            源码控制集成
            
            否
            
            是
            
            是
            
            否
            
            否
            
            部分
            
            集成构建
            
            否
            
            是
            
            否
            
            否
            
            否
            
            是
            
            集成测试
            
            否
            
            是
            
            否
            
            否
            
            否
            
            否
            
            通过Web访问日志
            
            否
            
            是
            
            是
            
            是
            
            是
            
            是
            
            第三方开发者/测试服务
            
            否
            
            是
            
            否
            
            否
            
            否
            
            否
            
            API访问
            
            是
            
            是
            
            否
            
            否
            
            是
            
            否
            
            文档
            
            好
            
            好
            
            差
            
            好
            
            好
            
            好
            

性能和可伸缩性PaaS最重要的特性之一是平台自动伸缩的能力,就是基于实时流量需求增加或减少服务器容量。这要求平台提供商在众多服务器之间对请求做负载均衡,监控各台服务器的负载,适时启动新服务器。
所有PaaS提供商都在一定程度上支持自动伸缩。但自动扩展远比看上去困难。对入门用户而言,Java EE应用程序必须被配置为访问中心化外部数据库,而不是访问部署在同一台服务器上的数据库。所有PaaS提供商的编程范式和工具都要强制开发者遵循这种方式。
更大的问题是HTTP会话。在Java应用服务器上,HTTP会话的会话状态默认是在内存里管理的。要构建能在不同服务器之间负载均衡的应用程序,开发者必须使用以下的某个方法:

  • 配置负载均衡器支持“粘性会话”(sticky session),负载均衡器会检查所有流入请求的会话ID,总是把同一会话的请求发给相同的服务器。这是最简单的方法,不过也有自己的问题:负载均衡器需要完成更多的工作,久而久之负载分发会变得不再均衡,而且在负载下降时,很难撤下扩上去的基础设施,因为每台服务器都有自己的会话。出于这些原因,很少有PaaS提供商支持这一方法。
  • 为内存中的HTTP会话配置一个共享的缓存。如此一来,每时每刻所有服务器都能在内存里拥有全部HTTP会话。但是,在集群中复制内存会话这项任务既耗费带宽,又消耗计算资源。它要求应用程序开发者配置共享缓存和复制策略。
  • 还可以配置应用程序,将所有HTTP会话持久化到外部关系型数据库中。

上述所有的PaaS平台中,Google App Engine对这一问题的处理是最好的。它在架构上就将单一服务器的概念抽象了出来,会自动在不同的服务器上创建数据存储,并默认将HTTP会话保存到数据存储中,这一过程对开发者是透明的。但是,Google App Engine的问题是原生的性能太差,一个Web请求要花1至3秒才能完成一次对数据库的访问。
Heroku for Java的每个服务器实例都封装了一个自定义的Jetty实例,因此它也提供了跨服务器实例自动共享会话的能力。然而,Heroku并不提供透明的自动伸缩,你需要观察仪表盘,适时为应用添加资源。
剩余的标准Java PaaS产品都强制要求开发者在专门的数据库服务器上创建数据表,这也是部署过程的一部分。对于HTTP会话,Cloud Foundry在负载均衡器中使用了粘性会话。正如上文讨论的那样,这种做法为开发者带来了便利,也有一些严重的问题。其他PaaS产品虽然没有明说,但都把会话管理的工作留给了应用程序开发者。

              Amazon Beanstalk
            
            CloudBees
            
            Cloud Foundry
            
            Google App Engine
            
            Heroku for Java
            
            OpenShift
            
            内建负载均衡器
            
            是
            
            是
            
            是
            
            是
            
            是
            
            是
            
            负载均衡器自定义域名
            
            是
            
            是
            
            否
            
            Google Apps
            
            是
            
            是
            
            自动伸缩应用服务器
            
            是
            
            是
            
            计划支持
            
            是
            
            否
            
            是
            
            自动伸缩数据库
            
            否
            
            否
            
            否
            
            是
            
            否
            
            否
            
            用户定义性能标准
            
            是
            
            是
            
            计划支持
            
            否
            
            否
            
            是
            
            基于Web的监控仪表盘
            
            是
            
            是
            
            计划支持
            
            是
            
            是
            
            是
            
            集群HTTP会话
            
            手工
            
            手工
            
            手工
            
            自动
            
            自动
            
            手工
            

价格及其他商业考量对开发者而言,PaaS产品的价格是十分重要的。大多数服务提供商都有免费服务供开发者试用,这些免费服务对较小的Java Web站点来说就是很好的选择。
但是,正如Google App Engine最近的涨价风波所反映的那样,大型Web应用程序使用PaaS的成本还是很高的。
另一个要考虑的重要因素是支持。Google App Engine和Amazon Web Services在支持方面表现糟糕。开发者只能自己在论坛上寻找答案。稍小的专注于Java的提供商提供了更好的技术支持,在公共论坛上亦是如此。在我看来CloudBees提供的支持最为出色,很好地结合了付费问题单的支持和支持人员间的Java专业技术秘诀。

              Amazon Beanstalk
            
            CloudBees
            
            Cloud Foundry
            
            Google App Engine
            
            Heroku for Java
            
            OpenShift
            
            是否有免费服务
            
            是
            
            是
            
            N/A
            
            是
            
            是
            
            免费
            
            低流量入门级Web应用成本
            
            高
            
            免费
            
            免费
            
            免费
            
            免费
            
            免费
            
            跨云提供商
            
            否
            
            否
            
            计划支持
            
            否
            
            否
            
            计划支持
            
            私有云
            
            否
            
            Beta阶段(OpenStack或vSphere)
            
            是
            
            否
            
            否
            
            计划支持
            
            支持
            
            论坛
            
            电子邮件和电话
            
            论坛 / Web支持问题单
            
            论坛
            
            电子邮件和电话
            
            论坛
            
            支持质量
            
            差
            
            好
            
            好
            
            差
            
            一般
            
            好
            

下一步文中我们讨论了Java PaaS领域的6个知名厂商,当然,现在还有一些稍小的或不那么有名的提供商,比如:

  • Jelastic:它支持很多应用服务器和数据库的组合,包括MySQL数据库的多个变种和NoSQL数据库。
  • WSO2 StratosLive:它是构建于WSO2应用服务器上的PaaS产品,WSO2是一款符合Java EE规范的应用服务器。
  • CumuLogic:它提供的Java 应用服务PaaS可以运行于很多私有云和公有云解决方案上,包含CloudStack、 OpenStack和Eucalyptus。

我们会密切注意这些小厂商,因为它们很轻松地就能成长起来挑战大厂商的市场份额和关注度。
Java PaaS在过去的12个月里经历了很多,各种产品仍在快速发展,这对那些寻找低价、可伸缩、甚至是免费托管解决方案的Java开发者来说是个天大的好消息。对Java EE开发者而言,我相信CloudBes和OpenShift是目前市面上最好的产品,考虑到OpenShift仍处在Beta阶段,所以CloudBees成为了这场比赛的赢家。如果你愿意尝试一下Java专业户以外的选择,Heroku for Java和Cloud Foundry(Beta)是老牌Google App Engine的有力竞争对手

分享到:
评论

相关推荐

    java开发者PaaS指南.docx

    ### Java开发者PaaS指南 #### 一、PaaS概述及Java平台的重要性 PaaS(Platform-as-a-Service),即平台即服务,是一种云计算服务模式,它不仅为用户提供按需索取的硬件和操作系统服务,更重要的是提供了应用程序...

    上海电信PAAS应用开发培训指南20111109-0900

    通过深入学习这个培训指南,开发者能够熟悉上海电信的PaaS平台,掌握其特性和操作方式,从而高效地开发出符合需求的云应用。这不仅有助于提升开发者的技能,也为上海电信的客户提供了更强大、更灵活的开发工具和服务...

    基于PaaS和SaaS研发商业平台实战.zip

    综上所述,"基于PaaS和SaaS研发商业平台实战.zip"的资源可能是一份全面的指南,旨在帮助Java开发者掌握在云环境中构建高效、可扩展和安全的商业平台所需的知识和技能。通过学习和实践,开发者可以更好地利用PaaS和...

    paascloud数据库脚本和三方jar

    PaaScloud作为一个开源项目,为开发者提供了丰富的功能和便捷的开发环境。在这个项目中,数据库脚本和三方JAR文件扮演着关键的角色。本文将深入探讨这两个核心组成部分,帮助那些寻找相关资源的开发者更好地理解和...

    Google App Engine for Java快速入门指南v1.2.0

    通过这份Google App Engine for Java 快速入门指南 v1.2.0,开发者不仅可以了解到如何构建和部署基于Java的应用程序,还可以学习到如何利用Eclipse for App Engine 进行高效的开发工作。无论是初学者还是经验丰富的...

    paascloud配套数据库脚本和三方jar.rar

    最后,按照PAASCloud提供的部署指南配置服务启动参数,并启动各个微服务组件。 5. **版本兼容性**: 需要注意的是,不同版本的PAASCloud可能需要特定版本的数据库脚本和三方JAR,因此在使用前要确保所有组件的版本...

    paascloud配套数据库脚本和三方jar

    4. 调整配置:根据paascloud的文档或指南,调整相关配置文件,确保数据库连接、三方库的使用等设置正确无误。 5. 集成测试:在完成上述步骤后,进行集成测试,验证paascloud平台是否能正常启动并运行。 总之,这个...

    paas_cloud_jar_sql.zip

    PaaScloud是一个云计算平台即服务(Platform as a Service)的实现,它为企业或开发者提供了一个部署和运行应用程序的云环境。 【描述】提及的“私有jar”指的是专为PaaScloud项目定制或编译的Java库文件,这些文件...

    appengine-java-sdk-1.3.1 GoogleApp开发的SDK(Java版)

    标题中的"appengine-java-sdk-1.3.1"指的是Google App Engine的Java版本...这个SDK简化了云应用的开发流程,使得Java开发者能够快速地构建可扩展的、高可用性的Web应用程序,并利用Google的全球数据中心网络提供服务。

    Paas容器实战

    【标题】"Paas容器实战"的描述指出,这是一份关于PaaS(Platform as a Service)容器技术的实战指南,特别关注Kubernetes(K8s)和Spring Security 3的使用。在PaaS环境中,容器化技术已经成为现代应用程序部署的...

    云计算入门(java)

    《云计算入门指南》这本书可能涵盖了这些基础知识,包括云计算的历史、基本模型、核心技术和Java在其中的应用。通过阅读,你将能够理解云计算的原理,掌握如何利用Java进行云服务开发,并了解到如何在实际项目中应用...

    Java CFEnv是一个库,用于在将应用程序部署到Cloud Foundry时轻松访问环境变量集 仅供学习参考用代码.zip

    Java CFEnv 是一个专为Java开发者设计的库,它的主要目标是简化在Cloud Foundry平台上部署应用程序时对环境变量的访问。Cloud Foundry是一个流行的开源平台即服务(PaaS)系统,它允许开发者轻松地部署和管理应用...

    CF 开发指南 JAVA版

    总结来说,CloudFoundry提供了一个强大的开源PaaS平台,使得开发者能够便捷地开发和部署Java应用程序。通过Micro Cloud Foundry,开发者可以实现本地的快速迭代和测试,而CloudFoundry的全面服务和支持生态系统则...

    在Jelastic上使用Scala编程Java开发Java

    Jelastic是一个高度自动化的、针对Java和PHP应用的PaaS(平台即服务)解决方案,它允许开发者以容器为基础进行部署,提供灵活的资源管理和优化的性能。 **Scala编程语言** Scala是一种静态类型的多范式编程语言,它...

    paascloud-paascloud-master-master (1).zip_Java编程_Java__Java编程_Java_

    "Java编程_Java__Java编程_Java_"这部分重复的标签强调了这个项目与Java语言的密切关系,尤其是它在开发平台或者服务(PaaS)层面上的应用。 **描述详解:** 描述中提到"基于zookeeper+quartz/spring task的分布式...

    Cloud Native Java

    Spring Cloud则为Java开发者提供了构建分布式系统的一系列工具,这些工具可以处理常见的模式,比如服务发现、配置管理、负载均衡、断路器和分布式会话管理等。 Cloud Foundry作为一个云原生平台,为Spring Boot应用...

    java面试资料面试题学习资料

    Java面试资料是为Java开发者量身打造的一套全面的学习指南,旨在帮助他们在求职面试中展现出卓越的技术实力和实践经验。这份资料全面覆盖了Java编程语言的关键领域,包括但不限于以下几个方面: 1. **Java基础**:...

Global site tag (gtag.js) - Google Analytics