嵌入式软件服务封装技术的研究

(整期优先)网络出版时间:2023-05-05
/ 2

嵌入式软件服务封装技术的研究

吕广喆,刘雨坤,刘陶

中国航空工业集团公司西安航空工业计算所  陕西西安 710068

摘要:现代空战要求实现面向不同任务时系统具备自组织能力,能够实现任务、应用、服务、数据、资源的动态调整,在通用领域容器、OSGI等技术均被应用到实际的软件封装过程之中,它们各有优缺点,本文通过对嵌入式环境下不用应用程序的运行场景分析,提出了不同环境下软件的服务化封装的方法,极大地提升了系统的扩展性,具有重要的意义。

关键字:容器 组件 服务化封装

1.引言

在军事科技的支撑下,现代空中作战正在从网络化向体系化、智能化对抗发展,空战场环境更趋复杂和严酷,将导致对抗结果的不确定性大大增加[1]。现代空战既表现为各作战单元功能与空间的分布分离,又表现为信息、规则、战术和任务的融合统一。这就要求实现面向不同任务的多平台航电系统自组织,从任务、应用、服务、数据到资源实现动态调整;其次,系统架构要具有良好的开放性,应用软件、服务组件采用统一的封装方式,进而为大数据处理、人工智能技术提供支撑[2]

针对机载系统异构互联应用场景,任务系统平台、载荷、能力、服务即插即用的能力需求,不少研究机构提出了面向服务的嵌入式SOA构架,旨在提升系统的扩展性,实现软硬件平台解耦,但是该方案采用了CORBA作为服务总线,CORBA在开发过程中需要生成的桩代码,且实时性不足,因此在装备领域中没有得到广泛的应用[3。在车载领域中,实现软件组件化封装采用了OSGI标准,该标准主要针对JAVA的技术生态展开,实现软件的动态加卸载,直到OSGI9.0标准中扩展了对C++的支持,但其对分布式应用场景的需求考虑不足。在互联网平台中,容器技术得到了快速的发展,它支持应用程序及依赖资源的轻量化封装,可支持高并发、大数据处理的应用场景,为负载均衡弹性伸缩提供了支持。本文结合嵌入式系统的特殊要求,结合OSGI标准、容器等技术,重点研究满足嵌入式软件封装方法,提出对应的解决方案[4]

2.开放式服务化架构设计

图1 软件层级结构

在航空电子设备中时常强调系统运行的实时性,但随着系统功能复杂度的提升,已经应用场景的变化,由对系统提出了灵活扩展、功能敏捷生成的需求。本文结合参考FACE结构的基础上,增加软件服务化封装的能力,使原有架构增加资源虚拟化、服务治理的功能,最终形成了嵌入式平台的开放式服务化架构,如图1所示,采用分层结构将平台软件分为应用软件、中间件、操作系统、平台支持软件和软件开发支撑环境。

应用软件包含通用实时应用软件以及智能应用软件。

中间件提供分布式运行环境支持,负责整个系统资源的管理和调度、分布式通信、分布式文件存储管理、数据库、智能运行时支持;

操作系统层包括多核操作系统及容器操作系统,向中间件及应用程序段提供统一的操作系统接口,以及非统一的驱动接口,支持资源虚拟化;

平台支持软件包括模块支持层软件(MSL)、时间服务、自检测服务、设备驱动等。

软件开发支撑环境包括应用软件的开发、调试工具以及系统配置和分析工具,属于应用层,用于支持用户的软件开发和系统调试。

3.基于容器技术的软件封装

容器技术是操作系统层面的虚拟化技术,以应用为中心,在一个宿主操作系统上虚拟出多个逻辑操作系统,为应用提供隔离运行环境。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与其他虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU 本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化和系统调用替换中的复杂性。提供C/S模式的容器管理标准服务,包括容器创建、起/停、删除,镜像的下载/上传,支持客户控制台、容器引擎、仓库的本地/异地部署,良好支持分布式部署和维护。容器对应用的封装如图3所示。

图3 基于容器的应用软件封装

通用云原生架构中除了容器技术还需要编排调度、镜像仓库等技术,可以将其划分为客户端、服务端、运行节点三大部分,并依赖外部系统构成完整的体系结构。

    (1)客户端:客户端组件包含命令行客户端和界面客户端;

(2)服务端:服务端组件包含核心服务、控制器组和调度器,它们运行在同一个进程中,相互之间通过函数调用进行通信,原则上服务端是无状态的,便于进行水平扩展,可以去中心化部署,依靠外部组件一致性存储选择主控节点;

(3)运行节点:运行节点组件包含节点代理,作为一个独立的进程运行在工作节点上。节点代理主要负责在运行节点上将容器组创建并启动,监控管理容器组的状态和应用运行状态;监控运行节点的各项资源(CPU、内存、存储)的使用情况,服务器端会定时通过远程过程调用接口向各个节点代理查询各运行节点的资源信息。节点代理在创建容器组过程中,会通过镜像分发服务拉取镜像,通过容器运行时创建应用容器,通过容器网络接口将容器组加入到集群内网中,如果应用需访问存储,还需要通过容器存储接口为容器组创建存储。

(4)外部组件:外部组件包含分布式一致性组件、网络组件、镜像分发服务和容器运行时组件、授权认证服务组件、存储实现。

整个容器调度平台由三部分组件构成,第一部分为客户端组件,包含界面管理平台和命令行管理工具,提供用户操作和交互的入口;第二部分为核心组件,包含系统初始化组件,API接口组件,资源对象控制器组件,调度器组件和节点代理组件;第三部分是外部依赖组件,包含节点访问接口插件,网络组件,容器引擎以及文件存储系统。特别地,通过节点访问接口插件可以用户外部存储系统的扩展。

容器编排调度如图4所示,调度的核心功能包括资源统一管理,调度策略,调度器、控制器、API服务、配置组成。每一个待调度的容器都会进入资源池队列进行统一管理,当调度器发现资源池中有需要调度的容器后,会通过调度策略动态的根据该应用的情况选择合适的服务器节点进行部署运行,而调度算法在执行的过程中需要中资源池中获取整个系统的运行情况,根据运行情况来做出最优的调度选择,最终实现资源的负载均衡、弹性伸缩。

图4 容器调度示意图

4.基于组件化的软件封装技术

使用容器技术对嵌入式应用软件进行封装能够实现软硬件平台解耦,支持应用程序的动态加卸载,但是对于资源有限、实时性要求较高的应用场景,其优势不能完全发挥,因此,本文OSGI技术进行实时环境下软件的封装。

基于OSGI的软件封装功能由软件组件管理和服务管理两部分组成。软件组件化管理实现软件组件化功能,并完成软件组件生命周期管理;服务管理基于软件组件提供服务注册和注销、服务检索、服务绑定和调用。

软件组件,即拥有自己的属性和方法,能够对外提供服务,同时也能使用外部服务的一种服务构件,是可部署、易管理、可重用、可组合的软件单位。其模型如5所示。

图5 军用软件构件模型

软件组件模型包括以下接口:

1)被管理接口

软件组件作为一个易管理的软件单元,框架只需通过被管理接口即可管理该构件。通过这个接口,框架可以根据需要启动、停止该构件,达到易管理、可部署的目的。此接口必须存在。

2)服务接口

服务接口指该组件向外提供的服务,组件本身对消费者来说是不可见的,消费者请求服务是通过服务接口进行的。消费者与组件进行交互的实体是组件所提供的服务对象,它并不关心组件的名称及所在的位置(位置透明性)。此接口可选。

3)服务属性

服务属性是服务的一些特殊信息,比如此服务所提供的授权信息等。此项可选。

4)事件监听接口

事件监听接口用于监听构件所依赖的服务的注册、注销事件,从而及时更新对其它组件所提供服务的依赖状态。此接口可选。

5)服务依赖

服务依赖指该组件所需要依赖的其它服务,分强制依赖服务和可选依赖服务两种。强制依赖的服务在组件安装时,需要解析该服务所在的组件,并和主组件一起进行安装,否则组件安装失败。而可选依赖的服务,则可以等组件使用时再进行加载启动,它的存在与否不影响构件其它功能的正常运行。

5结束语

在IT技术高速发展的背景下,面对嵌入式装备系统资源动态调整、功能可扩展的需求,本文重点分析了装备领域中软件服务化封装的需求,结合通用领域中容器、OSGI组件化技术提出了嵌入式领域软件服务化封装的解决方案。对于实现系统能力敏捷生成,降低软件维护成本具有重要意义。

参考文献:

[1]谷歌服务框架许可[J].办公自动化,2019,24(19):19

[2]Spring Dynamic Modules Reference Guide for OSGi(tm) Service Platforms[Z] 2007:5-6.

[3]Humberto Cervantes and Richard S.Hall. Automating Service Dependency Management in a Service-Oriented Component Model[J].Laboratoire LSR Imag,2003: 53-55.

[4]张捷.JSF框架开发技术浅析[J].无线互联科技,2016(20):135-136.

作者:吕广喆,

出生年月:1987.11.9,

性别:男

籍贯:陕西商洛人

职称:高级工程师

研究方向:嵌入式分布式系统