APP下载

基于关键任务的复杂软件系统自重构概念模型研究*

2018-04-12张振华孔祥营

指挥控制与仿真 2018年2期
关键词:概念模型容器重构

王 阳, 张振华, 孔祥营

(江苏自动化研究所, 江苏 连云港 222061)

复杂软件系统[1]是指由多个具有独立功能的子系统集成、耦合而成的大型软件系统,各软件子系统间功能相对独立且关系错综复杂,整个系统的行为难以通过各子软件系统特征的简单叠加加以刻画,能够完成复杂、多任务关联的大型任务。复杂软件系统是一个多任务系统相互联结交互的复杂系统,这些基础软件系统的运行状态直接影响到整个系统的性能与任务的运行安全[2]。

复杂软件系统包含众多子系统,每个子系统又包含诸多的功能模块,子系统间含有繁杂的任务构件等,这些系统不可能由一个开发团队完成,往往需要多家单位、科研院所协作才能够完成。对于已经投入使用的复杂软件系统,由于新的需求、操作使用、运行维护等目的,需要在原有的系统上进行修改和扩充是很困难的,会遇到设计风格不一致、编程语言版本的差异、接口定义的不规范、开发文档的丢失不完整和难于理解等诸多问题。由于复杂软件系统运行环境多种多样,特别是在恶劣、极端环境中,极易影响软件的正常运行,传统基于人工调试的软件维护模式,难以应对错综复杂的软件运行环境。因此软件系统在所处环境变化时,具有良好的适应能力,变得尤为重要。这时候,为了延长旧系统的生命周期,降低系统维护成本,就可以采用以原有系统进行重构的方法对软件进行重构,使其在改善程序结构的基础上适应需求的变化。但是,复杂软件系统规模庞大,即使软件重构也需要花费大量的时间和人力投入,然而在一些特殊领域例如舰载复杂系统中,作战需求与战场环境瞬息万变,这就需要自重构来实现快速自动化的重构过程。

软件自重构是在软件重构的基础上,引入了控制论中软件自适应概念。软件自适应包含环境变化感知、策略决策执行与软件动态调整,其中以环境变化感知为基础,以策略决策执行为中枢,以软件动态调整为实现。通过引入自适应功能,软件自重构能够实时感知软件内部与外部运行环境的变化,通过自适应的推理决策,预测下一时刻环境设备的运行状态,依照合理的策略及时调整软件的重构迁移方案,从而实现快速自动化的软件重构过程。

目前国内外针对软件重构和自适应方面的研究很多[3],但把二者结合形成能够让软件依据环境变化而改变的自重构方法,鲜有文献可查阅与借鉴,将自重构概念应用于复杂软件系统层次更是难以查找。本文主要将软件重构与软件自适应相结合,形成软件自重构概念并且应用于复杂软件系统中,以舰载环境为具体事例阐述了复杂软件系统自重构架构与逻辑结构,结合使用虚拟机迁移技术和容器迁移技术,实现基于关键任务的复杂软件系统自重构概念模型。该模型能够依据运行环境的改变快速实现应用程序的迁移与重构,从而保证关键任务的中断时间最小化,以及对整个复杂软件系统实时性影响的最小化。

1 软件重构与自重构

从概念上讲重构的目标是对软件系统结构设计的进行重组与优化,使系统保持原有全部功能完整性的同时,并具有易于重用和扩展的特性。重构的实质是在保持可观察行为不变的前提下,基于可扩展性和可重用性对软件进行的调整。可观测行为不变是指程序原有的功能、对外接口不变,但是对内部结构的调整往往会引起程序内部耦合程度、响应处理时间、数据吞吐量的改变,因此还需要对重构后的程序做评估以判断使用的重构方法是否得当。对软件进行调整的基础是分析,因而,软件重构的本质是分析。这就使得软件重构离不开人工的参与。一个典型的软件自动化重构的流程图如图1所示。

图1 软件自动化重构流程

软件自动化重构需要先将源代码或者字节码作为输入,先进行预处理决定该目标软件是否适合代码结构的转换,如果预处理的结果满足要求,则开始进行重构。为了尽量减少人工的干预以及确保代码转换的正确性,软件分析环节至关重要。软件分析通常先将源代码转换为中间表示,根据重构需求,应用不同的软件分析方法,典型的分析方法包括:visitor分析、数据流分析、控制流分析、指向分析和side-effect分析。使用软件分析方法,基于中间表示构建抽象二叉树,遍历抽象二叉树查找能够转换的部分进行重构操作,并存储change对象作为备份。接着对重构后的程序进行完整性验证来确保软件原有功能性的完整,同时需要评估重构操作对程序的影响来判断该次重构操作是否正确。

上述软件自动化重构过程,在理想条件下是不需要人工干预的。但是在现实情况中,理想条件的实现太过苛刻。因此学术界针对软件重构基于分析的本质,以及重构的原则和目标,通过引入控制论中的自适应决策和执行机制,实现软件的自重构。在软件自适应中环境变化感知是基础,策略决策执行是中枢,软件动态调整是实现手段。自重构就是在重构的基础上,引入了自适应功能,能够实时感知软件运行环境的变化,预测下一时刻环境设备的运行状态,及时调整软件的重构迁移方案。

2 复杂软件系统自重构架构与逻辑结构

软件自重构以自适应为基础,因此需要在原有设备基础上,增加一系列传感器构成传感网络,构建自适应运行环境。本文以实际的舰载复杂软件系统为例,阐述复杂软件系统自重构需要的物理环境与逻辑构成。现代的舰船信息系统普遍采用基于公共计算服务的体系结构。在公共计算服务体系结构下,舰船信息系统由公共计算服务环境、前端设备、应用软件等组成。

物理上,公共计算服务环境由计算中心、控制中心和存储中心组成,是支撑舰载复杂软件系统运行的软硬件平台,包含基础的计算、存储、控制、显示与传输硬件与运行在硬件之上的基础软件。为了有效地收集环境信息,构建软件自适应层,需要在原有的公共计算环境基础上,增加传感器、传感器网络,构成环境信息采集设备,这样公共计算环境与环境信息采集设备共同组成舰载自适应运行环境。如图2所示。

图2 自适应运行环境

逻辑上可将基于公共计算服务的体系结构划分为四个层次基础硬件层、基础软件层、功能应用软件层、前端设备层。自适应可重构的舰载复杂软件系统层次是在公共计算服务体系结构的基础上,增加一个逻辑的自适应控制层,即在基础硬件层外再增加环境信息采集设备,在基础软件层中增加自适应中间件,在功能应用软件层增加自适应运行平台软件。这三者相互配合完成对环境变化感知、自适应决策以及对功能应用软件系统的重构。支持自适应可重构的舰载复杂软件系统层次结构如图3所示。

图3 层次结构图

环境信息采集设备包括舰外环境信息采集设备、舱室环境信息采集设备、硬件环境信息采集设备、软件环境信息采集设备、以及任务环境信息采集设备等,用于实现对环境信息的实时采集。自适应中间件是自适应行为具体执行者之一,与功能应用软件直接链接在一起运行,一方面实现对功能应用软件运行状态信息的透明采集,另一方面接收自适应运行平台软件发出的自适应中间件级操控指令,实现对功能应用软件行为的调控。

自适应运行平台软件是舰载复杂软件系统实现自适应行为的控制层功能实体,用于承载和实现自适应模型中的感知-决策-执行等自适应行为,其一方面接收环境信息采集设备发出的各类环境信息,另一方面,针对环境信息进行评估并做出重构方案决策,并依据重构方案对公共计算服务环境及其他相关软硬件进行操控,实现软件重构。

3 复杂软件系统自重构概念模型

复杂软件系统自重构概念模型如图所示,分为三层结构,如图4所示。

图4 复杂软件系统自重构概念模型

第一层,功能软件层面

软件的重构,可以依据其完成的任务划分为各个构件,可以依据其完成的功能划分为各个模块,也可以按照具体的代码划分到各个函数。因此在重构粒度上,可以分为构件[4-5]、模块、函数级粒度的软件重构,如图5所示。

图5 软件重构粒度

第二层,软件系统层面

现在大型的软件系统多由不同软件集成而成,软件之间的相互关联能够实现多种功能和服务,一个任务往往需要多个软件协作才能够完成。任务系统自重构在软件重构的基础上,加入了自适应中的决策与执行阶段。通过对外部环境和实时的需求,以任务为最基本单位,为执行该任务自主快速地配备功能软件。

第三层,复杂软件系统层面

复杂软件系统在任务系统自重构的基础上,对重构出来的每一个功能相对独立的构件,进行重新封装的工作,本项目使用的方法是利用统一的编程接口和处理函数,对构件以捆绑适应环境中间件的方法,对原有的构件进行再次封装打包。这样处理的优势在于该方式对内屏蔽内部的数据流程图、逻辑结构,对外提供该封装模块能够实现的功能、接收的数据和操作。虽然新增一些自重构的功能函数与接口会增加代码量,但在后续自重构的时候,从逻辑上可以根据不同的需求和策略,快速实现复杂软件系统构件级的自重构过程。

4 基于虚拟机迁移与容器迁移的软件系统快速重构技术

在软件部署运行环节,为了使部署运行的复杂软件系统具备可用的动态重构能力,需要研究软件系统重构的性能问题,这就需要研究如何减少系统的重构时间。虚拟机和容器的出现,能够实现封装硬件条件与依赖库的打包,使得应用程序运行环境的整体迁移或部分迁移变得更简单更容易。因此复杂软件系统自重构采用虚拟机迁移技术与容器迁移技术,能够实现系统的快速重构。

虚拟机技术是一种通过软件模拟硬件,将计算机系统运行在一个完全隔离环境中的技术[6]。进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的完整资源,不会对底层的操作系统产生任何影响,而且能够在现有系统与虚拟系统之间灵活切换。虚拟机监视器(Virtual Machine Monitor,VMM)是虚拟机技术的核心,它是一层位于操作系统和计算机硬件之间的代码,用来将硬件平台分割成多个虚拟机。虚拟机监视器运行在特权模式,主要作用是隔离并且管理上层运行的多个虚拟机,仲裁它们对底层硬件的访问,并为每个客户操作系统虚拟一套独立于实际硬件的虚拟硬件环境(包括处理器,内存,I/O 设备)。虚拟机监视器采用某种调度算法在各个虚拟机之间共享CPU,如采用时间片轮转调度算法。

容器技术也是目前一种主流技术,它通过生成现有操作系统的全新虚拟镜像,具有真实系统完全一样的功能,它和传统的虚拟机的不同之处在于:容器技术不会降低电脑的性能,启动容器不需要像启动真实操作系统那样耗费时间,运行程序更加方便快捷;容器技术只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;和容器技术相比,虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比容器慢得多。

通过分析重构时源平台与目标平台的属性,复杂软件自重构模型将两种不同虚拟技术相结合的方式实现系统的迁移式重构,如图6所示,即对于目标平台与宿主平台一致系统的虚拟,采用基于容器的轻量化迁移技术,以获得更好的性能;对于目标平台与宿主平台不一致的系统,采用基于虚拟机的迁移技术,通过虚拟目标平台软件运行所需要的所有硬件及对应的操作系统,仿真所需的软硬件环境,从而保障软件系统的平滑迁移重构。

图6 虚拟机迁移与容器迁移

5 基于关键任务的复杂软件自重构概念模型

对于关键任务,面向异构平台采用备份启动的方式实现系统的快速重构,从而减小重构的时间开销,保证关键任务的快速恢复。基于关键任务的复杂软件系统自重构概念模型结合复杂软件系统自适应技术与自重构技术以及基于虚拟机和容器的软件系统快速重构技术,能够实现根据复杂软件系统自身运行环境变化,实时调整软件自重构方案,保证关键任务平稳运行不因环境改变而中断。

当外界环境发生变化时,系统的自适应感知机制察觉到环境的变化可能在下一时刻对应用软件的运行产生影响,并且决定是否采取重构策略。由自适应决策阶段生成系统重构方案,对具体的应用程序进行按需重构。对于关键任务,为了保证其运行状态,根据目标平台底层操作系统的不同选择采用虚拟机迁移或容器迁移。

某一时刻,如图7所示,宿主机运行有应用程序A、B、C,关键任务P是由应用程序A、B、C相互协作而成。某一时刻环境信息采集设备得知下一时刻应用程序A可能无法正常运行,系统自适应决策生成应用程序A的构件级重构方案。因为虚拟操作系统不同采用虚拟机迁移在目标平台虚拟机2上运行着一个备份,包含A′、B′、C′。为保证关键任务P的不中断,重构方案将应用程序A、B、C以构件级粒度重构,关键任务P包含构件:A2、B1、B3、C3、D3。同时在目标平台将应用程序A′重构,使用A2′替换构件A2,这样重新组成的关键任务包含:A2′、B1、B3、C3、D3。这样下一时刻由宿主机上的应用程序B、C以及目标平台上的应用程序A′共同支撑起关键任务P。

基于冗余备份的软件启动方法,能够保证当某一功能软件发生故障时,根据目标平台操作系统的不同,选择虚拟机迁移或容器迁移实现软件的备份启动,在目标平台完成软件重构,替换关键任务需要的构件,这使得关键任务中断的时间,从原有的宕机拷贝——再运行,变为构件切换——同步,前者耗费时间多,后者的时间能够控制在系统允许的中断范围内,实现关键任务运行的“不中断”。

图7 基于关键任务的自重构模型

6 结束语

本文以软件重构与自适应为基础,将软件自重构概念引入到复杂软件系统领域,构建复杂软件系统自重构概念模型,使得复杂软件系统在应对周围环境变化时能够生成合理的重构方案并且执行,从而保证整个系统不因内外部环境变化而运行中断。同时结合虚拟机迁移技术与容器迁移技术实现基于关键任务“不中断”的软件快速重构。复杂软件系统自重构概念模型能够给后续自适应可重构软件开发设计提供指导,亦可通过中间件的支撑对已有软件进行重构,实现复杂软件系统内部结构深度优化和外部构件的重用与扩展。

参考文献:

[1]王怀民, 吴文峻, 毛新军, 等. 复杂软件系统的成长性构造与适应性演化[J]. 中国科学: 信息科学, 2014, 44: 743-761.

[2]丁博,王怀民,史殿习.构造具备自适应能力的软件[J].软件学报,2013,24(9):1981-2000.

[3]雷达成. 基于分解的重构构验证的研究[D].上海交通大学, 2012.

[4]窦蕾.面向构件的复杂软件系统中动态配置技术的研究[D].长沙:国防科学技术大学,2005.

[5]张文婷, 池志强, 赵恒. 舰载指控系统构件模型研究[C]. 舰船电子学会学术年会论文集, 2006.

[6]孙建朋,邢建平,韩言妮,等.自适应的多虚拟机迁移调度算法[J].计算机工程与设计,2017,38(5):1125-1131.

猜你喜欢

概念模型容器重构
“双减”能否重构教育生态?
长城叙事的重构
网络服装虚拟体验的概念模型及其量表开发
高盐肥胖心肌重构防治有新策略
难以置信的事情
基于“认知提升”的体系作战指挥概念模型及装备发展需求
北京的重构与再造
商业模式创新与企业竞争优势间的内在机理分析
某高校团委信息管理系统构建研究
液体对容器底及容器对桌面的压力和压强