- 浏览: 146051 次
- 性别:
- 来自: 长沙
最新评论
-
huyang406:
楼主写的太好了!顶一个,最近刚好要做一个clouify相关的项 ...
从项目开发到云端架构(14) -
fengqiao678:
看了楼主写的loudify的文章,感觉楼主理解的好透彻,我们最 ...
从项目开发到云端架构(14) -
timeson:
《云端平台的设计和实现》《云端平台的运营和管理》《云端平台的资 ...
从项目开发到云端架构(20) -
wangbingqiang:
你好。虽然是两年前写的,但是还是受益匪浅。求《云端平台的设计和 ...
从项目开发到云端架构(20) -
fakey:
楼主,你写的文章太精彩了,学习了,非常感谢!能否把补充资料打包 ...
从项目开发到云端架构(14)
4 云端平台
图40-01:实现云端的优势
从云计算的三层服务模型(IaaS、PaaS、SaaS)上来讲,PaaS是最难实现的。IaaS主要技术是虚拟化,目前已经相对较成熟,代表产品当属Amazon的EC2啦。SaaS主要难点在于多租户和Web呈现技术,相对来说还算简单,著名的有Salesforce.org等。而PaaS平台,涉及分布式技术、资源隔离、资源管理与调度等,是最复杂的。
4.1 背景介绍
Paas将应用运行所需的 IT 资源和基础设施以服务的方式提供给用户,包括了中间件服务,信息服务,连通性服务,整合服务和消息服务等多种服务形式。为实现平台服务,业界提出了 “平台即服务(Platform as a Services,以下简称 PaaS)”的交付模式。PaaS 模式,基于互联网提供对应用完整生命周期(包括设计、开发、测试和部署等阶段)的支持,减少了用户在购置和管理应用生命周期内所必须的软硬件以及部署应用和 IT 基础设施的成本,同时简化了以上工作的复杂度。为了确保高效地交付具备较强灵活性的平台服务,在 PaaS 模式中,平台服务通常基于自动化的技术通过虚拟化的形式交付,在运行时,自动化,自优化等技术也将被广泛应用,以确保实时动态地满足应用生命周期内的各种功能和非功能需求。
4.2 PaaS介绍
PaaS(Platform-as-a-Service)是云服务的一种,服务提供商不仅提供按需索取的硬件和操作系统服务(iaas本质),还提供了应用程序平台和解决方案栈(paas本质)。对开发者而言,PaaS极大程度上减少了IT部署的开销和痛苦,按需为应用程序提供资源,让其更易伸缩(paas特征)。
JVM、应用服务器和部署包(WAR和EAR)为Java应用程序提供了天然的隔离,允许不同开发者在同一套基础设施中部署应用程序,因此Java平台十分适合PaaS。但过去几年里,大多数PaaS产品都围绕着Ruby和Python这样的平台(因为动态语言编程要快于java编程,而且提供的公有云环境大部分是用来支撑中小企业和新兴的互联网应用,强调开发快捷是必然的选项),当时Google App Engine是唯一为Java开发者提供PaaS服务的。从2010/2011年开始,多家商业服务商进入了Java PaaS领域。
以下的内容来自一位专业人士对各个Java PaaS的认识和比较,放在本文中,并不表示我完全同意他的看法,只是从多角度来考察PaaS的能力。这里以开发者的角度来比较这些服务提供商,具体比较以下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是最流行的Java应用服务器之一,OpenShift服务提供了全面的JBoss AS支持。
4.2.1 技术支撑
Java PaaS提供商最重要的属性之一:就是它所支持的技术平台和技术栈。
- 这方面OpenShift和CloudBees对技术的支持面最广,从简单的Servlet容器(一般是Tomcat)到完整的Java EE 6 Web Profile(JBoss AS 7)都有支持。
- Google App Engine不支持完整的Java SE平台,因此对很多流行框架的支持都很差,它还要求用户使用自己的网络和持久化API,而不是支持公开标准,让应用程序很难迁移。
- Heroku for Java要求应用程序围绕它自己的Jetty实例做封装,打破了传统Java EE应用程序的部署模型。
- Cloud Foundry项目支持Tomcat容器,但它的应用程序开发和部署针对Spring Framework做了大量优化,创建了一个半外置的依赖。因为VMware拥有Spring Framework,所以Cloud Foundry很适合基于Spring的应用程序。此外,它还支持使用RabbitMQ 的消息队列,这是基于 AMQP 标准的。但它对其他Java框架(例如Java EE)的支持很弱。
4.2.2 开发支持
PaaS的关键价值之一:是让应用程序开发者的生活更简单,因为它消除了应用程序和资源管理的开销。所以说,对开发者友好,有工具集成是我们的一个重要考量点。
在这方面CloudBees无疑是赢家。它不仅是一个PaaS运行时环境,还是一个完整的构建和测试环境。开发者可以利用Jenkins服务让CloudBees自动并持续地签出、构建、测试并报告代码库中的代码。这个持续集成过程已经被运用于多个大型团队,作为他们软件开发过程的重要环节。但是,构建服务器管理对QA团队而言是一项费时费力的工作。CloudBees替QA团队承担了这份痛苦,让这一过程对开发者更加透明。最近,Red Hat OpenShift通过支持Maven和Jekins集成,在这个领域里慢慢追上CloudBees了。
Amazon Beanstalk、OpenShift和Google App Engine都提供了开发工具、SDK和IDE插件,与其他市面上的基于Java的工具保持一致。(注:Cloud Foundry其实也提供了for eclipse的开发环境:SpringSource Tool Suite/STS。)
4.2.3 性能伸缩
PaaS最重要的特性之一:是平台自动伸缩的能力,就是基于实时流量需求增加或减少服务器容量。这要求平台提供商在众多服务器之间对请求做负载均衡,监控各台服务器的负载,适时启动新服务器。
所有PaaS提供商都在一定程度上支持自动伸缩。对入门用户而言,Java EE应用程序必须被配置为访问中心化外部数据库,而不是访问部署在同一台服务器上的数据库。所有PaaS提供商的编程范式和工具都要强制开发者遵循这种方式。
更大的问题是HTTP会话。在Java应用服务器上,HTTP会话的会话状态默认是在内存里管理的。要构建能在不同服务器之间负载均衡的应用程序,开发者必须使用以下的某个方法:
- 配置负载均衡器支持“粘性会话”(sticky session),负载均衡器会检查所有流入请求的会话ID,总是把同一会话的请求发给相同的服务器。这是最简单的方法,不过也有自己的问题:负载均衡器需要完成更多的工作,久而久之负载分发会变得不再均衡,而且在负载下降时,很难撤下扩上去的基础设施,因为每台服务器都有自己的会话。出于这些原因,很少有PaaS提供商支持这一方法。
- 为内存中的HTTP会话配置一个共享的缓存。如此一来,每时每刻所有服务器都能在内存里拥有全部HTTP会话。但是,在集群中复制内存会话这项任务既耗费带宽,又消耗计算资源。它要求应用程序开发者配置共享缓存和复制策略。
- 还可以配置应用程序,将所有HTTP会话持久化到外部关系型数据库中。
- 把会话信息存储在客户端(cookie/页面隐含域),淘宝采取的这种策略,切实可行,但好想没有上升到Java PaaS的通用解决方案中。
Java Paas厂家比较:
- 上述所有的PaaS平台中,Google App Engine对这一问题的处理是最好的。它在架构上就将单一服务器的概念抽象了出来,会自动在不同的服务器上创建数据存储,并默认将HTTP会话保存到数据存储中,这一过程对开发者是透明的。但是,Google App Engine的问题是原生的性能太差,一个Web请求要花1至3秒才能完成一次对数据库的访问。
- Heroku for Java的每个服务器实例都封装了一个自定义的Jetty实例,因此它也提供了跨服务器实例自动共享会话的能力。然而,Heroku并不提供透明的自动伸缩,你需要观察仪表盘,适时为应用添加资源。
- 剩余的标准Java PaaS产品都强制要求开发者在专门的数据库服务器上创建数据表,这也是部署过程的一部分。对于HTTP会话,Cloud Foundry在负载均衡器中使用了粘性会话。正如上文讨论的那样,这种做法为开发者带来了便利,也有一些严重的问题。其他PaaS产品虽然没有明说,但都把会话管理的工作留给了应用程序开发者。
4.2.4 商业考量
对开发者而言,PaaS产品的价格是十分重要的。大多数服务提供商都有免费服务供开发者试用,这些免费服务对较小的Java Web站点来说就是很好的选择。
但是,正如Google App Engine最近的涨价风波所反映的那样,大型Web应用程序使用PaaS的成本还是很高的。
另一个要考虑的重要因素是支持。Google App Engine和Amazon Web Services在支持方面表现糟糕。开发者只能自己在论坛上寻找答案。稍小的专注于Java的提供商提供了更好的技术支持,在公共论坛上亦是如此。在我看来CloudBees提供的支持最为出色,很好地结合了付费问题单的支持和支持人员间的Java专业技术秘诀。
Java PaaS在过去的12个月里经历了很多,各种产品仍在快速发展,这对那些寻找低价、可伸缩、甚至是免费托管解决方案的Java开发者来说是个天大的好消息。对Java EE开发者而言,CloudBes和OpenShift是目前市面上最好的产品。
4.2.5 能力小结
下面用个表格,简单的描述一下3大开源(提供源代码的,非开源的就不再阐述)的paas平台技术特点。每个paas背后的推手都有个在业界名声显赫的公司:
- Cloud foundry是VMWare的手笔,本身在虚拟机方面是首屈一指,再收购spring后,由spring 3.1以上的版本对cloud foundry作了更好的支持,当然VMWare也留了一手,CF是它的开源产品,它自身还有一个VMwarevFabric Cloud Application Platfor的商业产品。
- openshift是redhat的杰作,去年6月份在美盛听过redhat的售前讲解过openshift,如今说开源就开源了,估计是感受到了来自CF的强大压力,有竞争才有动力,有了动力才会有进步,这样程序员就有更多的选择,可有了太多的选择,又有些无所适从,就像当年雨后春笋般的web框架一样,呵呵。虽然VMWare和redhat分别启动了他们的 PaaS 项目,但是 VMWare 似乎赢得了更多的支持,因为 Cloud Foundry 比 OpenShift 积累了更多的伙伴和爱好者,还是早期的鸟儿有虫吃。
- cloudify所在的公司在开源社区中名声没有前面2家公司这么大,是因为它之前从事的是商业高端的应用服务器,在cloud高歌猛进的岁月里,终究也按捺不住涉足于paas系统,自然也开源并提供源代码,当然,提供下载的是社区版本,一些高级特性是属于商业版本,并没有提供源代码下载。后续的表格对比中,说明的是包含商业版本的能力。
下面是这3大开源paas的源代码地址,后续章节也就根据自己的认识和体会,稍微阐述一下这3大paas的特点:
语言
|
Cloud foundry |
openshift |
cloudify |
Erlang |
支持 |
|
|
Java 1.6 |
支持(tomcat6) |
支持(jboss 7.1) |
多应用服务器 |
.net |
|
|
支持 |
Node.js 0.4x |
支持 |
|
需扩展 |
Node.js 0.6x |
支持 |
支持 |
需扩展 |
Perl 5 |
|
支持(mod_perl) |
需扩展 |
Php 5 |
支持(mod_php) |
支持(mod_php) |
支持(mod_php) |
Python |
支持 |
支持 |
需扩展 |
Ruby 1.8.x |
支持 |
支持 |
需扩展 |
Ruby 1.9.x |
支持 |
|
需扩展 |
Scala |
支持 |
需扩展(lib自动读入) |
需扩展 |
任意语言追加 |
|
支持(DIY) |
支持 |
表 42-1: 语言差异
关系数据库
|
Cloud foundry |
openshift |
cloudify |
HsqlDB |
|
|
支持 |
Mysql |
支持 |
支持 |
支持 |
PostgreSQL |
支持 |
支持 |
支持 |
VoltDB |
|
|
支持 |
表42-2:数据库支持
NoSQL
|
Cloud foundry |
openshift |
cloudify |
Cassandra |
|
|
支持 |
Memcached |
支持 |
|
|
CouchDB |
|
|
支持 |
MongoDB |
支持 |
支持 |
支持 |
Redis |
支持 |
|
支持 |
Neo4j |
支持 |
|
|
表42-3:nosql支持
其他
|
Cloud foundry |
openshift |
cloudify |
ActiveMQ |
|
|
支持 |
RabbitMQ |
支持 |
|
|
Hadoop |
|
|
支持 |
ElasticSearch |
|
|
支持 |
Solr |
|
|
支持 |
表 42-4:其他
从这几张表格的数据比较,cloudify除了语言方面支持的力度比其他2个开源的paas稍逊,但在java语言,java应用服务器,以及在数据库,nosql数据库,其他互联网应用都比其他2个paas平台支撑的好。
对于PaaS的阐述,前面是蜻蜓点水,做个略为了解,本章节的后续篇幅,将重点分析几个开源的PaaS系统,也就是针对之前对比的cloud foundry;openshift;cloudify,同时也阐述了我们部门正在作的PaaS:Talkyun-应用引擎。
分析这些PaaS平台的目的是为了更好的了解PaaS。之前对PaaS的认识存在误区:有的认为PaaS云平台包罗万象,能彻底解决分布式,大规模,高并发的问题,是大型网站的一揽子解决方案;也有的认为PaaS类似esb,无非又是一个噱头和包装而已。银弹乎?卵蛋乎?扯蛋乎?
但到底是什么,PaaS能提供什么功能,在此基础上,软件如何开发,系统如何架构,模块如何部署,我尝试用一种新的方式来阐述和说明,理解和把握现有业界开源的PaaS,并搭建其环境,了解其运行机理,再尝试用DIY的方式,用头脑风暴快速模拟搭建不同能力层次的paas平台,从而深入了解PaaS平台。用一句通俗的语句说就是:先看看猪的样子;然后让猪跑跑,哼哼,更深层次的了解猪的习气;最后可以自己养猪了,养肥后就可以享用了。
上一篇 从项目开发到云端架构(10) : http://timeson.iteye.com/blog/1687979
下一篇 从项目开发到云端架构(12) : http://timeson.iteye.com/blog/1692198
发表评论
-
从项目开发到云端架构(20)
2013-02-06 16:01 23685.5 DIY after 这里 ... -
从项目开发到云端架构(19)
2012-11-18 19:05 23235.4 健壮Paas ... -
从项目开发到云端架构(18)
2012-11-06 10:19 26405.3 扩展PaaS 在Paas平台的奴隶时 ... -
从项目开发到云端架构(17)
2012-10-29 08:25 25365.2 基本PaaS 如前所述,采用脚本模式 ... -
从项目开发到云端架构(16)
2012-10-22 12:39 40185 PaaS DIY PaaS是一个 ... -
从项目开发到云端架构(15)
2012-10-20 08:38 27264.6 Jelastic Jelastic是 ... -
从项目开发到云端架构(14)
2012-10-16 19:42 112594.5 Cloudify Cloud fo ... -
从项目开发到云端架构(13)
2012-10-11 12:46 37364.4 Openshift 去年5月,Re ... -
从项目开发到云端架构(12)
2012-10-07 15:25 36944.3 CloudFoundry Clou ... -
从项目开发到云端架构(10)
2012-09-28 14:25 25433.2 云平台的结构 云计算是: 是一种基 ... -
从项目开发到云端架构(09)
2012-09-27 21:19 38973.1.2 演进的抽象 ... -
从项目开发到云端架构(08)
2012-09-27 09:19 23033 系统变迁 话说天下大事,分 ... -
从项目开发到云端架构(07)
2012-09-26 16:21 24332.3.5 软件测试 2.3.5. ... -
从项目开发到云端架构(06)
2012-09-26 16:16 28902.3 敏捷前行 当软件行业进入互联网时代, ... -
从项目开发到云端架构(05)
2012-09-26 16:09 23732.2.3 多租 ... -
从项目开发到云端架构(04)
2012-09-26 14:42 21171.1.1 扩展系统 2.2.2. ... -
从项目开发到云端架构(03)
2012-09-22 21:05 32812.2 项目架构 ... -
从项目开发到云端架构(02)
2012-09-22 20:43 30382 项目架构 要实现大并发高访问 ... -
从项目开发到云端架构(01)
2012-09-22 20:14 45381 总则 1.1 编写目的 云端应用 ...
相关推荐
【模拟云端系统项目】是一个综合性的IT项目,它结合了前端和后端技术,旨在构建一个功能完善的云端应用。...这样的项目实践能帮助开发者深入理解云端应用的开发流程和架构设计,提升在分布式系统中的实战能力。
在当前数字化时代,"云端第三代系统开发"是一个重要的议题,它涉及到如何利用先进的技术构建高效、易用且灵活的云服务平台。在这个系统开发过程中,Java作为主要编程语言扮演着核心角色。下面我们将深入探讨这个话题...
云端系统源码第二版是一个...综上所述,云端系统源码第二版是一个涉及多方面技术和实践的综合项目,涵盖了从底层基础设施到上层应用服务的全方位设计。深入理解和掌握这些知识点对于开发、运维和管理云端系统至关重要。
在Android开发中,结合Web服务(Webservice)可以实现丰富的云端功能,比如数据同步、远程API调用等。"android基于webservice云端运用最新代码EasyEnglish"是一个示例项目,展示了如何在Android应用中集成Webservice...
综上所述,这个压缩包是鸿蒙OS开发者的一站式资源库,涵盖了从系统底层到应用开发的各个环节,对于想要涉足鸿蒙OS领域的开发者而言,是一个宝贵的资料集合。通过深入学习和实践,开发者可以更好地掌握鸿蒙OS的开发...
以上内容仅是对“wiki云端知识库平台项目”可能涉及的技术栈和概念的一个概述,具体实现可能根据开发团队的选择和技术栈有所不同。对于学习者来说,深入理解并掌握这些知识点,将对个人的技能提升和未来职业发展...
“云端”意味着它涉及到云存储或云计算的服务。“脚本”指的是可执行的代码文件,如JavaScript、Python等,可能是网页脚本或者其他类型的程序。“获取器”和“下载器”则说明了工具的功能,即获取并下载云端的脚本...
9. **部署与运维**: 项目可能还包含了部署和运维相关的文档,例如Dockerfile或者Kubernetes配置,帮助开发者将应用部署到云端或本地环境。 这个项目不仅提供了实际的代码实现,还可以作为学习微服务架构、前后端...
通过研究这些源代码,初学者可以学习到实际项目开发中的最佳实践,而有经验的开发者则可以借鉴其中的设计模式和问题解决策略。无论是独立学习还是团队协作,这个资源都能提供宝贵的经验和洞察。
DevOps 从云端到地面 熊节 pdf DevOps 让持续交付成为可能 乔梁 pdf eBay技术平台:掌控十亿级交易数据 Tony Ng pdf Facebook大数据实时分析案例分享 Uri pdf Java EE 7 平台:应云而生 Tyler Jewell pdf JS ...
总结,SRA2021-G03-项目开发计划1.81是一个旨在构建云端知识库APP的详尽蓝图,涵盖了项目从需求分析到实施、测试、上线及后续维护的全过程。通过这个计划,团队能够有序地进行开发工作,确保知识库应用能高效、安全...
【SRA2021-G03-项目开发计划1.71】是关于一...总之,"SRA2021-G03-项目开发计划1.71"是一个全面的项目管理文档,它涵盖了项目从启动到完成的所有关键环节,旨在确保团队高效协作,成功开发出满足需求的云端知识库APP。
JSP+SSM项目-云端学习系统的Java毕业设计.rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:345】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 端学习系统在...
它的出现是为了解决软件开发和维护的成本问题,通过将软件部署到云端,提供基于互联网的软件服务,用户可以通过互联网访问和使用软件。 SAAS 架构设计模式的优势包括: 1. 用户方面:拿来即用,无须维护,按需使用...
《构筑大语言模型应用:应用开发与架构设计》是一份深度探讨大语言模型在实际应用中的开发和架构设计的资源集合。这份资料来源于GitHub上的开源项目phodal/aigc,旨在帮助开发者理解和利用大语言模型的技术,提升...
在物联网项目开发中,可能还需要特定的物联网协议解析或设备模拟插件。 3. **物联网架构**: 物联网环境监测系统通常包含传感器节点、网关和云端平台三个部分。传感器节点负责采集环境数据,如温度、湿度、光照等...
9. **版本控制**:在项目开发过程中,版本控制非常重要。微信开发者工具允许开发者进行代码版本管理,便于团队协作和回滚更改。 10. **发布与更新**:完成开发后,开发者可以在微信开放平台上提交审核,待审核通过...
总结,本Android项目开发报告全面展示了项目开发的各个方面,从底层的平台架构到上层的功能实现,再到数据库和项目组织,为开发者提供了清晰的开发指南。通过这样的报告,不仅可以评估项目的成熟度,也便于团队协作...
本项目“springboot-netty-protobuf-master”旨在提供一个基础架构,它利用了Spring Boot的便捷性以及Netty的高效网络通信能力,同时采用Google的Protocol Buffers(protobuf)作为数据交换格式,确保数据传输的高效...