张洪
摘要:在现代社会,企业为了提高自身的竞争力,纷纷构建了自己的计算机网络和数据中心。但是高昂投入和后期管理成本,以及很低服务器利用率,给企业带来了不小的负担和资源浪费。云计算的兴起,有利于企业提升核心竞争力,有利于提高效率、降低成本和技术创新。该文对利用JMX技术,JBOSS和Hyper-V来构建企业私有云平台进行了一些探索和研究。
关键词: 私有云;JMX;JBOSS;Hyper-V
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2016)04-0107-02
随着现代社会经济的高速发展,企业面临的生存环境发生了翻天覆地的变化,顾客的需求不断变化,生产技术不断创新,产品生产周期不断缩短,企业之间的竞争日益激烈,促使企业必须快速提升企业管理水平。在这种背景下很多企业构建了自己的计算机网络和数据中心,用于企业的管理,提高管理效率。但是高昂投入和后期管理成本,以及很低服务器利用率,给企业带来了不小的负担和资源浪费。云计算的兴起,使企业能够降低了IT运作成本,企业无需为烦琐的细节而烦恼,能够更加专注于自己的业务,得以将有限的资源和人力用于拓展业务、有利于企业提升核心竞争力,有利于提高效率、降低成本和技术创新。本文对如何利用JMX技术,JBOSS 7和Hyper-V来构建企业私有云平台进行了一些探索和研究。
1 JMX、JBOSS和Hyper-V
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面。JMX优点可以非常容易的使应用程序具有被管理。
JBoss 7是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用,而不用支付费用。JBoss 7构建于先前版本的良好基础之上,并提供更出色的性能、更低的内存占用率、分布式管理和Java EE6 Web Profile认证。
Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似Vmware和Citrix开源Xen一样的基于hypervisor的技术。Hyper-V是微软提出的一种系统管理程序虚拟化技术,能够实现桌面虚拟化。Hyper-V设计的目的是为广泛的用户提供更为熟悉以及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。通过虚拟化我们可以有效提高资源的利用率。
2 如何构建企业私有云
在云计算中会根据用户访问量的增加而增加服务器数量,当用户访问量减少是,会释放多余的服务器,这样达到了提高用户访问速度,又节约了计算资源的目的。假设我们在Windows服务器上用Hyper-V创建了二个虚拟机testVM01和 testVM02,使用JBoss 7向用户提供Internet信息服务。当用户访问量少的时候使用一台虚拟机向用户提供Internet信息服务,当用户访问量增加超过阀值时,启动第二台虚拟机对用户访问量进行分流,以提高用户访问速度。要实现这样的目的,我们有二个问题要解决,一个就是怎样确定用户的访问量;二就是根据访用户问量动态的对服务器的数量进行增加或减少。在实现过程中如何确定用户访问量有很多方法,流量监控,网络计数器和内存使用率等,在本文中使用JMX技术来实现对内存使用率进行监控,并根据内存使用情况来确定用户访问量。
3 如何实现企业私有云
要使用JMX技术来实现对内存使用率进行监控,我们首先要在JBOSS 7中对相应的配置文件进行修改,JBOSS 7和旧的版本有很大的不同,旧版本中用来启动JBoss服务的run.sh不见了,取而代之的是standalone.bat(独立运行模式)及domain.bat(域运行模式)。我们这里用的是standalone.bat(独立运行模式)来启动JBoss服务,因此要对standalone.xml配置文件进行修改,实现核心代码如下:
通过修改配置文件,让JBoss服务器允许访问JMX服务,现在我们就可对JMX进行编程,以实现对堆内存使用率进行动态的访问,从而确定用户访问量。实现核心代码如下:
String host = "127.0.0.1";
int port = 9999; // 默认的JMX服务访问端口
String urlString =System.getProperty("jmx.service.url","service:jmx:remoting-jmx://" + host + ":" + port);
JMXServiceURL serviceURL = new JMXServiceURL(urlString);
JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, null);
repository = jmxConnector.getMBeanServerConnection();
ObjectName heapObjName = new ObjectName("java.lang:type=Memory");
MemoryUsage heapMemoryUsage = MemoryUsage.from((CompositeDataSupport)repository.getAttribute(heapObjName, "HeapMemoryUsage"));
long maxMemory = heapMemoryUsage.getMax();
long usedMemory = heapMemoryUsage.getUsed();
double heapMemUse =(double)usedMemory/ maxMemory;//堆使用率
通过上面的程序我们可以实时的返回内存使用率,我们可以利用内存使用率情况来动态实现对虚拟机进行启动或关闭,以达到控制服务器数量的目的。Hyper-V给我们提供了相应的命令接口,能让我们在程序中控制虚拟机的启动和关闭。我们可把内存监控和虚拟机操作集成在一起,做成一个可动态伸缩的虚拟服务器调度程序,实现核心代码如下:
while(true)
{
double heapMemUse=0;
Thread.sleep(5*60000);//每隔5min查看一次内存情况
heapMemUse=JMXCon.getheapMemUse();if(heapMemUse>0.5){String cmd = "cmd /c Start-VM testVM02"; //启动备用虚拟机服务器Runtime.getRuntime().exec(cmd); }else{String cmd = "cmd /c Stop-VM testVM02 -Force "; //关闭备用虚拟机服务器 Runtime.getRuntime().exec(cmd); }}
4 结束语
通过上面的代码,我们利用JMX技术,JBOSS 7和Hyper-V已经可以完整的搭建一个简单的、可以根据用户访问量动态伸缩的Internet信息服务平台。根据云计算的定义,它通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。按需分配资源。而这个实例按照增长的需求,利用虚拟技术对资源进行合理动态的调度分配,符合云计算的定义,所以属于一个云计算的应用。希望本文能给企业在创建自己的私有云平台起到一点借鉴作用。
参考文献:
[1] 徐强,王振江. 云计算应用开发实践[M].北京:机械工业出版社,2011.
[2] 李刚.经典Java EE企业应用实践[M].北京:电子工业出版社,2010.
[3] 王淑江.Windows Server 2012 Hyper-V虚拟化管理实践[M].北京:人民邮电出版社,2013.
[4] 陈聪,俞东进.基于JMX的Mule ESB管理控制台[J].计算机时代,2012(3):25-27.