怎么在云上部署javajava桌面应用程序开发

在云上架构你的应用
此为即将在机械工业出版社出版的《云计算:应用开发实践》的第一章 《在云上架构你的应用》
在本书策划阶段笔者就一直在想,该以一种什么方式介绍云计算以及云计算应用程序呢?一般介绍一种技术,要先介绍一下它的起源,它的历史和原理。很多
关于云计算的书籍也确实是这么做的,可问题是这样的介绍无法引起我的兴趣,因为它们的介绍内容往往跟我自己真实的开发环境和应用环境有距离,我不知道这些
介绍对于解决碰到的实际问题是否足够。每当看到这样的章节我总是匆匆掠过。于是我开始想假如我也这么写,那么各位读者估计跟我一样也会匆匆掠过。但历史性
的以及原理性的介绍对于理解一门新技术是很有益处的。于是我的思绪回到了我自己的第一个能解决实际问题的应用程序,是不是可以把它移植到云计算环境来?
我自己的第一个能解决实际问题的应用程序是在一个叫宠物商店应用的基础上改进的应用程序。不知道各位是否听说过这个应用。它是一个为Java
程序员开发Web程序而写的例子。最初是在Java EE平台上运行的
如 果您没听说过Java, Java
EE这些名词也没关系,在这一章我们并不详细讨论宠物商店的实现细节,您只要会上网下载程序,会安装程序,那么通过阅读这一章您将能够在您自己的云计算环
境上部署一个宠物商店。您在阅读这一章时可以重点关注云计算环境搭建以及部署,忽略性能提高章节。另外本书的附录里会尽量介绍所需了解的相关技术,相信聪
明的您一定可以把应用程序部署到云环境里。
如果您使用过C、C++、C# 或者Java编程语言以及数据库编程, 阅读这一章对您应该完全不成问题。
本章将介绍如何将一个较为简单的应用移植到自己搭建的云计算环境里,并通过举例逐步介绍云应用程序,云计算环境以及云计算概念的产生与发展。
1.1&&&&&&&&Java
宠物商店简介
宠物商店(JPetStore)最初是Sun Microsystems 公司基于Java
EE平台给出的一个实现实例。这个实例给出了一个完整的宠物商店实现。用户几乎不用修改就可以直接使用这个应用来经营自己的网上宠物商店。当然如果您愿意
也可以用来经营别的商品。
最初的Java宠物商店由于全部使用J2EE平台的技术,而某些J2EE平台的技术对系统硬件要求比较高,所以很多Java程序员对原始的Java
宠物商店程序进行了修改。所以Java宠物商店在网上有很多版本。
在这一章我们使用MyBatis 项目的修改版本。
项目是一个开源的数据库访问框架,通过修改配置文件,用户可以快速的修改访问数据库的业务逻辑(可以加到注脚里)。
这个版本有几个好处:
l&代码质量较高,有专人维护更新。
l&源代码开放,允许开发人员作修改。
l&使用常用的Web设计架构 (Struts),易于跟大家平时的工作相结合。
1.1.1&&&&环境准备
在 我们开始部署之前,首先需要了解Java 宠物商店对操作系统以及环境的要求。像大多数的Java
EE应用程序一样,它可以安装在大多数支持Java程序的操作系统上, 比如Windows、Linux、UNIX。本章以Windows
为例进行讲解。本章宠物商店的实例中所需软件的版本及其下载地址如表1-1所示。
表1-1 软件版本及下载地址
Java 宠物商店
本章示例应用
Java 开发运行工具包
Java 应用服务器
VMware Server
Vmware 提供的免费虚拟机服务器
关于JDK,Tomcat 以及Vmware Server的安装请参阅附录。
下载宠物商店程序后我们将得到一个压缩文件包mybatis-jpetstore-6.0.0-bundle.zip,解压缩后,一共有4个文件,
如表1-2所示。
表 1-2 mybatis-jpetstore-6.0.0-bundle.zip文件包内容
授权文件,遵循Apache License, Version 2.0 授权
mybatis-jpetstore-6.0.0-sources.jar
mybatis-jpetstore-6.0.0.war
宠物商店应用程序
1.1.2&&&&部署Java宠物商店
现在我们已经获得了所需的Java 宠物商店应用程序,在部署之前还需要准备应用程序所需要的运行环境。
先介绍一下我所使用的硬件设备。
l& 一台2007年买的台式机:2G内存,双核CPU。操作系统是Windows
7。用来作为服务器部署宠物商店应用程序。
l& 一台笔记本电脑:2G内存,双核CPU,用来运行测试程序,测试宠物商店的响应速度。
首先,我们在台式机上使用Vmware Server虚拟化一个Windows XP 操作系统,选择Windows XP
主要是考虑到很多程序员以及国内企业较为熟悉。
该虚拟机初始分配128MB内存,1个CPU。
另外,使用虚拟机搭建环境更贴近于云计算的真实环境,因为很多云计算产品使用虚拟化技术来提供服务。
使用虚拟化技术部署应用有如下好处:
l& 方便服务升级。通过更改虚拟机配置,可以多分配资源给虚拟机
方便应用迁移。虚拟机存储在硬盘的一个文件里,我们可以通过简单的复制文件,方便的将应用程序迁移到其他计算机上。
l& 便于管理。现在很多虚拟机提供Web访问功能(比如Vmware
Server),当有多台物理机提供虚拟机服务时,系统管理员可以方便的通过Web页面对虚拟机进行管理。
Java宠物商店默认使用hsqldb作为数据库,我们只需要安装应用服务器 Tomcat 6.0 以及Java运行环境JRE
5.0(参见附录)。
运行环境搭建完成后,打开浏览器点击链接,
您将看到Tomcat应用部署页面,如图1-1所示:
图1-1 Tomcat应用部署页面
我们在WAR file to deploy
中选择我们的应用程序mybatis-jpetstore-6.0.0.war点击“Deploy”按钮, 程序即被部署。
现在我们可以看到宠物商店页面,在浏览器中输http://127.0.0.1:8080/
mybatis-jpetstore-6.0.0,将看到如下图所示的宠物商店页面,如图1-2所示。
图1-2 宠物商店首页面
好了现在我们拥有了一个属于我们自己的宠物商店,如果您在一个大的局域网里面,现在就可以给朋友们发消息,让他们访问一下你的宠物商店(注:需要把127.0.0.1替换成虚拟机使用的真正IP地址)。
1.1.3&&&&宠物商店架构介绍
在我们开始对宠物商店测试之前,我们先来了解一下这个宠物商店应用的程序架构,这有利于我们进行测试以及对应用进行修改。
Java 宠物商店从部署角度可以分成三大部分,数据库,客户端浏览器以及宠物商店应用服务器。
有些人把这三部分称为模型(Model), 视图(View) 和运行在应用服务器上的控制器(Controller), 简称MVC
模式,如图1-3所示。
图1-3 MVC模式示意图
图是用户看到并与之交互的界面。对Web应用程序来说,视图就是由HTML元素组成的界面。如何处理应用程序的界面变得越来越有挑战性。MVC一个最大的
好处就是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为
一种输出数据并允许用户操纵的方式。
模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有
最多的处理任务。在我们使用的例子中它通过MyBatis框架来构件对象处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型
能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它
只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。在我们这个应用里是由应用服务器上的程序负责转发数据。
使用MVC模式最大的好处就是降低了应用程序实现上的耦合性,开发人员可以根据需要对某一种对象进行修改而不会影响到其它部分。在实际开发中,可以由三个不同开发组的程序员并行开发同一个程序,而又互不干扰,从而大大提高开发效率。
在云计算环境中,我们甚至可以通过购买服务来扩展模型层的逻辑,以及丰富视图层的展示。而我们可以专注于如何将丰富的资源通过控制器连接在一起。在本书的后续章节,会看到MVC模式在云计算环境里的更多应用。
1.2&&&&&&&&测试
当我们完成了应用程序的部署之后,需要先进行测试以检测程序是否能满足我们的需要。
对于宠物商店应用程序来说,用户首先接触的是宠物商店的首页面,所以在这一节我们首先对宠物商店应用的首页访问速度进行测试。
1.2.1&&&&宠物商店访问速度测试
我们的宠物商店应用程序就像是售货员卖东西,当只有一两位顾客时,售货员一般可以应付自如,当有多名以上顾客时,售货员想要满足多个客户的需求就变得有些困难。主要就是反映速度的降低。顾客的满意度自然就会下降。
所以,对一个应用来说访问速度是客户首先关心的问题。
下面是针对网页访问所总结出来的几个关键指标:
l& 用户将不会注意到少于0.1 s的延迟。
l& 少于1 s的延迟不会中断用户的正常思维,但是一些延迟会被用户注意到。
l& 延迟时间少于10 s,用户会继续等待响应。
l& 延迟时间超过10 s后,用户将会放弃并开始其他操作。
也就是说如果响应速度大于10 s,就一定要针对响应速度做优化。
测试应用程序响应速度的测试工具有很多,这里我们用JMeter测试宠物商店的相应速度(关于JMeter的安装请参考附录)。
(1)&&&&&&&创建测试计划
这里我们模拟100
个用户,每个用户每隔一分钟访问,共访问五次取平均值,右键点击JMeter测试计划,“添加”-&“Threads(Users)”-&“
线程组”,如图1-4所示。
图1-4 添加线程组
在打开的页面输入。
l& 名称:JPetstore。
l& 线程数:100 (模拟100个用户)。
l& Ramp-Up Period :60秒 (每一分钟产生100个线程)。
l& 共循环次数: 5次。
如图 1-5所示。
图1-5 配置线程组
(2)&&&&&&&创建Http
模拟客户端
右键点击JPetStore线程组,“添加”
-&“Sampler”-&“HTTPRequestHTTPClient”,如图1-6所示。
图1-6 添加HTTP RequestHTTPClient
现在我们在HTTP RequestHTTPClient 页面中配置相关信息。
服务器名称或IP填写虚拟机运行时的IP地址,这里笔者的地址是192.168.48.128。
l& 端口号:填写Tomcat的默认端口号8080。
l& 设置协议:http。
l& 方法:POST。
如图1-7所示。
图1-7配置HTTP RequestHTTPClient
(3)&&&&&&&添加监听器
点击右键“添加”-&“监听器”-& “SummaryReport”
(概要报告),如图1-8所示。
图1-8 添加监听器
(4)&&&&&&&执行测试
启动测试,点击“运行”-&“启动”, 如图1-9所示。
图1-9 启动测试
(5)&&&&&&&查看运行结果
点击Summary Report(概要报告),如图1-10所示。
图1-10 察看概要报告
从结果中我们知道,当有一百个用户并发访问时,平均15974
ms才能访问到网站首页。这显然不是一个理想的结果。我们如何改进程序才能使网站的访问速度得到提高呢?
在下一节我们会重点讨论。
1.2.2&&&&其他的测试
据1.1.3节对宠物商店程序架构的分析,我们上面的测试主要针对的是首页面,也就是视图层进行的测试,实际使用过程中,往往还要针对业务逻辑也就是模型
(Model)层进行测试。比如对所有用户进行月结计算,这个时候数据库的压力就会变大,而月结操作往往要在规定的时间内将帐单计算出来。
为了避免在真正的使用过程中遇到过多的问题,就需要我们在真正部署程序之前,对程序的各个方面根据实际情况(比如预期的访问人数,预期的注册用户量以及业务时间限制等)制定测试计划,尽早发现问题,并尽早的解决问题。
在下一节我们会针对首页面访问过慢的问题,提出解决方案。
1.3&&&&&&&&针对测试结果改进应用
进过上面的测试,当同时有100位用户共同访问宠物商店时,平均15974
ms才能访问到网站首页。用户很有可能因为访问速度过慢,而放弃访问我们的宠物商店。这一章我们将努力提高宠物商店的访问速度。
1.3.1&&&&提高访问速度
1.2.1节中我们说过用户访问量的多少直接影响网站的访问速度,就像售货员卖东西,当只有一两位顾客时,售货员一般可以应付自如,当有多名以上顾客时,
一个售货员就很难满足需求.现实中我们可以通过训练售货员使他能为更多的用户服务.在计算机世界中我们也可以通过增强机器的性能来提高应用的响应速度。
由于我们使用虚拟机搭建运行环境,现在我们可以更改虚拟机的配置来提高虚拟机性能。
(1)& 打开Vmware Server 控制台页面。
(2)& 关闭虚拟机。
点击“HardWare”-&“Memory”-&“Edit”,将内存提高到512MB。
如图1-11所示。
图1-11 更改虚拟机内存大小
再次使用JMeter测试, 我们可以看到访问速度有提高,平均响应时间提高到7127ms,如图1-12所示。
图1-12 将内存提高到512mb后的测试结果
虽然还不是很理想,但是用户可以接受这样的访问时间了。但有没有办法使响应速度提高得更多呢?
让我们回想那个售货员的例子,现实生活中通常还有另外一种提高售货速度的方式,那就是增加售货员的数量。
在计算机世界里我们同样可以通过增加计算机数量的方式来提高响应速度。
们将宠物商店应用程序分别部署在两台应用服务器上,而这两台应用服务器分别在两台虚拟机上运行,由于服务器一般有多个CPU,每个CPU又有多核,增加虚
拟机可以充分利用服务器上的CPU资源。此外由于虚拟机以文件的形式存在于硬盘上,我们可以将虚拟机直接复制到另一台计算机上,比如笔者的笔记本上。启动
虚拟机,这样我们就有两台服务器同时为我们的宠物商店应用提供服务。
当用户发现访问应用的速度变慢了,它可以选择访问备用的服务器。在理想
状态下两个应用服务器各接受一半的用户访问。相当于减轻了应用服务器的负担。经过测试,当分别用一半的访问量访问应用服务器时(模拟50个客户同时访
问),访问速度得到明显提高。笔者的测试结果是719ms,如图1-13所示。
图1-13 增加一台应用服务器后的测试结果
这个测试结果是一个很让人满意的结果。但这个解决方案带来一个问题,为了提高访问速度,用户不得不把所有的服务器列表都记下来。用户很有可能因为不方便就不访问我们的宠物商店了,如何解决这个问题呢?
让我再回到那个商店的例子中,在这样的情况下,商店往往会在前端安排一个导购。由导购负责将客户带到能满足客户需求的售货员那里。在计算机世界中也有这种类似导购的程序,它会自动地将我们的请求转发给相应的应用服务器。我们把它称作负载均衡器。
Tomcat应用服务器有一个专门的负载均衡器,我们将在2.1.3 负载均衡中作详细介绍。
现在我们拥有了一个足够快的网上宠物商店应用程序了,为了这个商店,我们需要两台512MB的虚拟主机。
1.3.2&&&&主机管理
通过上面的改进与测试,读者可以看到提高虚拟机性能以及增加虚拟机数量,我们成功地提高了应用程序的访问速度。
但同时部署应用程序所要求的计算资源也越来越多了,尤其是当访问量比较低时,仍然使用两台虚拟机就显得有些浪费资源(在云计算环境里,一般按照使用的计算资源量来收费,多使用虚拟机也就意味着要花更多的金钱)。
如果应用程序可以在用户访问量增大的时候增加适当的计算资源,而在访问量减少时,释放多余的计算资源,那么我们既达到了提高用户访问速度的要求,同时又节约了有限的资金。
上面这个需求可以分为两个方面:
l& 监控用户访问量
l& 根据用户访问量增加或者减少应用服务器的数量
下面我们分别解决这两个问题。
1. 监控用户访问量
监控用户访问量有很多办法,比如设置网络计数器,监控流量。但造成用户访问变慢的直接原因往往是主机内存使用率及CPU使用率的上升。而Java虚拟机提供给我们一个专门的监控工具JMX。
JMX(Java Management
Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
Java 虚拟机本身就内建了一些JMX管理模块,可以监控内存以及CPU使用情况。
由于Tomcat本身使用Java语言实现,所以通过监控Java虚拟机,可以达到监控Tomcat 的目的。
Java开发工具中的JConsole提供了图形化的监控页面。
(1)配置Tomcat 启动脚本。
在Tomcat安装目录中找到catalina.bat, 这是一个Windows脚本。用来启动Tomcat应用服务器。
在:doRun和:doStart方法后面,加入JMX设置选项
Set JAVA_OPTS=%JAVA_OPTS%
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port="9004"-Dcom.sun.management.jmxremote.authenticate="false"-Dcom.sun.management.jmxremote.ssl="false"
上面的设置表明,JMX管理服务端口是9004,访问JMX服务不需要认证(为了方便我们的演示)。
(2)通过JConsole观察Tomcat资源的使用状况
在Windows命令行提示符里输入jconsole 后回车,将呈现如图1-14所示JConsole配置页面。
图1-14 JConsole配置页面
输入Tomcat应用服务器所在的虚拟机IP地址192.168.48.128,JMX服务端口9004点击连接,将展示Tomcat应用服务器所在虚拟机的运行情况,如图1-15所示。
图1-15 Tomcat应用服务器所在虚拟机的运行情况
在图1-15中我们可以看到内存,线程,Java类以及操作系统的相关情况。
现在我们再次用JMeter模拟100个用户同时访问宠物商店,同时使用JConsole观测Tomcat内存使用情况,
如图1-16所示。
图1-16 当用户访问量激增时内存的使用状况
在图1-16中我们可以看到内存的使用有明显增长。这也证明了内存的使用率与所访问的用户量是有因果关系的,我们可以通过监控对内存的使用来判断是否应该增加新的应用服务器。
2. 监控程序设计实现
通过JConsole我们观察到当用户访问量激增时,堆内存的使用迅速上升。现在我们可以通过JMX编程接口动态的得到堆内存的使用率。如代码清单1-1所示。
【代码清单1-1】
package com.skater.
importjavax.management.MBeanServerC
import javax.management.ObjectN
importjavax.positeDataS
importjavax.management.remote.JMXConnectorF
importjavax.management.remote.JMXServiceURL;
public class JMXClient {
publicJMXClient() {
&&&&&&&&&&
super();
publicstatic void main(String[] args) throwsException {
&&&&&&&&&&
StringurlForJMX
="service:jmx:rmi:///jndi/rmi://192.168.48.128:9004/jmxrmi";
&&&&&&&&&&
MBeanServerConnectionjmxServerConnection = JMXConnectorFactory
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
.connect(new JMXServiceURL(urlForJMX), null)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
.getMBeanServerConnection();
&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
String[]domains = jmxServerConnection.getDomains();
&&&&&&&&&&&&&&&&&&&
for(String domain : domains){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
System.out.println(domain);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&ObjectName
memory = new
ObjectName("java.lang:type=Memory");&&&&&&&&
&&&&&&&&&&&CompositeDataSupport
(CompositeDataSupport)jmxServerConnection.getAttribute(memory,
"HeapMemoryUsage");
&&&&&&&&&&
&&&&&&&&&&&double
max = (Long)comp.get("max");
&&&&&&&&&&&double
used = (Long)comp.get("used");
&&&&&&&&&&&System.out.println(used/max);
&&&&&&&&&&
}catch (Exception ex) {
&&&&&&&&&&&ex.printStackTrace();
&&&&&&&&&&
通过这个程序我将得到对内存的使用率。
(1)根据用户访问量增加或者减少应用服务器的数量
通过上面的程序,我们已经可以实时得到内存使用率。下面,我们将通过编写程序来实现增加或减少虚拟机以达到控制应用服务器数量的目的。
Vmware Server 提供了一套Vmware VIX
编程接口及相应的命令行程序操作供开发人员编写程序。VIX编程接口现在支持Perl, COM
语言。暂时没有直接针对Java编程语言的编程接口,但这并不妨碍我们使用Java语言来实现控制虚拟机的数量。我们可以使用Java程序调用命令行。
这里给出启动以及关闭虚拟机的命令。
启动虚拟机的命令:
vmrun -T server -u &UserName& -p
XXX -h https://127.0.0.1:8333/sdk start&
"[vmwaredatastore] winxp/Windows XPProfessional.vmx"
关闭虚拟机的命令:
vmrun -T server -u &UserName& -p
XXX -h https://127.0.0.1:8333/sdk stop
"[vmwaredatastore]winxp/Windows XP Professional.vmx"
现在我们可以通过Java语言实现启动与关闭虚拟机的操作。如代码清单1-2所示。
【代码清单1-2】
packagecom.skater.cloud.
//操作虚拟机
publicclass OperateVM {
public void startVM(String userName, Stringpasswd, String url,
StringdataStore,String path, StringVMName) {
&&&&&&&&&&
ExecuteCommand.execute("vmrun -T server -u "+userName+"
-p"+passwd+" -h "+url
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&
+" start& "["+dataStore+"] "+
path+"/"+VMName+""");
public void stopVM(String userName, Stringpasswd, String url,
StringdataStore,String path, StringVMName) {
&&&&&&&&&&
ExecuteCommand.execute("vmrun -T server -u "+userName+"
-p"+passwd+" -h "+url
&&&&&&&&&&&&&+"
stop&"["+dataStore+"] "+
path+"/"+VMName+""");
packagecom.skater.cloud.
importjava.io.BufferedR
importjava.io.InputStreamR
//执行命令行
publicclass ExecuteCommand {
public static void execute(String cmd) {
&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
Runtime rt =Runtime.getRuntime();
&&&&&&&&&&&&&&&&&&&
Process pr = rt.exec(cmd);
&&&&&&&&&&&&&&&&&&&
BufferedReader input = newBufferedReader(new
InputStreamReader(pr
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
.getInputStream()));
&&&&&&&&&&&&&&&&&&&
String line =
&&&&&&&&&&&&&&&&&&&
while ((line = input.readLine()) != null) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
System.out.println(line);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
int exitVal = pr.waitFor();
&&&&&&&&&&&&&&&&&&&
System.out.println("Exited with error code " + exitVal);
&&&&&&&&&&
} catch (Exception e) {
&&&&&&&&&&&&&&&&&&&
System.out.println(e.toString());
&&&&&&&&&&&&&&&&&&&
e.printStackTrace();
&&&&&&&&&&
(2)集成监控与虚拟机操作代码
现在我们可以把监控代码与虚拟机操作代码集成在一起,做一个虚拟机调度器。如代码清单1-3所示。
【代码清单1-3】
packagecom.skater.
importcom.skater.cloud.util.OperateVM;
//虚拟机调度器
publicclass VMScheduler {
public static void main(String args[]) {
while (true){
doublememoryUsage=0;
&&&&&&&&&&&&
memoryUsage=& JMXClient.getMemoryUsage();
&&&&&&&&&&&&
&&&&&&&&&&&&
//每隔5分钟查看一次内存使用情况
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Thread.sleep(5*60*1000);
&&&&&&&&&&&&&&&&&&&
} catch (InterruptedException e) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
e.printStackTrace();
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
if(memoryUsage&0.5){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
OperateVM.startVM("skaterhome","xxx", "https://127.0.0.1:8333/sdk",
"vmwaredatastore", "winxp","Windows XP Professional.vmx");
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
OperateVM.stopVM("skaterhome","xxx", "https://127.0.0.1:8333/sdk",
"vmwaredatastore", "winxp","Windows XP Professional.vmx");
&&&&&&&&&&&&&&&&&&&
1.4&&&&&&&&难道这就是云计算?
通过上面的介绍,我们已经完整地搭建了一个可以根据应用程序负载动态扩展收缩的宠物商店。
可能读者会问难道这就是云计算?答案是肯定的,但这个例子并不是云计算的全部。
下面让我们看看大家都是怎么定义云计算的。
1. Google对云计算的解释
Pat Stingley:” Froman engineering perspecitve the cloud is a
computing architecture characterizedby a large number of
interconnected identical computing devices that can scaleon demand
and that communicate via an IP network.& From a
business perspective it is computingservices that are scalable and
billed on a usage basis.”
Pat Stingley(google的研究员)
认为从工程师的角度而言云计算是一种以按需,可扩展的方式获得所需的资源的架构。从商业的角度看这是一种按需付费的服务方式。
2. Baidu百科上对云计算的解释
计算概念是由Google提出的,这是一个美丽的网络应用模式。狭义云计算是指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的
资源;广义云计算是指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的服务。这种服务可以是IT和软件、互联网相关的,也可以是任意其他
的服务,它具有超大规模、虚拟化、可靠安全等独特功效。
3. 维基百科上对云计算的解释
云端计算(英文:Cloud
computing,中国大陆译作云计算,台湾译作云端运算),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。整个运行方式很像电网。
从上不难看出,按需分配资源,根据得到的计算资源付费是云计算的核心内容。
而我们的宠物商店应用随着我们不断深入的测试,根据逐步增长的需求,对资源进行了合理的按需分配,符合云计算的定义,所以它属于一个云计算应用。
1.4.1&&&&什么是云计算
通过宠物商店的例子,我想可能会有读者认为云应用必须得使用虚拟化技术。
那么只有一台计算机没有使用虚拟化技术没有连接网络能不能称之为云计算?
我们不妨提几个假设:
假设一: 云必须使用虚拟化技术进行计算
设云只能使用虚拟化技术进行计算,那么是不是说现在所有的云计算都使用了虚拟化技术?比如Google的云计算系统,微软的云计算系统或者任何人的什么云
计算系统?可惜我们拿不到确切的数据说明他们是否都使用虚拟化技术。我们不妨再看看我们搜索到的云计算的定义,它强调的是资源的管理与利用,并没有提到虚
拟化技术,如果虚拟化技术是云计算不可缺少的一部分,那么就应该在定义的时候有明确说明。事实是提高计算资源利用率与管理的方式不止虚拟化技术一种。使用
网格技术我们同样可以提高单台计算机的使用效率。假设一不成立。
假设二: 云只能利用网络资源进行计算
通过我们前面查到的现有定义,确实有说这是一种网络应用模式。
现在我们假设云只能利用网络资源进行计算,一旦失去网络就失去了连接云计算的能力,那么云的致命弱点就在于网络链接。而网络链接被破坏,或不正常是一个常见的现象。
难道在失去网络的状况下,使用云计算的客户只有等待网络恢复,而没有任何方法继续他们的工作么?
者认为,即使是跟网络紧密相关的应用,比如网站或者数据位于网络中的应用,在失去网络连接的时刻,也应该有备份地解决方案。比如多路电话系统。而像模拟计
算,数值分析,以及数据在本地有备份的应用,当网络连接失去之后,云系统更应该正常工作。依然可以利用本地计算机或者本地现有的资源进行计算。在这样的情
况下就更有必要充分利用本地资源,而云计算中的某些技术提供了很好的解决方案。假设二同样不成立。(证明假设一与假设二不成立的最好方法是,使用非虚拟机
的云计算技术提高本地程序的工作效率,参见本书第八章的应用,将使用网格计算技术提高本地Excel的工作效率)
如果各位读者有前面假设的观点,也不是一件坏事,因为云计算确实可以极大的利用网络资源,而虚拟化技术确实是一种高效并简单的管理与利用计算资源的有效方法。笔者想说明的是利用网络资源或使用虚拟化技术并不是云计算的全部。其核心在于资源管理与利用。
拟化技术以及网络资源为云计算提供了相应的技术和资源支持,但不使用它们一样可以建立云计算环境。比如我们可以不使用虚拟机,而将应用部署到物理机环境
中,使用其它云计算技术充分利用CPU每个核心同样可以提高宠物商店的响应速度。而使用虚拟化技术和网络资源只是备选方案。
下面我们来看看云计算框架的组成和相关的技术。
1.4.2&&&&云计算架构简介
云计算中有几个关键的名词,基础设施即服务(IaaS),平台即服务(PaaS),软件即服务(SaaS),资源供应(Provisioning),资源安全(Security)。
很多资料把XaaS解释为X即服务,我觉得译为X作为服务可能更易于理解,因为软件,平台或者基础设施本来并不是服务,只有经过一定的改造,他们才成为一种能为多人使用的服务。
(1)基础设施即服务(IaaS)
云计算体系中,IaaS处于最底部。主要指的是硬件设备,比如计算机、交换机、路由器、防火墙、机架、因特网、局域网,存储设备。主要用到的技术包括虚拟
主机技术,操作系统以及各种硬件管理技术。在我们宠物商店的例子里,我们通过安装虚拟化软件具有了提供虚拟主机的能力,相当于在家里面创建了一个简单的可
以提供硬件服务的系统。
(2)平台即服务(PaaS)
平台作为服务(PaaS)处于基础设施作为服务
(IaaS)的上层。主要指的是网格计算软件,并行计算软件,负载均衡软件,数据库等仍需要在上面进行开发才能使用的资源。在我们宠物商店的例子里,安装
在虚拟机的操作系统和Tomcat服务器就相当于用户开发平台,在这个平台上我们可以部署各种应用程序。
(3)软件即服务(SaaS)
件作为服务(SaaS)处在最高层,这样的软件不需要用户做过多开发就能直接使用,比如博客管理系统、内容管理系统、企业资源计划系统(ERP)、科学计
算软件(比如MatLab),办公软件(Google Doc, MS
Office)等等。在我们宠物商店的例子里,我们将从Internet上下载的宠物商店应用程序部署到Tomcat应用服务器上供客户直接使用就相当于
提供了一个软件服务。
事实上在PaaS与SaaS之前,软件行业曾提出过其它类似的概念,称为SOA面向服务的应用,笔者从实践的角度认为
它是PaaS与SaaS的结合体,因为当时做SOA程序主要就是使用公开协议在某种服务器上提供应用服务供更多的人或其他应用程序使用,而能接受与解释特
定协议的服务器,在云计算架构中算是一种提供了平台服务的PaaS,我们运行在这种服务器上的供更多人与设备使用的应用则可称为SaaS。
然由于在本章中我们提供的服务只能为自己服务,所以只能叫做私有云系统。另外,笔者认为上面的三层在真实的云计算环境中是可以独立存在的,我们可以逐层搭
建云系统,但如果我们只搭建其中的一层或几层,只要它可以满足按需分配资源的要求,仍然可以说它是一种云计算化的系统。可能有些读者不这么认为,但笔者认
为,在真实的应用环境中很难全面部署一个纯粹的云系统,我们国家从上世纪80年代开始建设信息系统,今天大部分的企业,组织以及政府已经部署了很多成熟的
信息系统,它们被部署在多种多样的硬件以及软件平台上,想要引入云计算不可能一蹴而就。我们需要根据现有系统的架构分析用户最迫切需要解决的问题,然后寻
找可能的解决方案。没有适合所有用户情况的万能解决方案,云计算也是一样,但是云计算中的很多技术和解决方案确实可以帮助我们解决很多我们碰到的现实问
除了上述三个云计算层次外,还有两个名词,可能各位读者不太熟悉,它们是资源供应(Provisioning),资源安全(Security)。
(4)资源供应
源供应主要解决如何部署,相信通过第一章的介绍读者们已经感觉到搭建一个按需分配资源的应用需要花多少功夫,可能有的读者会想“假如在实际应用中我按照这
种办法解决资源不足的问题,也许一两个应用我还能解决得了,但问题是我们单位不止一个应用啊,而且还运行在不同的操作系统上,我要真这么解决了,以后的维
护还有部署问题就变得更复杂”。这样的考虑绝对是正确的,所以在云计算中专门提出Provisioning这个主题,它强调的就是怎么部署,如何根据应用
的要求提供不同的运行环境并自动地将应用部署在所需要的环境里。常用的技术有虚拟化技术,主机自动化安装技术,软件自动化安装技术。
(5)资源安全
源安全(Security),这个问题相信经历过病毒破坏,账号被盗的读者应该能有深刻体会。资源安全在云计算中同样重要,针对云计算中的不同服务层次,
需要逐级建立相应的认证及授权系统、日志监控系统、防火墙、杀毒系统等。但笔者认为目前并不存在专门为云计算而创建的特有的资源安全技术,组成云计算的各
种技术一般都会配置相应的安全技术。如果真要说有专门的云安全技术,笔者认为主要是如何使某个特定的云计算应用可以将各个云计算模块间的安全整合到一起,
在满足安全的前提下还能方便工作。在本书中关于云资源安全我们将结合应用来说明。
关于云计算架构,笔者是根据自己的工作经验与体会得到的,欢迎各位读者的批评指正。
笔者的观点可以总结为如图1-17所示的架构。
图1-17 云计算架构
从使用的角度来看,最终使用者主要使用SaaS上面的应用,开发人员需要使用PaaS与SaaS提供的相关资源来创建应用,而系统、网络管理员主要关心IaaS与PaaS的搭建。
合以上,我们会发现云计算大量的使用了现有的计算机技术,但是在现有技术的基础上,它将这些技术紧密整合到了一起以达到按需分配的目的。想象一下在一个拥
有上千台计算机的组织(比如学校,公司,政府,科研机构,电信运营商)里,如果可以将这些计算资源有机的组织在一起,合理调度应用程序,无疑将为该组织提
供强有力的计算能力,相当于建立了一个超级计算机,而这台超级计算机还可以通过不断加入新的计算资源而变得更加强大。如此强大的计算资源可以为本单位的业
务提供强有力的支撑,或者将部分服务销售给他人。这也是云计算的魅力所在。
1.4.3&&&&云计算的起源与发展
从上一节的描述中我们可以看出,云计算确实是一个庞大的系统。但在这个系统中我们可以看到很多熟悉的技术和概念。为什么要设计这样一个复杂的系统呢?
一 般来说大家认为云计算是Google公司提出的。Google
为什么会提出云计算?我们来分析一下Google公司的业务。首先它提供的主要产品是搜索,而搜索是在一个浏览器里执行的,这就需要解决用户访问速度的问
题,通过宠物商店的例子我们知道有两种方法达到这一点增强主机性能以及添加更多的服务器。自然的Google就面临合理分配资源的需求。而作为一个不断发
展的公司,除了搜索业务,Google还提供了更多的业务比如GoogleEarth,Google 邮箱,Google
文档等等,这些产品的更新与部署同样需要大量的人力物力,资源供应(Provisioning)就显得必不可少,而资源安全对于一个需要用户付费来赢利的
公司来说更是不可或缺。最终Google的工程师们把自己的这套系统整理出来称它为云系统。
概念是Google公司提出的,但Google
所面临的这些问题事实上很多公司都碰到了并提出了自己的解决放案。比如自动化的主机安装,IBM很早就有xcat主机部署软件,Intel有PXE网络安
装服务器。针对大数据量及大并发量操作,很早就有LSF这样的分布式处理软件,各种应用服务器也都有自己的负载均衡软件,Oracle也将它的数据库实现
为分布式处理系统等等
正是由于可以踩在这些巨人们的肩上,现在的云计算系统将成为各种技术的集大成者,并为提供更好的计算环境做出贡献。
1.5&&&&&&&&小结
过这一章的介绍,我们成功的部署了一个Java宠物商店,并将它逐步部署到云计算环境里成为一个真正的云应用。希望这一章的介绍能使读者们对云计算有一个
初步认识,但这只是云计算的冰山一角。云计算就像是机器猫的口袋一样,包含了太多有趣新奇的技术,笔者将与各位读者一起探索“机器猫口袋里的秘密”。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 应用程序java安全阻止 的文章

 

随机推荐