《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 基于JMX实现中间件的构件化设计

基于JMX实现中间件的构件化设计

2008-12-22
作者:张丽娜 战守义 闫波
1. 引言
    随着计算机技术迅速发展,应用程序" title="应用程序">应用程序的规模不断扩大,特别是Internet的出现,许多应用程序需在网络环境的异构" title="异构">异构平台上运行。在这些硬件平台上又存在各种各样的系统软件,这些硬件系统平台" title="系统平台">系统平台还可能采用不同的网络协议和网络体系结构连接。如何把这些系统集成起来并开发新的应用是一个非常现实而困难的问题。如此复杂的分布环境、灵活的应用模式、广泛的包容性等,传统的软件设计思想已远远不够。在这一背景下,中间件技术应运而生
2. 中间件简介
    中间件作为存在于系统软件与应用之间的特殊层次,抽象了典型的应用模式,从而使应用软件制造者可以更多地将思路放在业务逻辑中,并基于标准的形式进行开发。一些工业标准的推出,进一步使中间件成为可复用" title="复用">复用构件的运行框架,加速了软件复用的进程。中间件系统的工作架构如图1所示。

图1  中间件系统的工作架构


    针对不同的操作系统和硬件平台,中间件可以有符合接口和协议规范的多种实现。从而使应用系统开发人员可以更多地将精力放在业务逻辑的实现中。中间件主要有以下一些特点:满足大量应用的需要;运行于多种硬件和OS平台;支持分布计算;提供跨网络、硬件和OS平台的透明性的应用或服务的交互;支持标准的协议;支持标准的接口等特征。按照其功能,中间件主要分为五类:
·远程过程调用中间件:远程过程调用是一种广泛使用的分布式应用程序处理方法。一个应用程序使用远程调用来“远程”执行一个位于不同地址空间里的应用。
·消息传递的中间件:消息传递的中间件指的是利用高效可靠的消息传递机制进行平台无关的数据交互,并基于数据通信来进行分布式系统的集成。
·基于对象请求的中间件:对象请求代理中间件是定义异构环境对象透明地发送请求和接收响应的基本机制,是建立在对象之间的中间件。
·事务处理中间件:事务处理中间件界于client和server之间,进行事务管理与协调、负载平衡、错误恢复等,以提高系统的整体性能。
·数据库中间件:在C/S环境下数据库中间件是介于客户机和数据库服务器之间的中间层,通过它可以对后台数据库进行访问。
3。JMX技术
JMX(Java Management Extensions)是J2EE规范中的一部分,是一套标准的代理和服务。是一个可为应用程序植入管理功能的框架,其目的是解决分布式系统管理的问题,现在逐渐成为管理复杂软件系统的解决方案。JMX是一种应用编程接口,可扩充对象和方法的集合体,可以用于跨越一系列不同的异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用它提供了用户界面指导、Java类和开发集成系统、网络及网络管理应用的规范。管理对象是JMX应用程序的核心。JMX结构包括:支持Java的Web浏览器用户接口,管理运行模块ARM(Admin Runtime Module)和应用。这三个部件之间通过RMI(Remote Method Invocation)进行通信。JMX的体系架构被分为三个层次,分别是Instrumentation层、Agent层和Distributed Service层。图2是JMX的体系架构图。

   Instrumentation层定义了实现JMX可管理资源的需求。JMX可管理资源可以是包括应用程序、服务组件、设备等任何对象。可管理的资源通过暴露一个JAVA对象或包装器来描述自身的一些可管理的特性,这些特性使得资源对外部表现出来,以便被JMX兼容的应用程序进行调用和管理。用户通过使用一个或多个MBean(Manageable Bean)来提供要管理资源的对外表现,目前MBean的有四种类型,分别是standard, dynamic, model, open MBean。Instrumentation还定义了一种通知机制,目的是允许MBean与环境就其改变进行交互,类似与JAVABEAN中的属性改变通知机制。Agent层,此层定义了实现代理的需求,代理的职责是控制和暴露注册的管理资源,缺省情况下,管理资源代理与其所管理的资源位于同一个主机下。代理需求使用Instrumentation层来定义标准的MBean服务器管理代理、支持服务和连接器。J2EE规范中提供了HTML适配器和RMI适配器。当一个JAVA虚拟机可用时,JMX代理可以通过主机管理资源定位,JMX代理不必知道它为哪一个资源服务。JMX管理资源可以使用任何提供服务的JMX代理。管理人员可以通过分布Instrumentation层中描述的协议适配器和连接器来与MBean进行交互。代理不需要知道关于连接器活交互应用程序的任何事情。Distributed Service层:此层的目的是为实现JMX管理应用定义一些接口,以下几点概括了分布层的功能。为管理应用程序提供一个接口,可以透明的与代理和要管理的资源通过连接器进行交互;把代理和MBean进行语义级映射到丰富数据协议的构造中,来对代理和MBean暴露一个管理视图;将来自于高层管理平台的管理信息分布到大量的JMX代理中;把大量来自于JMX代理中的管理信息融进逻辑视图中,这些逻辑视图与终端用户的业务逻辑操作是相关的;提供安全机制;
    目前,JMX逐渐成为复杂应用管理的解决方案,可以非常容易的使应用程序具有被管理的功能;提供具有高度伸缩性的架构;每个JMX Agent服务可以很容易的放入到Agent中,每个JMX的实现都提供几个核心的Agent服务,用户也可以根据特定的需求定制编写服务,服务可以很容易的部署和撤销部署,同时还集成了现有的一些管理解决方案,如SNMP。
4. 基于JMX实现中间件的构件化设计
4.1 中间件设计要求

    中间件,从本质上是对分布式应用的抽象,因而抛开了与应用相关的业务逻辑的细节,保留了典型的分布交互模式的关键特征。经过抽象,将纷繁复杂的分布式系统经过提炼和必要的隔离后,以统一的层面形式呈现给应用。应用在中间件提供的环境中可以更好地集中于业务逻辑上,并以构件化的形式存在,在异构环境中实现良好的协同工作。构件是可独立配置的单元,因此构件必须自包容,强调与环境和其他构件的分离,因此构件的实现是严格封装的,外界没机会或没必要知道构件内部的实现细节,可以在适当的环境中被复合使用,因此需要提供清楚的接口规范,可以与环境交互,此外构件不应当是持续的,即构件没有个体特有的属性,理解为构件不应当与自身副本区别,在任何环境中,最多仅有特定构件的一份副本。基于构件化的中间件是面向底层的,跟企业的应用业务逻辑无关。
4.2 中间件的构件化设计
    基于构件化的设计思想,考虑到中间件所处的多平台异构环境以及客户定制需求,决定了中间件从设计是基于构件化的,即系统各功能模块是可拼装的,系统的核心功能所占的比重非常小,而大多数的功能模块作为一种构件根据需要来“插入”到系统中,各功能模块自身是独立的,核心模块根据系统配置文件决定哪一个功能组件作为插件插入进系统来提供服务,这样的设计保持了系统核心" title="系统核心">系统核心的精练,同时也使得各模块之间是一种松散的关系,符合构件化设计的原则。而功能模块的设计是基于MBean的,采用JMX作为底层实现,因此可以跨越一系列不同的异构操作系统平台、系统体系结构和网络传输协议,最大限度的实现组件的复用,例如基于构件设计事务处理、安全、远端访问、死锁检测、实体同步、数据库访问等功能模块几乎可以不用修改就可以移植到JMX兼容的结构中。图3是遵循这种思想的中间件系统的概念图。

    如上图,JMX的MBean服务器在单独的服务实现中成为一条调用总线(Invocation Bus),系统的功能模块通过MBean来展现其管理接口,服务与服务之间的关系相对独立,一个服务(即一个功能模块)通过MBean服务器来寻找和定位另外一个需要调用的服务,因此可以减少这种服务之间紧密的集成关系,这使得服务器的设计更松散模块化更强,
    目前,在中间件中各功能模块通过可管理的注册到MBean Server上的MBean来实现,MBean服务器通过Agent来对用户作展现,可以把Agent看作MBean服务器。一个MBean就是一个JAVA对象,它遵循在JMX规范的Instrumentation level中所阐述的设计模式。一个MBean可以表现一个设备、一个应用或需要管理的任何资源。MBean暴露一些管理接口,例如一系列可读写的属性或可以调用的方法,以及一些自描述符。管理接口在MBean实例的生存期内不会改变。标准的MBean通过包含的方法名静态的定义管理接口,而动态的MBean实现一个特定的JAVA接口,在运行时暴露其属性和操作。
    在一个JAVA虚拟机里只启动了一个MBean服务器,每一个服务是一个MBean,通过MBean服务器来管理,服务可以通过MBean作为一个构件来插入到中间件的内核中。实际上,在应用服务器启动时,除了实例化一个JMX MBean服务器之外什么也没做。所有的服务同MBean配置文件来装载进系统和作为一个MBean注册到服务器上,从而保持系统核心的精练,即核心模块少,并且是基于构件化设计的,大多数服务作为一种插件根据配置来调入,配置文件由XML来实现,用户可以根据具体情况来定制配置决定调入不同的服务。下面介绍一下系统核心的模块化实现描述,首先在主应用程序中启动一个ServerLoader,由它来生成一个MBean服务器的实例,启动后自动创建几个必须的内部的服务和初始配置,一般要创建一个日志模块和一个服务控制器模块,日志管理模块的作用是记录MBean服务器所做的全部操作,以便进行系统监测和错误分析,服务控制器模块的功能是读取ServiceConfiguration.xml文件,此文件中包含所有的可以被中间件管理和使用的服务。因此将服务以插件的方式装载到服务器中。核心构件化设计的优势是内核程序只负责提供一系列必须的核心功能,通过这些核心功能将其他的外围系统级服务组合到一起。图4是中间件的设计概念图。

    如上图所示,基于JMX中间件的构件化设计提供一种通用的类似于系统总线的结构来集成模块、和其他的插件。构件通过MBean服务来声明然后被装载进服务器,可以使用JMX对组件进行管理。由于整个系统的架构是基于构件化的,通过插件集成到内核中,模块化的实现是通过JMX来完成的,作为一种工业标准接口,它可以管理内部组件和部署在上面的应用程序。高度模块化对应用开发人员有很多好处,它可以使紧凑的代码变得更为简洁来支持应用程序,例如在应用中EJB的钝化(passivation)如果用户认为没有必要,就可以修改配置文件的某些特性使其钝化操作不生效,这样在进行服务装载时则略过此功能模块不进行装载,如果后来决定使用钝化操作,则将服务器的钝化功能激活即可。同时JMX为所有不同的来自JAVA的软件和硬件组件提供管理和监测的标准,为大量现存的管理标准提供集成。
5.结束语
    JMX具有良好的跨平台特性和构件化思想,提供统一的接口而不依赖于任何的生产厂商,采用JMX作为中间件底层设计,可以屏蔽多样的系统资源,保证良好的互操作性。基于构件化的设计可以降低模块间的耦合度,提高系统的伸缩性。

参考文献
[1] David Wells, Jose Blakeley, Craig Thompson. "Architecture of an Open Object-Oriented Database Management System."[J] IEEE Computer, October 1992.
[2] Thompson, C., P. Pazandak, V. Vasudevan, F. Manola, M. Palmer, G. Hansen, T. Bannon, "Intermediary Architecture: Interposing Middleware Services between Web Client and Server", http://www.objs.com/OSA/Intermediary-Architecture.html, 1998.
[3] Loyd G. Williams, Connie U. Smith, Performance Evaluation of Software Architecture, WOSP 98, Santa Fe.N.M
[4] David Garlan and Mary Shaw, An Introduction to Software Architecture, CMU Software Engineering Institute Technical Report, 1994

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。