- 浏览: 304504 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (279)
- java技术 (45)
- 存储技术 (6)
- 数据库技术 (29)
- 系统架构 (6)
- 项目管理 (0)
- 生活随想 (3)
- 性能优化 (22)
- OpenStack (0)
- 缓存技术 (3)
- 云计算 (1)
- linux (22)
- 网络通信 (12)
- 辅助开发 (1)
- web服务器和应用服务器 (6)
- 学习感悟 (2)
- 大数据技术(hadoop) (6)
- 高性能分布式系统 算法 (1)
- zookeeper (0)
- 算法 (4)
- dubbo (1)
- java技术 jvm (5)
- 系统设计 (1)
- 缓存失效算法比较 (1)
- javascript (1)
- maven (3)
- 设计模式 (13)
- spring以及常用框架 (5)
- SOA框架 (5)
- 监控系统 (1)
最新评论
-
kongdong88:
Netty简单应用与线上服 ...
用Netty实现的一个简单的HTTP服务器 -
phili1999:
兄弟,此乃Eclipse的bug,至今未解决,可见国人地位低啊 ...
eclipse的控制台在UTF-8编码下键盘输入BUG问题,请问有谁能解决 -
xiaguobing:
谢谢分享啊
MetaQ初探 -
ih0qtq:
...
java性能编码规范整理
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的有力竞争对手
发表评论
-
JVM内存配置详解
2016-09-03 10:16 742前段时间在一个项目的性能测试中又发生了一次OOM(Ou ... -
gc日志分析工具
2014-07-31 11:29 747性能测试排查定 ... -
ByteBuffer使用
2014-04-08 15:04 2129在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信 ... -
用java实现生产者和消费者问题 .
2014-02-08 15:18 579package javaTest; //测试类 ... -
应用Hash函数(java描述) .
2014-02-08 15:16 943计算理论中,没有Hash ... -
JAVA正则表达式 Pattern和Matcher
2013-09-15 12:14 688java.util.regex是一个用正则表达式所订制 ... -
异常处理之最佳实践(Best Practices for Exception Handling )
2013-09-15 12:15 1108关于异常处理最主要的问题是什么时间、怎么使用,在本 ... -
转 探索 ConcurrentHashMap 高并发性的实现机制
2013-08-14 10:16 513简介 ConcurrentHashMap 是 util. ... -
JAVA线程池的分析和使用
2013-08-14 10:11 8761. 引言 合理利用线程池能够带来三个好处。第一: ... -
MAT工具介绍
2013-08-13 09:17 877为什么用MAT 之前的观点,我认为使用实时prof ... -
聊聊内存泄露
2013-08-12 17:42 8591.什么是内存泄露 看到网上有很多人都在问内存泄露与内存 ... -
Java多线程-阻塞队列BlockingQueue .
2013-08-05 09:14 945前言: 在新 ... -
让servlet支持浏览器缓存
2013-06-20 15:16 1130大家都知道IE等浏览器支持缓存,并且缓存策略可配置,这样可 ... -
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
2013-06-20 14:34 1030转自: http://holdbelief.javaeye ... -
Runtime.addShutdownHook()方法理解
2013-05-05 08:39 982Runtime.addShutdownHo ... -
Jaxb2 实现JavaBean与xml互转
2013-04-18 22:39 1224一、简介 JAXB(Java Archite ... -
JVM中Load过多Class的分析
2013-04-12 08:58 2893JVM中Load过多Class的分析 2013-01 ... -
Java动态代理机制分析及扩展
2013-04-12 08:59 789本文通过分析 Java 动态代理的机制和特点,解读动 ... -
proxool与tomcat DBCP连接池性能评测
2013-04-10 13:49 866proxool与tomcat DBCP连接池性能评测 ... -
Java String的序列化小结
2013-04-10 13:49 855String对我们来说太熟悉了,因为它无处不在,更因为用S ...
相关推荐
### Java开发者PaaS指南 #### 一、PaaS概述及Java平台的重要性 PaaS(Platform-as-a-Service),即平台即服务,是一种云计算服务模式,它不仅为用户提供按需索取的硬件和操作系统服务,更重要的是提供了应用程序...
通过深入学习这个培训指南,开发者能够熟悉上海电信的PaaS平台,掌握其特性和操作方式,从而高效地开发出符合需求的云应用。这不仅有助于提升开发者的技能,也为上海电信的客户提供了更强大、更灵活的开发工具和服务...
综上所述,"基于PaaS和SaaS研发商业平台实战.zip"的资源可能是一份全面的指南,旨在帮助Java开发者掌握在云环境中构建高效、可扩展和安全的商业平台所需的知识和技能。通过学习和实践,开发者可以更好地利用PaaS和...
PaaScloud作为一个开源项目,为开发者提供了丰富的功能和便捷的开发环境。在这个项目中,数据库脚本和三方JAR文件扮演着关键的角色。本文将深入探讨这两个核心组成部分,帮助那些寻找相关资源的开发者更好地理解和...
通过这份Google App Engine for Java 快速入门指南 v1.2.0,开发者不仅可以了解到如何构建和部署基于Java的应用程序,还可以学习到如何利用Eclipse for App Engine 进行高效的开发工作。无论是初学者还是经验丰富的...
最后,按照PAASCloud提供的部署指南配置服务启动参数,并启动各个微服务组件。 5. **版本兼容性**: 需要注意的是,不同版本的PAASCloud可能需要特定版本的数据库脚本和三方JAR,因此在使用前要确保所有组件的版本...
4. 调整配置:根据paascloud的文档或指南,调整相关配置文件,确保数据库连接、三方库的使用等设置正确无误。 5. 集成测试:在完成上述步骤后,进行集成测试,验证paascloud平台是否能正常启动并运行。 总之,这个...
PaaScloud是一个云计算平台即服务(Platform as a Service)的实现,它为企业或开发者提供了一个部署和运行应用程序的云环境。 【描述】提及的“私有jar”指的是专为PaaScloud项目定制或编译的Java库文件,这些文件...
标题中的"appengine-java-sdk-1.3.1"指的是Google App Engine的Java版本...这个SDK简化了云应用的开发流程,使得Java开发者能够快速地构建可扩展的、高可用性的Web应用程序,并利用Google的全球数据中心网络提供服务。
【标题】"Paas容器实战"的描述指出,这是一份关于PaaS(Platform as a Service)容器技术的实战指南,特别关注Kubernetes(K8s)和Spring Security 3的使用。在PaaS环境中,容器化技术已经成为现代应用程序部署的...
《云计算入门指南》这本书可能涵盖了这些基础知识,包括云计算的历史、基本模型、核心技术和Java在其中的应用。通过阅读,你将能够理解云计算的原理,掌握如何利用Java进行云服务开发,并了解到如何在实际项目中应用...
Java CFEnv 是一个专为Java开发者设计的库,它的主要目标是简化在Cloud Foundry平台上部署应用程序时对环境变量的访问。Cloud Foundry是一个流行的开源平台即服务(PaaS)系统,它允许开发者轻松地部署和管理应用...
总结来说,CloudFoundry提供了一个强大的开源PaaS平台,使得开发者能够便捷地开发和部署Java应用程序。通过Micro Cloud Foundry,开发者可以实现本地的快速迭代和测试,而CloudFoundry的全面服务和支持生态系统则...
Jelastic是一个高度自动化的、针对Java和PHP应用的PaaS(平台即服务)解决方案,它允许开发者以容器为基础进行部署,提供灵活的资源管理和优化的性能。 **Scala编程语言** Scala是一种静态类型的多范式编程语言,它...
"Java编程_Java__Java编程_Java_"这部分重复的标签强调了这个项目与Java语言的密切关系,尤其是它在开发平台或者服务(PaaS)层面上的应用。 **描述详解:** 描述中提到"基于zookeeper+quartz/spring task的分布式...
Spring Cloud则为Java开发者提供了构建分布式系统的一系列工具,这些工具可以处理常见的模式,比如服务发现、配置管理、负载均衡、断路器和分布式会话管理等。 Cloud Foundry作为一个云原生平台,为Spring Boot应用...
Java面试资料是为Java开发者量身打造的一套全面的学习指南,旨在帮助他们在求职面试中展现出卓越的技术实力和实践经验。这份资料全面覆盖了Java编程语言的关键领域,包括但不限于以下几个方面: 1. **Java基础**:...