Java开发者必备:PaaS解决方案盘点

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)的支持很弱。

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望而却步。

性能和可伸缩性

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产品虽然没有明说,但都把会话管理的工作留给了应用程序开发者。

价格及其他商业考量

对开发者而言,PaaS产品的价格是十分重要的。大多数服务提供商都有免费服务供开发者试用,这些免费服务对较小的Java Web站点来说就是很好的选择。

但是,正如Google App Engine最近的涨价风波所反映的那样,大型Web应用程序使用PaaS的成本还是很高的。

另一个要考虑的重要因素是支持。Google App Engine和Amazon Web Services在支持方面表现糟糕。开发者只能自己在论坛上寻找答案。稍小的专注于Java的提供商提供了更好的技术支持,在公共论坛上亦是如此。在我看来CloudBees提供的支持最为出色,很好地结合了付费问题单的支持和支持人员间的Java专业技术秘诀。

文中我们讨论了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的有力竞争对手。查看英文原文: A Java Developer’s Guide to PaaS

时间: 2015-03-16

Java开发者必备:PaaS解决方案盘点的相关文章

2015 年度 Android 开发者必备的 5 个开源库

本文讲的是2015 年度 Android 开发者必备的 5 个开源库, 在2014年6月,我们发表了一篇关于5 个顶级 Android 开源库的文章,我们一直在用,并且相信每个 Android 开发者都应该了解这些开源库.从那之后,Android 方面已经发生了很多变化,所以我们写了这篇文章,我们最喜欢的5个开源库的更新版. 下面是更新列表: 1. Retrofit 当涉及到实现 REST APIs 时,Retrofit 仍是我们的最爱. 他们的网站上写着: "Retrofit 将 REST A

最适合Java开发者的大数据工具和框架

文章讲的是最适合Java开发者的大数据工具和框架,当今编程人员面对的最大挑战就是复杂性,硬件越来越复杂,OS越来越复杂,编程语言和API越来越复杂,我们构建的应用也越来越复杂.根据外媒的一项调查报告,以下列出了Java程序员在过去12个月内一直使用的一些工具或框架,或许会对你有意义. 先来看看大数据的概念.根据维基百科,大数据是庞大或复杂的数据集的广义术语,因此传统的数据处理程序不足以支持如此庞大的体量. 在许多情况下,使用SQL数据库存储/检索数据都是很好的选择.而现如今的很多情况下,它都不再

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松.目前,市面上涌现出越来越多的高效编程工具.所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用.正在使用或将来一定会用到的高效工具.这份列表名单包括集成开发环境.集成工具.测试和质量工具等. 1.集成开发环境 Eclipse是最有名也最广泛使用的Java集成开发环境(IDE),允许开发者结合语言支持和其他功能到任何的默认包中,而且Eclipse市场有许多定制和扩展的插件. IntelliJ已经引起了开发

Go For Java Programmers(面向Java开发者的GO编程)

本文旨在帮助JAVA开发者迅速掌握 Go语言. 开始用一个很容易能被所有的Java程序员认出的例子来突出特色,然后对GO的框架给出了详细的的描述,最后用一个例子来说明GO结构中没有与 Java直接对应处. Hello stack (一个栈的例子) 为了吊起你的胃口,我们用一个麻雀虽小,五脏俱全和符合习惯的例子对应这个Stack.java 程序 // 包collection实现了生成栈. package collection // 零值栈是一个空栈,准备被使用. type Stack struct

11个最值得Java开发者收藏的网站

Java是一种面向对象的编程语言,由Sun Microsystems公司在1995年的时候正式发布.直到今天,Java都一直是最受欢迎的编程语言之一.如今,Java应用于各种各样的技术领域,例如网站开发.Android开发.游戏开发.大数据等等. 在世界各地,成千上万的Java开发者进行着各式各样的软件开发项目.不同的开发者使用的工具不同,每一个项目所要求的技术也不同.但是,他们都会通过网络途径来为满足自己的学习需求或者为编程问题找到解决方法. 因此,我列举了11个能够帮助Java开发者提升编程

给Java开发者的Scala教程

author:Michel Schinz,Philipp Haller 1. 简介 本文将该要的介绍Scala语言和其编译.这里假设读者已经有一定的java开发经验,需要概要的了解他们可以用Scala 做些什么. 2. 第一个例子 我们用全世界最著名的代码来作为开始.虽然没什么用,但是可以很好地直观的了解Scala: object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") 

Java开发者的福音:使用 Visual Studio Code 调试 Java 应用程序

对于使用 Visual Studio Code 的 Java 开发者来说,Language Support for Java(TM) by Red Hat 扩展提供了非常好的语言特性支持,比如智能感知和项目支持等.然而,我们也听到一些用户反馈需要调试 Java 程序.今天,我们万分激动地宣布,我们与 Red Hat 合作开发了能让开发者调试 Java 应用程序的轻量级扩展:Java Debugger for Visual Studio Code,它基于 Java Debug Server. 注意

每个Java开发者应该知道的八个工具

在Stormpath(一款用户管理和认证服务),我们认真对待质量和效率.任何一个优秀的工匠,仅仅拥有天赋是不够的,你在工作中还需要正确的工具.工程学不仅仅是科学,更是艺术.所以,在Stormpath,尽管我们拥有天赋,我们仍不断寻找所需的有用的工具.我们的工程师一直渴望向团队其他人分享新工具.现在,让我们向所有充满天赋的Java开发者推荐工具. 在这篇文章中,我将分享我们Java团队日常工作使用的工具,并介绍如何使用它们,分享一些实用的小技巧. 1.Groovy 我们使用Groovy来写Java

每个Java开发者应该知道(并爱上)的8个工具

在Stormpath(一款用户管理和认证服务),我们认真对待质量和效率.任何一个优秀的工匠,仅仅拥有天赋是不够的,你在工作中还需要正确的工具.工程学不仅仅是科学,更是艺术.所以,在Stormpath,尽管我们拥有天赋,我们仍不断寻找所需的有用的工具.我们的工程师一直渴望向团队其他人分享新工具.现在,让我们向所有充满天赋的Java开发者推荐工具. 在这篇文章中,我将分享我们Java团队日常工作使用的工具,并介绍如何使用它们,分享一些实用的小技巧. 1.Groovy 我们使用Groovy来写Java

盘点Android开发者必备的十大开发工具

Android SDK提供了一系列可帮助开发者设计.创建.测试和发布Android应用程序的强大工具,以下是我们编译developer推荐的10款最常用的开发工具. 1.Eclipse w/ADT 虽然Eclipse并非唯一可用于开发Android应用的Java开发环境,但它是目前最欢迎的工具,有很大程度上是因为它的成本很低(免费),但最主要的原因还是它与其他Android工具的强大组合功能.最典型的表现就是它与Android Development Tools(ADT)插件的组合(注:开发者可