一种支持动态管理的SCA服务模型研究

scwsl

贡献于2014-04-24

字数:0 关键词: WEB服务/RPC/SOA

第39卷 第12期 2012年12月 计 算 机 科 学 Computer Science Vol.39No.12 Dec 2012 到稿日期:2012-02-15 返修日期:2012-06-08  本文受国家自然科学基金(60873081 ,M 0921005 ,60970095 )资助。 龙 军(1972-),男,博士,副教授,主要研究方向为网络资源管理与服务技术,E-mail:125953182 @qq.com;赵 贵 虎(1983-),男,硕 士 生,主 要 研究方向为服务组合技术;张祖平(1966-),男,教授,博士生导师,主要研究方向为信息融合与信息系统、参数计算与生物计算、网 络 容 错 路 由 算法及协议。 一种支持动态管理的SCA服务模型研究 龙 军 赵贵虎 张祖平 (中南大学信息科学与工程学院 长沙410075)   摘 要 为解决 SCA 和 OSGi的结合在分布式环境下不能很好支持运行时组件模型动态管理的问题,在分析二者传 统结合方式的基础上,建立了一种基于 OSGi的 SCA 服务模型———DOSGi_SCA。DOSGi_SCA 以分 布 式 OSGi为 基 础,构建了服务注册中心来管理本地服务和远程服务,实现了在分布式环境下支持运行时组件模型的动态管理。应用 实例表明,该模型实现了 SCA 和 OSGi的优势互补,充分发挥了各自的优点,弥补了各自的不足。 关键词 SCA,动态管理,组件模型,分布式 OSGi,DOSGi_SCA 中图法分类号 TP311   文献标识码 A   Research of SCA Service Model for Dynamic Management LONG Jun ZHAO Gui-hu ZHANG Zu-ping (School of Information Science and Engineering,Central South University,Changsha 410075,China)   Abstract The traditional methods based on the combination of SCA and OSGi are not able to support the dynamic ma- nagement of component modules in the distributed environment at runtime.Based on the analysis of the traditional me- thods,this paper proposed an OSGi based SCA service model-DOSGi_SCA.To support dynamic component module ma- nagement at runtime in the distributed environment,DOSGi_SCA constructs a service registry center to manage local and remote services based on the distributed OSGi.The practical example demonstrates that this model takes advantages of both SCA and OSGi while avoiding their deficiencies. Keywords SCA,Dynamic management,Component model,Distributed OSGi,DOSGi_SCA   1 引言 在软件工程中,为了提高软件的复用技术和软件的开发 效率,需要把一个复杂的系统进行抽象,将其分解成为一个个 可独立处理的可管理组件单元。但如何使组件单元能够具有 动态可插拔性,并使系统保持各个部件的松耦合性等问题仍 然是软件开发中所面临的重要问题[1]。 SCA 提供了一个模型基础,用于创建基于面向服务架构 (Service-Oriented Architecture,SOA)的应用程序和解决方 案。SCA 所依托的理念是将业务功能作为一系列服务组件 提供,从而创建能满足特定业务需求的解决方案。这 些 服 务 组件可以包含为已有系统中的应用程序和业务功能创建的新 服务,以及作为复合应用的一部分重用的应用程序。 OSGi(Open Service Gateway Initiative)最初是为了解决 家庭网络或者嵌入式设备由于本身的限制(CPU、内存和带宽 等)而提出的一个解决方案,是一个轻量级的框架。并 且,由 于 OSGi在网络及动态性方面的优势,其已经应用于移动通 讯、嵌入设备和企业开发等众多领域。 SCA 和 OSGi在关注点上有很大不同:SCA 关 注 于 组 件 与组件之间、服务与服务之间的交互和合成[2],而 OSGi更关 注于运行环境中组件和服务的动态更新特性[3]。因 此,SCA 与 OSGi的结合可以实现SCA 和 OSGi的优势互 补,充 分 发 挥各自的优点,并弥补各自的不足[4]。 OSOA 组织在2007年3月 发 布 SCA 正 式 规 范 SCA1.0 的同时,还发布了一些扩展规范,其中包括描述 SCA 和 OSGi 结合的白 皮 书《Power Combination:SCA,OSGi and spring》。 在这本 白 皮 书 中,描 述 了 SCA 与 OSGi结 合 的 基 本 理 论,但 是目前业界并没有提供一种实用的解决方案[5]。OSOA 提出 的白皮书也只是提供了理论上的支持,而实现的方法并没有 提供[6]。 本文在分析 SCA 和 OSGi传统结合方式的基础之上,深 入研究二者的运行机制,建立了一种基于 OSGi的 SCA 服务 模型,以解决 SCA 和 OSGi结合在分布式环境下不能很好支 持运行时组件模型动态管理的问题,实现 SCA 和 OSGi的优 势互补,充分发挥各自的优点,弥补各自的不足。 2 SCA 模型 Component(组件)是 SCA 组合构件中业务功能的基础 元素。其通过 SCA 组合构件(Composite)联合成完整的业务 解决方案。Component是实现的可配置实例。Component提 ·411· 供和消费服 务。多 个 Component可以使用和配置为同一个 实现,而每个 Component又可以对实现有不同的配置。如图 1所示,一个 Component包 括4个 部 分:服 务(Service)、实 现 (Implementation)、属性(Property)和引用(Reference)[7]。 图1 SCA Component Implement(实现)是提供服务或引用其他地方所提供的 服务的业务功能的具体实现。另 外,某 个Implement可 以 有 一些可设置的属 性 值。SCA 允许从广泛的实现类型中选择 任何一种技术,比如Java、BPEL 或 C++。每种类型都代表 了特定的实现技术。该技术不仅仅简单地定义实现语言,如 Java,也可以定义使用某个特定的框架或运行时环境,例如包 括使用 Spring framework或Java EE EJB技术的Java实 现。     Component通过服务提供它的业务功能,其他的 Compo- nent通过访问该 Component服务的形式来获取它的业务功 能。如果 Component要引用其他 Component的服务,就必须 要通过 Reference(引 用)的 形 式。通 常 一 个 Component需 要 引用多个其他的Component的服务。Property(属性)允许通 过外部设置的数据值来配置实现。数据值可通过组件提供, 也可能源自此组件的上层组合组件的属性。 Composite是 SCA 中另外一个非常重要的概念。Com- posite是 由 一 些 有 关 联 的 Component组 合 而 成,部 署 时 以 XML文件的形式构成。因为它是一个独立部署的单元,所以 在分解系统的时候能够提供很高的灵活性。例如在更新一个 系统时,只 要 保 持 接 口 不 变,就可以随意替换发生变化的 Composite,而其他部分不会受到影响。 3 OSGi模型 在 OSGi规范中,bundle是 部 署 基 于Java的 应 用 的 唯 一 实体。OSGi服务由 bundle提 供,服务部署也是以bundle作 为载体,bundle可认为是一个软件构件,因此 OSGi的计算模 式也可被称为“面向服务的构件模式(Service Oriented Com- ponent Model)”。OSGi框架的一个最重要的特性是动态更 新。在一个动态扩展的 OSGi环境中,OSGi框架管理 bundle 的安装和更新,同 时 也 管 理 bundle和服务之间的依赖关系。 在一个bundle的生命周期中可能处于以下6个 状 态,如 图2 所示: INSTALLED:安装完成,本地资源成功加载。 RESOLVED:依赖关系满 足,该 状 态 意 味 该 bundle要 么 已经准备好运行,要么是被停止了。 STARTING:bundle 正 在 被 启 动,BundleActivator 的 start()方法已经被调用但是还没有返回。 STOPPING:bundle正在被停止,BundleActivator的stop ()方法已经被调用但是还没有返回。 ACTIVE:bundle被成功启动并且在运行。 UNINSTALLED:bundle被卸载且无法进入其他状态。 图2 Bundle状态图 从开发平台方面,OSGi为动 态 扩 充、修改系统功能和改 变系统行为提供了支撑,而在传统的开发方式下,要实现系统 的动态扩充、修改以及改变是一件很困难的事。从组 件 规 范 方面,OSGi带来了规范化的组件组织以及统一的开发方式, 这为组件组织、组件开发以及组件积累提供了一种全新的指 导以及支撑。OSGi提供的这些支撑能给具体的应用带来优 势。 4 DOSGi_SCA 模型设计 4.1 模型结合方式 SCA 与 OSGi的结合在《Power Combination:SCA,OSGi and spring》白皮书中给出 了 3种 不 同 的 方 式:(1)SCA 组 件 作为 OSGi容 器 内 的 服 务;(2)SCA 程 序 集 或 SCA 域 作 为 OSGi容器内 的 服 务;(3)OSGi bundle作 为 SCA 域 中 的 组 件。 上述3种SCA 与 OSGi结合的方式,其实实质上是两种: 其一,以 SCA 为基础,采用 OSGi bundle实现 SCA 服务,OS- Gi bundle作为 SCA 域中的组件就属于这种方式;其 二,以 OSGi为基础,将 SCA 组件或者程序集作为 OSGi中的组件, 前两种都是属于这种方式。 OSGi bundle作为 SCA 域中的组件是采用 SCA 的 OSGi Implementation Type方法,是以SCA 为基础,以 OSGi bundle 作为 SCA 组件,这样做可以充分发挥SCA 自 身 的 特 点。就 SCA 而言,这是变 动 最 小、最容易实现的方法。但 是 这 种 方 法也存在局限性,没 有 发 挥 出 OSGi的 特 点。组 件 之 间 的 连 接是采用 SCA 的references方 式,没 有 应 用 到 OSGi中 的 动 态装载组件的特性,这就限制了它的灵活性。此外对 于 已 有 的 OSGi服务,如何实现重用也是一个很大的问题,因为 OS- Gi服 务 中 的 bundle可 能 很 多,关 系 也 很 复 杂,势 必 会 造 成 SCA 中的scdl描述很复杂。 以 OSGi为基础,将 SCA 组件或者程序集作为 OSGi中 的组件,可以实现 OSGi服务与 SCA 组件的交互。但是这种 模式也存在局限,SCA 组件必须与 OSGi服务在同一个 OSGi 容器中运行。这实际上是用 SCA 来实现 OSGi,OSGi存在仍 然不足。但是 OSGi宿 主 不 具 备 SCA 所有的跨平台与跨语 言特性,与非基于 OSGi平台的应用程序的交互也不如SCA 架构方便。 OSGi4.2中分布式的 OSGi规范的提出,为 实 现 SCA 和 ·511· OSGi结合提供了更好的条件。2009年9月最新发布的 OS- Gi 4.2聚焦于分布式的 OSGi,这使得 OSGi中装配的服务不 是必须存在于同 一 个JVM。使 用 分 布 式 的 OSGi,可 以 使 部 署在 一 个 JVM 中 的 OSGi服务组件能够使用部署在其他 JVM 中的 OSGi服务组件,甚至其他JVM 中非 OSGi服务组 件,如 SCA 服务组件等。 4.2 DOSGi_SCA 模型 在分析传统结合方式的基础之上,建立一种基 于 分 布 式 OSGi的 SCA 服务模型———DOSGi_SCA。在 DOSGi_SCA 模 型中构建了服务注册中心,负责系统中的服务注册、注销及更 新等的管理。通过引入服务注册中心实现了服务的统一管 理,即将所有的分布式节点上的服务统一管理。 图3描述了在分布式环境下存在几个节点。其中 Node1 为服务中心,在 Node1中构建一个服务注册中心。当应用启 动时,Node1中的服务注册中心以广播的形式将其地址发布 到网络中,分布式环境中的其他节点接收到后记录下地址;接 下来其他节点就可以根据地址提交要注册的远程服务的相关 信息给服务注册中心。 图3 基于分布式 OSGi的SCA 服务模型 在 Node1节点中的SCA 服务是由分布式OSGi通过Im- plementation Type方式来实现的。并且这些服务通过服务注 册中心查找要引用的服务,如果存在则服务注册中心返回满 足要求的服务信 息。接着根据返回的信息通过binding.rmi 的方式引用分布在其他节点中的服务。 图4 分布式 OSGi实现SCA Component 图4是图3在 Node上的 SCA Component,这 里 的 SCA Component是由分布式 OSGi通过Implementation Type方式 实现的。这里 SCA Component对外提供的服务实际上是由 内部的 OSGi bundle提供的,在 OSGi bundle内部又分为服务 的接口与服务 的 实 现,并 且 OSGi bundle可 以 通 过 服 务 注 册 中心查找引用 Node节点以外的服务。 4.3 服务注册中心 本文在 DOSGi_SCA 模型中构建了服务注册中心,其 结 构如图5所示,包括以下几个部分。 图5 服务注册中心 已注册服务:负责记录 SCA 容器中所有已注册服务。其 中每个服务对应唯一一条记录。在服务监听模块发现有新的 服务增加时会通知服务注册模块,服务注册模块就会将新的 服务记录在已注册服务表中。其中服务的描述、接口、状态等 信息都记录在每条记录中。 服务监听模块:是服务注册中心的核心模块,当某个服务 的状态发生改变时,与服务注册中心的其他模块通信。如 果 监听到了服务的更新,就调用服务更新模块,并以广播的形式 通知所有的服务有服务更新。这样服务就可以及时地更新所 引用的服务。服 务 监 听 模 块 类 图 如 图 6 所 示。其 中 Event- Monitor对象为服务事件的监听对象,在增加新的服务时,会 新建一个服务监听对象来对此服务的状态进行监听。如果被 监听的服务注销后,该监听对象也会被销毁。在服务 的 状 态 发生变化时,其他模块就会收到该对象发送的消息。服 务 监 听模块中对服务的启动、服务的停止与服务的注销3种状态 进行监听。当新增的服务被注册时,该服务处在停止状态,需 要用户启动服务才能正常使用,而当服务被注销时,与该服务 对应的监听对象也会被释放。 图6 服务监听模块类图 服务注册/注销模块:模块 用 以 注 册/注销容器中新增的 服务。经过注册的服务将会在已注册服务中对应一个唯一的 记录。当服务监听模块监听到已注册服务的注销事件后,会 调用服务注销模块将已注册服务注销。图7为服务注册与注 销模块类图。RegisterService对象与 UnRegisterService对象 ·611· 负责服务的注册与注销。 服务更新模块:该模块用以更新容器中的服务。当 服 务 监听模块监听到已注册服务的更新事件后,会调用服务更新 模块将已注册服务更新。图8为服务更新模块类图。Servi- ceUpdate对象负责具体服务更新操作。 图7 服务注册/注销模块类图 图8 服务更新模块类图 5 DOSGi_SCA 的应用 由中南大学网络评审系统工程研究所主持开发的科技评 价系统服务平台,通常包含查看项目材料、专家打分、专 家 投 票、撰写意见、专 家 留 言、查 看 评 审 结 果、查看政策法规等功 能。在这里将这些功能提取出来,分别抽象为独立的组件。 其中,专家打分和专家投票往往需要灵活控制,有的时候需要 专家打分,而有的时候需要专家投票,或者有时会在评审期间 临时改变,例如由专家打分变为使用专家投票。这就 需 要 系 统能够在系统运行时动态地改变系统功能,基于分布式 OSGi 的 SCA 架构能够很好地满足要求。图 9描述了整个系统架 构。 在基于 DOSGi_SCA 模 型 的 科 技 评 价 平 台 中,把 复 杂 的 系统通过抽象,分解成一个个可单独处理的可管理组件单元。 本文实现了查看项目材料、专家打分、专家投票、撰写意见、专 家留言、查看评审结果、查看政策法规等功能组件,可 以 将 这 些组件分别部署在不同的服务节点上,通过服务的形式对外 提供功能。如果不需要打分组件时,就发送注销事件,服务监 听模块在监听到事件后就会调用服务注销模块将已注册 服 务 注 销 。这样就使软件具有很好的灵活性、扩 展 性 和 重 用 性 。 图9 基于 DOSGi_SCA 的科技评价平台架构 结束语 在分析传统结合方式的基础之上,建 立 了 一 种 基于 分 布 式 OSGi 的 SCA 服 务 模 型———DOSGi_SCA。 DOSGi_SCA 以分布式 OSGi为基础,构建了服务注册中心来 管理本地服务和远程服务;改 善 了 以 往 以 OSGi为 基 础 的 SCA 与 OSGi结合不能很好地适应分布式环境的不足,很 好 地体现了 SCA 与 OSGi自身的优点,使SCA 服务引用具有动 态性和灵活性,完善了SCA 架构对SOA 的实现,提高了SCA 的灵活性和实用性。在后续的工作中,将近一步完善 DOSGi _SCA 模型中服务的安全性问题。作为评审工作使用的系 统,安全性是必须要考虑的问题,此问题要在后续的工作中重 点研究。 参 考 文 献 [1] Krafzig D,Banke K,Slams D.Enterprise SOA[Z].Prentice Hall PTR,2004 [2] Karmarkar A,Malhotra A,Booz D.Service Component Archi- tecture(SCA)Tutorial[EB/OL].http://www.osoa.org/down- load/attachments/250/SCA_OASIS_Tutorial_artl.pdf?version =1,2007 [3] Rui yi.Application and Research for the OSGi-based Service- Plug Oriented Architecture[D].Jiangsu University,2008(6) [4] Zhu Lei.A Dynamic Loading Supported Extensional Solution of SCA Framework and its Application[D].Hefei University of Technology,2008(5) [5] OSOA Collaboration.Power Combination:SCA,OSGi and Sp- ring[EB/OL].http://www.osoa.org/download/attachments/ 250/Power_Combination_SCA_Spring_OSGi.Pdf?version=3, 2007 [6] Penugonda S.开发示例 SCA 应 用 程 序[OL].http://www.ibm. com/,2007-01 [7] Barack R.Service Component Architecture Java Component Im- plementation V1.00[EB/OL] ·711·

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档