基于OSGi&RCP插件化的智能变电站集成软件平台架构
2017-04-01张晓瑞蒋衍君闵彦荣付豪董怀普
张晓瑞,蒋衍君,闵彦荣,付豪,董怀普
(国电南自自动化有限公司,南京 211153)
基于OSGi&RCP插件化的智能变电站集成软件平台架构
张晓瑞,蒋衍君,闵彦荣,付豪,董怀普
(国电南自自动化有限公司,南京 211153)
针对目前智能变电站在二次设备配置、运维及管控系统中存在的问题,结合“软件工程”的理念,提出了一种基于OSGi&RCP插件化的多业务集成软件平台架构。该架构以java动态模块化OSGi规范和Eclipse RCP开源框架为基础,融合插件间面向服务的通信机制及插件内接口与实现相分离的包(Package)最小化依赖设计方法,实现了系统面向多用户、多业务的松耦合式集成,解决了传统软件架构在开发、部署、工程应用上周期长、灵活性不足的缺陷,达到了“即插即用”的模块化效果。实际工程应用验证了该架构的可行性与优越性。
智能变电站;OSGi;Eclipse RCP;业务模块化;即插即用
0 引言
近年来,智能电网建设发展迅速,变电站运行技术水平和业务复杂程度越来越高[1-2],伴随着行业技术标准的提升以及国内外二次设备厂家当前自身因素限制,导致二次设备配置与运维面临如下问题:现有工具升级无法满足智能变电站业务的发展速度需求;各个厂家设备配置、运维差异性很大[3-4],无法实现资源共享,运维人员需要掌握多厂家工具使用技巧;不同变电站的定制化需求无法得到满足;个别工具业务集成太多,加重了硬件资源消耗,程序性能明显下降,影响工作效率[5]。同时,在现有人力资源与市场竞争更加激烈的条件下,有些厂家已经无法很好地适应这种灵活多变的业务发展需求,如何寻找一种方案既能满足主要客户(国网、南网等)对新趋势下变电站业务的发展需求,又能解决厂家频繁疲于应对变电站业务无限灵活扩展的现状[6-10],是现阶段行业内所有二次设备厂商急需要解决的一大难题。
针对以上问题,本文提出了一种基于OSGi&RCP插件化的软件平台架构方案,该架构以java动态模块化开放服务网关OSGi(Open Service Gateway Initiative)平台为基础,结合Eclipse的富客户平台RCP(Rich Client Platform)富客户端开源框架,融合软件工程中软件复用与构件化技术,能够在软件架构层把智能变电站的远动、保信、在线监测、计量、电力系统同步相量测量装置(PMU)、合并计算、五防操作票、顺控、远程浏览、告警直传、源端维护等业务以及报文解析、国际化、数据库读写等功能变成一个个风格统一、可灵活组装、跨平台、易维护的“大一统”插件,供产品部门按用户实际需求组装系统完成发布工作。
1 软件架构设计
1.1 抽象业务模块分析
根据软件需求分析中抽象化原则,按基础业务模块进行抽象模块化分割,再根据不同的业务要求,在公共基础模块之上进行特有的业务功能点扩展以满足实际用户的需求。基于这一划分原则,可以把整个变电站的配置及运维管控相关需求抽象为:全站系统配置模块、五防模块、顺控模块、远程浏览模块、源端维护模块、远动模块、保信子站模块和告警直传模块等,辅以网络配置模块、数据库配置模块、用户管理模块、权限管理模块、日志模块、程序配置与进程监控模块、报文分析模块、实时数据浏览模块、统计模块、持久化模块等其他模块。
1.2 架构思路
根据本文引言中对当前智能变电站的发展描述和抽象业务模块分析,设想把变电站业务变成一个个的模块化插件,通过按需分配的方法,找出所需要的插件集成到一个公共平台上。该平台可支撑所需业务插件的信息资源共享与动态化插拔运行,并能很好地扩展每一个功能业务模块,同时对其他模块不产生任何影响。
如果这个设想成立,该平台需既能满足对用户界面(UI)模块化、又能满足业务服务调用模块化。
图2 软件架构
借鉴计算机技术方面对此问题的解决方案,选择基于OSGi&RCP的平台架构无疑是最好的思路。其框架图如图1所示。
图1 多业务集成框架
1.3 架构设计
根据1.1中描述的智能变电站抽象业务分割方法及1.2中提到的架构思路描述,可以得到如图2所示的架构设计。
1.4 架构分析与比较
三层软件架构是传统富客户端软件系统最常用的设计方法,如图3所示。这种架构方案具有接口清晰、耦合度低、方便开发人员协作等特点,但缺点也很明显。这种传统的纵向分层模型,每一层都依赖于下面层次提供的服务,同时又被上面的层次所依赖,逐层依赖的组织方式使软件趋于一个整体,正是这个“整体”使得各层次对于软件正常运行都是缺一不可的,无法抽取一部分作为独立的软件进行发布和使用。随着系统的不断扩展,每个层次上处理的业务都在增加,不仅影响系统的可靠性和稳定性,同时对后期的维护提出了更高的要求。
图3 传统富客户端软件架构
基于OSGi&RCP模块化的架构设计就是尽可能避免把软件设计为一个整体,而是偏向于把软件设计为一个核心加一系列插件构成的功能模块集合。相比传统的分层架构设计,本方案具有以下优势。
(1)除了基础资料(服务接口、实例类、公共资源类等)的核心插件外,其他的插件间都可以避免相互依赖,保证各个模块间的相对独立,同时插件间也不直接进行交互通信,而是通过OSGi层中的注册服务与监听服务进行协作,可以解决多厂家服务插件共享问题。
(2)模块化设计可以让软件系统实现按需分配。
(3)系统得益于底层的OSGi天然的动态化特性,可以很容易地进行热插拔和动态更新。安装和升级只需停用或替换对应的模块插件,而无需停用服务器,这样对不相关的模块不产生任何影响。
(4)提高系统的稳定性与可扩展性。一个功能模块崩溃不会导致整个系统瘫痪,其他的功能模块正常运转,同时增加新的功能也不需要修改原有的功能模块,实现了低成本、高灵活度的软件功能扩展与伸缩。
(5)强大的Eclipse开发工具平台。RCP框架技术可以在技术层面控制界面样式的统一,并且在此框架下开发,可以很容易实现帮助文档系统与国际化功能。
2 关键技术分析
2.1 业务插件(Bundle)的组织与依赖方法
结合OSGi技术规范特性,该方案采用包(类)依赖的方式在编码层面实现模块插件间的依赖关系。其内部实现则利用OSGi微内核架构的模块层和生命周期层来完成。
在RCP框架下实现一个OSGi Bundle,不仅可以使用OSGi的标准应用程序编程接口(API),同时还可以使用RCP框架自己的扩展功能,依托Eclipse平台,很容易可视化编写元数据描述MANIFEST.MF文件。这也是实现OSGi规范的插件与普通插件的区别所在。
该框架对插件的版本和包进行了最小化管理,同时还有清晰的可视化插件依赖关系图供系统设计阶段使用。
2.2 业务插件间通信机制
一个复杂的业务模块不会通过单一插件来实现所有功能,那么模块间的通信是必须要解决的问题。在最大化保证各个插件相对孤立的情况下,结合OSGi技术规范要求,该方案采用面向服务的通信方法。
服务不能孤立存在,每个服务都从属并运行在提供服务的Bundle上。Bundle要提供服务供其他插件模块使用,首先需要把服务(类)注册到基础资料Bundle中,这个基础资料Bundle底层采用一个由OSGi框架提供、可以被所有的Bundle共享的服务注册表技术来实现,其他Bundle使用服务时只需要从注册表中查找相应的服务拿来使用,从而避免了与提供服务的Bundle直接交互。因此,这种插件间的通信机制不需要关心该服务来源于哪里,也不需要关心导入提供服务的Bundle或对外发布什么样的包。
2.3 UI插件与服务插件的实现
UI插件主要负责系统人机交互界面的灵活组装,包括基础框架界面的搭建、基础模块业务的界面显示、多业务模块透视图的扩展、业务功能菜单的扩展、人机交互UI帮助系统等。系统UI插件组织结构如图4所示。
图4 系统UI插件组织结构
服务插件(非UI插件),此类插件主要负责多业务逻辑的处理,包括基础业务逻辑单元的处理、业务接口包的暴露、插件间面向服务(类对象)交互的使用等。
2.4 插件粒度分割原则
基于OSGi&RCP技术的模块化和运行时动态化都是以Bundle为基础的,因此在设计规模较大的系统平台架构时Bundle的粒度划分特别重要。不仅要做到低耦合、高内聚,还要降低在系统运行时更新Bundle的成本。本系统架构按照以下原则对变电站业务做到了很好地划分。
(1)根据智能变电站业务发展特点,以业务为模块划分,视图、菜单扩展、功能服务分别生成插件(Bundle)。
(2)借鉴设计模式思想,通过设计模式模板为我们提供合适的封装方案,比如工厂模式,将系统的复杂性、多样性、易变性问题通过工厂方法进行封装,降低系统的复杂性。
(3)并列原则,对于实现同一目标而需要采用不同方式的功能分别生成插件,在打包发布系统时按需使用相应Bundle。
(4)领域业务逻辑代码与OSGi框架服务代码分离原则,增加业务逻辑代码的结构清晰度,方便复用到非OSGi框架系统项目中。
(5)接口与实现分离原则,降低插件内部代码耦合度和屏蔽使用者对复杂业务实现类的关注。
3 结束语
与传统的软件架构相比,基于OSGi & RCP插件化的软件平台架构将智能变电站中的业务按业务模块进行划分;利用设计模式的思想封装业务模块为插件;插件内采用面向接口的编程方式解决业务逻辑的复杂性与多变性;插件外采用面向服务的机制完成插件间的交互,保证每个插件的孤立性;开发与发布分离,“积木式”组装和特殊化定制相结合方式满足不同用户对不同或相同业务功能的按需分配;支持跨平台,能够同时导出多个平台上的产品;业务功能易扩展,满足智能变电站业务未来的发展方向。
虽然OSGi技术规范已经非常成熟,但要在本文描述的架构上开发出完美的系统还需要关注以下问题:合理地规划系统,降低模块间的耦合性;理解对象的生命周期,合理释放Bundle资源,防止内存泄漏;避免插件启动顺序依赖,为后期维护埋下伏笔。
[1]孙一民,裘愉涛,杨庆伟,等.智能变电站设计配置一体化技术及方案[J].电力系统自动化,2013,37(14):70-74.
[2]笃峻, 叶翔, 王长瑞,等. 智能变电站设计配置一体化功能规范研究及工具开发[J]. 电力系统自动化, 2014, 38(20):85-89.
[3]周恒俊, 曹培, 张金江,等. 面向高级量测体系的分布式对等互联OSGi平台[J]. 电力系统自动化, 2011, 35(11):71-76.
[4]王丽华, 王治民, 任雁铭,等. 插件化IEC61850通信模块设计与实现[J]. 电力系统自动化, 2012, 36(5):82-85.
[5]赵燕茹, 杨臻, 张延,等. 智能变电站远动与保信子站信息远传功能集成方案[J]. 电力建设, 2013, 34(12):48-52.
[6]悦怡. 基于OSGI的面向服务插件框架研究与应用[D]. 镇江:江苏大学, 2008.
[7]相东飞.基于OSGi插件化的应用框架[J].科技信息(学术版),2007(12):176,179.
[8]WU C L, LIAO C F, FU L C.Service-oriented smart-home architecture based on OSGi and mobile-agent technology[J].IEEE transactions on systems, man and cybernetics, part c(applications and reviews),2007,37(2):193-205.
[9]GREGERSEN A R,JORGENSEN B N.Extending eclipse RCP with dynamic update of active plug-ins[J].The journal of object technology,2007,6(6):67.
[10]MCAFFERJ,VANDERLEI P,ARCHER S.OSGi and equinox:creating highly modular Java systems[M].Addison-wesley professional,2010.
(本文责编:刘炳锋)
2016-11-25;
2017-01-09
TP 391
A
1674-1951(2017)02-0004-04
张晓瑞(1988—),男,山东滨州人,工程师,工学硕士,从事智能变电站配置与运维系统研发方面的工作(E-mail:xiaorui-zhang@sac-china.com)。
蒋衍君(1975—),男,黑龙江尚志人,高级工程师,工学硕士,从事电力监控及调度自动化方面的工作(E-mail:yanjun-jiang@sac-china.com)。
闵彦荣(1985—),男,江苏南京人,工程师,从事智能变电站配置与运维系统研发方面的工作(E-mail:minyanrong@163.com)。
付豪(1986—),男,河南商丘人,工程师,工学硕士,从事智能变电站配置与运维系统开发方面的工作(E-mail:hao-fu@sac-china.com)。
董怀普(1988—),男,河南商丘人,工程师,工学硕士,从事智能变电站配置与运维系统开发方面的工作(E-mail:huaipu-dong@sac-china.com)。