刘 剑,卫 翔,田立业
(海军潜艇学院,山东 青岛 266199)
分布式联合作战仿真需要将各种异构仿真系统连接成一个有效的仿真整体,共同完成多任务多协同的仿真任务,但原有各系统仿真结构封闭,特别是开发语言又不尽相同,给系统的联通和操作带来了很大困扰。按照联合系统一体化仿真的功能需求,对其进行有效升级的一种可行方法是通过分布式仿真中间件系统[1-2],将多异构仿真系统进行有效联通而无需深入改造各系统内部,从而大大减少仿真资源消耗,降低系统结构复杂度和维护升级成本。
针对系统一体化仿真中的多开发语言、通信协议设计以及综合任务协调等问题,对异构系统一体化仿真中间件系统的结构功能进行了分析,采用Thrift 跨语言服务架构建立异构系统一体化仿真中间件系统[3],为实物仿真系统、半实物仿真系统,以及虚拟仿真系统等异构系统提供仿真中间件集成、协议转换、综合导演控制与调度服务,实现异构系统的一体化综合仿真的有效运行。
异构仿真系统是指在结构、协议、模型粒度和开发语言等多方面存在不同之处的仿真系统。这些仿真系统在初始设计时立足本系统功能要求,在系统结构和对外交互方面形成了内部界限,难以扩展和升级。在一体化仿真新需求下将这些系统连接,需对异构系统联通的诸多问题进行有效优化解决,否则各系统改造升级将变得复杂和成本高昂。需要解决的问题主要包括:
1)不同开发设计语言下各异构系统节点通信开发设计,例如采用java、C++等设计语言的客户端与服务端的通信构造协议设计;
2)各异构系统节点的仿真统一控制协调设计,包括仿真时间域和空间域的统一,仿真效能的一致性评估判断等;
3)各异构系统节点的多仿真任务的支持设计,需要将多异构节点组合,组织和并行多仿真任务。
针对不同的开发设计语言、不同的交互协议以及仿真任务同步控制需求,采用中间件系统无疑是以较小代价有效实现异构系统一体化仿真的有效途径。中间件系统可以提供对底层网络、硬件、操作系统和编程语言异构性的屏蔽,同时还为分布式应用与服务提供一致的支撑计算模型。能够较好地完成分布式异构系统的集成、互操作,并保证这些系统的可移植性,是当前分布式应用开发和集成的主要手段。
现有仿真通信中间件系统通常采用protobuf[4]等通信协议解决跨语言系统通信问题,或者采用DDS 数据分发机制[5],建立以数据为中心的发布订阅模型,实现分布式系统中数据实时、可靠、高效分发问题,这些系统的开放性和扩展性不强,难以满足跨语言和跨平台的一体化仿真综合需求。Apache Thrift 是一个跨语言的开源服务部署框架,具有开发速度快、接口维护简单、学习成本低、跨语言支持和稳定等特点,并已经广泛应用于Cassandra、Hadoop、HBase、Facebook 以及百度、美团等公司[6-7]。因此,可以利用Thrift 服务框架,构建分布式异构系统一体化仿真中间件系统。
异构仿真系统中间件系统主要包括异构系统桥接转换单元和综合控制单元。综合控制单元与各异构系统通过桥接转换单元构成客户端/服务端的C/S(Client/Server)系统结构。基于中间件系统桥接转换单元,各异构系统采用Thrift IDL(Interface Description Language)接口描述语言进行信息交互,并在综合控制单元的协同控制下完成仿真的协调推进。系统结构如图1 所示。
图1 异构系统联通中间件系统结构组成
Thrift 软件从下向上可分为传输层、协议层、处理层和服务层。异构系统一体化仿真对处理层和协议层进行按需处理。对于处理层,各异构系统在仿真中间件系统支持下,采用IDL 按本系统开发设计语言生成系统信息交互所需的数据结构代码,例如各系统的状态信息、所维护的内部仿真实例信息以及仿真交互信息等。IDL 支持的数据类型包括基本类型、复杂结构体类型(struct)以及容器类型(list、set、map),可以满足复杂异构系统信息交互数据定义需求。
对于协议层,其负责网络传输数据的序列化和反序列化,其协议方式包括JSON、XML、二进制数据等[8]。异构系统一体化仿真采用二进制传输协议定义数据传输格式以节约带宽提高传输效率。此外,在调试联测阶段还可采用基于文本类型的JSON 协议,通过脚本解析信息,便于问题定位和状态测试。采用Thrift IDL 定义系统间信息交互结构以及相应协议,使得异构系统一体化仿真通过底层网络封装、传输和序列化方式进行系统间数据通信,大大降低开发设计语言不同所导致的系统信息交互复杂性。
桥接转换单元是各异构系统相互之间以及异构系统与综合控制单元之间信息交互的桥梁。由于异构系统设计研制之初并没有考虑对外信息交互的拓展需求,因此,为有效达成异构系统一体化仿真,采用桥接转换单元进行信息交互在技术可行性以及系统升级维护成本上能达到优化平衡,有效减少系统内部深度改造的高昂成本。具体功能如下:
2.2.1 协议转换
采用Thrift IDL 原语对异构仿真系统内部交互信息实施编码和解码。包括将外部仿真信息进行转录和解释后传入至异构系统内部,并将异构系统内部仿真状态信息,按照外部IDL 格式编码后发送至综合控制单元。
2.2.2 心跳守护
由异构系统内部主控程序驱动,定时向外部系统发送异构系统节点当前工作状态,便于外部系统进行状态检测和相应上线/离线控制。
2.2.3 仿真服务交互
通过协议转换,将异构系统内部的仿真实例状态信息或服务请求信息传送给综合控制单元;接收综合控制单元的服务回调信息,将总体仿真控制命令、外部系统仿真状态以及服务计算结果等信息通过协议转换模块,发送至异构系统内部。
需要说明的是,根据各异构仿真系统通信机制不同,桥接转换单元可以有不同的结构形式,主要包括集中式和分布式两种。
集中式指客户端/服务端的CS 结构方式,这类异构系统在通信协议方式和类型可能有多种形式,例如,较为常用的Socket 通信或DDS 通信。此时桥接转换单元以信息交互单元形式加入至各异构系统,由综合控制单元协调异构系统内部主控单元,驱动异构系统内部各分系统协同工作。
分布式仿真方式通常有DIS 或HLA 两种。以HLA 为例,桥接转换单元加入至异构系统成为RTI联邦成员,由桥接转换单元转换外部综合控制单元的允许仿真步进信息,由RTI 服务器协调异构联邦各分系统联邦成员协调推进,并将RTI 联邦成员交互信息按照订阅/发布机制进行信息转发。
由于组成一体化仿真系统的原有各异构系统在仿真精度、仿真结构、仿真控制逻辑上都有定制的个性化需求,就需要综合控制单元这样的中心枢纽控制节点进行全局的控制,而不是将仿真同步控制等功能分解至各异构系统内部,那样无疑会增加系统升级难度和结构复杂度。综合控制单元通过桥接转换单元协调各异构系统仿真同步,监测系统内各成员的仿真状态,生成系统综合仿真全局态势数据,实施全局仿真控制,提供系统仿真服务。主要功能包括:
2.3.1 仿真想定编辑与生成
编辑仿真想定,生成初始仿真态势并发送至各异构系统节点,各节点收到初始态势后按照内部业务逻辑在综合控制单元导控下,进行仿真计算和结果输出。
2.3.2 协议转换与心跳守护
对异构系统与综合控制单元之间的信息交互进行协议转换;接收异构系统定时发送的节点工况信息,实施状态实时监测并保持异构仿真系统与综合控制单元的通信长连接,同时,对异常离线成员进行系统异常判断并进行状态保护。
2.3.3 仿真计算服务
采用服务器集群形式对异构系统一体化仿真提供所需的仿真计算服务,服务类型包括基础性服务和功能性服务两类。基础性服务实现对异构系统一体化仿真的综合控制功能,例如,仿真对象的管理、仿真推进控制等;功能性服务为各异构系统节点提供定制的业务逻辑仿真计算,保证仿真模型粒度一致性和重要核心仿真模型的可重用与可扩展,例如,实体坐标递推计算、战场环境分析等。
2.3.4 数据冗余备份
为异构系统一体化仿真提供系统仿真数据备份和控制单元服务切换。由于综合控制单元是异构系统一体化仿真网络的主控与核心,需要对控制单元进行数据冗余设计,采用zookeeper[9-10]分布式协同服务,在综合控制单元故障情况下,实时备份和同步数据,并按需进行主从控制单元的冗余切换。
2.3.5 负载均衡
集群服务下对异构系统一体化仿真全系统网络实施负载均衡服务治理。仿真运行时,根据中间件系统综合控制单元服务器的实时负载信息,采用软负载均衡方法,例如平均分配(轮询)法,选择和调度异构系统任务仿真的服务分配,减轻可能的多仿真任务下的服务器压力。
作为一体化仿真系统的Thrift 服务端,由综合控制单元实现中间件系统的仿真服务功能,为各异构节点提供一体化仿真所需的仿真服务支撑。综合控制单元仿真服务从顶至下可划分为功能层、基础层和支撑层。其仿真服务结构层次如图2 所示。
图2 综合控制单元组成与服务
功能层服务为各异构系统节点提供定制的或为维护一体化仿真时空逻辑一致性的功能性服务,主要包括作战环境分析、态势递推、传感器探测等。其中,环境仿真包括大气环境仿真和水声环境仿真,对电磁、声波等能量在环境中的传播特性进行统一的建模描述;武器弹道仿真包括鱼雷、导弹等武器搜索目标、跟踪目标和命中目标全程弹道进行一致性的弹道逻辑描述;传感器探测仿真对在环境分析基础上的雷达、声呐等传感器探测发现目标的物理过程进行仿真描述。
各异构系统节点利用Thrift RPC 远程服务框架,通过服务接口调用仿真所需的各项仿真计算,而无需关注底层通信细节,可以最大程度地维护一体化仿真的一致性,避免诸如武器弹道仿真细节和粒度不一致导致的时空逻辑矛盾。同时由综合控制单元服务器集群统一进行仿真计算,可较好地提高仿真运行效率,实现仿真模型资源的可重用和统一维护。
基础层服务为各异构系统节点提供全系统综合仿真控制服务,主要包括:
3.2.1 服务注入与发现服务
综合控制单元对服务端服务进行注册与发布,异构系统桥接转换单元可以通过zookeeper 的watcher 对服务自动发现,也可使用curator[11]第三方工具实现服务的注册、发现和订阅。服务注册与发现的内容包括:服务地址、服务端口、服务名称、服务交互参数结构类型等,其结构参数类型由系统Thrift IDL 定义。
采用服务注入发现的好处在于将综合控制单元与异构系统的通信解耦,从而实现对服务中心的灵活配置和动态连接,可在服务接口不变的条件下,实施仿真服务相关模型升级重构而不影响各异构系统。
3.2.2 全局命名服务
全局命名服务为系统仿真对象资源进行唯一标识。综合控制单元利用Zookeeper 的属性分层结构和子节点的顺序维护能力,对仿真对象进行全局唯一性的ID 标识。虽然依赖本地持久化数据库主键,可以唯一标识一个数据资源,但是在综合控制单元服务集群下,分布式全局命名服务可以支持并发和负载均衡的要求,提供多仿真任务的实时在线运行。
3.2.3 时间与数据同步服务
综合控制单元生成统一的全系统仿真时间,例如仿真想定设置的某一天文时间,并将带有时间戳的信息发送至异构系统节点,驱动异构系统主控程序进行相应的仿真控制。
数据同步是指利用类似Redis 分布式缓存技术[11-12],对所有仿真过程关键数据进行主从同步备份。在仿真结束后,数据从缓存持久化至本地数据库以作为仿真数据记录,同时所备份数据可支持综合控制单元故障下的切换控制以进行系统运行的再恢复。
3.2.4 全局对象管理
对一体化仿真中的所有实体对象进行全生命周期管理,建立全局对象实时快照,并定时通过数据同步存储至数据库系统。全局对象的综合态势信息可以通过附属显示系统显示,进而对综合仿真状态实时监测显示。同时,各异构系统通过远程服务接口按需调用所需实体对象服务,包括生成实体、删除实体、获取所需类型实体快照和历史数据等以用于内部仿真计算。这相比综合控制单元采用全局数据广播形式,其能够有效减轻系统通信负载。
3.2.5 全局冲突消解
全局冲突消解对于维护一体化仿真物理过程正确性具有非常重要的意义。因为仿真运行过程中,受异构系统模型粒度和精度不匹配以及不同时空域的影响,综合仿真的时序环节可能会存在冲突之处,这就需要综合控制单元实施全局层面的冲突消解,主要包括:
1)异构节点实体业务坐标系不匹配导致的冲突和消解。例如,大地球面坐标、平面直角坐标以及地理绝对位置和相对位置转换导致的对象实体坐标与姿态不一致情况。可由综合控制单元建立统一的坐标系,对各实体的位置和姿态进行统一递推修正,或由异构节点通过调用综合控制单元的远程服务用于相关仿真计算。
2)作战仿真能力冲突与消解,这表现在冲突双方对相关作战过程仿真建模描述不匹配。例如,异构仿真系统在传感器探测时,因为模型粒度和精度不同,导致同相互探测双方发现能力不协调。此时由综合控制单元对双方仿真能力进行调节,必要条件下强制干预和调整双方的仿真性能指标范围。
3)作战仿真效能的冲突与消解。这表现在冲突双方在仿真效能评估模型算法和指标不一致。例如,武器命中的毁伤达成效果、毁伤位置存在多方判定矛盾的情况。此时由综合控制单元实施仲裁,对冲突涉及对象的毁伤效能实施综合评估,并将结果发送至相关异构节点。
3.2.6 仿真推进控制
对各异构仿真节点的时间推进实施协调和控制。由于不同异构节点和不同仿真对象对仿真步长要求不一,例如,导弹等高速运动和舰船平台等低速运动仿真对象时间步长不同,此时综合控制单元提供仿真同步推进,根据各异构仿真节点要求推进到的仿真时间进行判别和协调,确定系统仿真时间同步点,控制各仿真节点是否允许推进,并对相关仿真对象运动和姿态平滑,在此基础上进一步实现一体化仿真的加速、减速、暂停与恢复等仿真控制。
综合控制单元除了操作系统底层支撑外,还需要Zookeeper、分布式缓存和Thrift 的基础软件对各项功能和服务进行支撑。
Zookeeper 提供配置维护、域名服务、分布式同步等一致性服务。为异构系统一体化仿真的全局标识、服务注入和发现等功能提供支撑。为仿真服务集群实现提供了有效配置和管理手段,提高了系统多任务仿真支撑能力。
分布式缓存Redis 提供高效率并发数据的读取与管理机制,不仅提供了主从数据的备份功能,还实现了高并发条件下的数据吞吐,为系统仿真提供了基础数据支持。
Thrift 不仅提供了跨语言的网络通信手段,还提供了远程服务调用基本架构。异构系统一体化仿真将复杂的网络通信抽象为远程过程调用,其调用形式如同调用本地子程序,使开发人员无需关注网络通信底层细节,提高了工作效率。
异构系统为实现一体化仿真必需对内部系统进行适用性改造。基于异构系统仿真中间件系统,重点对原系统导演控制单元和仿真计算单元实施功能性升级。以集中式C/S 结构的异构仿真系统为例,对其改造说明如下:
异构系统导演控制单元增加与桥接转换单元信息交互通道,实现异构系统与外部仿真想定、仿真态势、仿真控制等信息接收;仿真计算单元增加与桥接转换单元信息交互通道,实现与外部综合控制单元的功能层和基础层仿真服务交互,其他各单元保持现有信息通道不变,以与原系统仿真功能兼容。
异构系统导演控制单元对原仿真控制流程进行修改,在原系统独立控制基础上通过增加系统仿真模式判断(独立或互联)、外部仿真指令受控处理等相应调整,从而按外部综合控制单元要求实施想定申请与分发、驱动和控制内部系统仿真全程。
异构系统仿真计算单元保留原仿真计算服务功能并增加外部综合控制单元仿真服务调用处理。异构互联模式下通过服务切换控制和属性参数封装等手段,兼容原系统内部仿真计算服务交互接口,通过与外部综合控制单元交互查询和获取外部仿真对象信息,调用环境、探测与武器仿真等仿真服务功能,将相应对象属性和交互参数信息向系统内部各单元分发,保障异构系统内部仿真正常运行,实现基于异构系统互联的一体化仿真。
通过上述改造,异构系统原有结构和信息交互总体不变,原仿真想定编辑和各项仿真计算功能得以保留,从而在不影响原系统功能条件下实现各异构系统联通而无需深入改造异构系统各内部成员,实现异构系统独立仿真和基于仿真中间件系统的一体化仿真,充分发挥系统适用性改造效益。
异构系统一体化仿真中间件系统运行流程包括了综合控制单元和异构节点两部分,对其主要流程描述如图3 所示。
图3 异构系统联通中间件系统结构组成
综合控制单元启动后,首先进行服务注册与发布,并写入提供服务的服务器网络地址信息;异构系统节点通过桥接转换单元发现服务,并在负载均衡的协调下连接预定的控制单元服务器,发送心跳信息,确定双方工作状态。
综合控制单元由用户调用综合态势生成模块,读取数据库生成综合仿真初始态势,利用保存的长连接向异构节点发送初始仿真态势;异构节点收到信息后初始化本地态势,向综合控制单元发送实体初始化信息,综合控制单元收到后进行对象注册生成仿真实体对象。
仿真开始后,异构仿真节点进行本地仿真计算,调用时间推进控制服务,向控制单元发出仿真推进申请,综合控制单元根据各节点申请时间,确定时间同步点控制各节点仿真同步推进。
仿真过程中综合控制单元维护全局仿真对象,对数据进行缓存和同步,对异构仿真过程中的坐标转换和仿真能力不匹配等冲突进行消解,将消解的结果在对象属性或交互参数上更新,异构节点通过调用远程服务获取相关参数,引入系统内部模型进行更新,使得整个异构系统在业务能力上保持匹配。
综合控制单元在满足仿真结束的条件下停止仿真推进,在用户操作下保存相关数据并向各异构节点发出仿真停止命令,各节点进行内部数据保存并断开连接以结束仿真。
本文分析了异构系统一体化仿真的功能需求,利用Thrift IDL 建立包括桥接转换单元和综合控制单元的仿真中间件系统,分析了中间件系统桥接转换单元和综合控制单元的组成与功能,集成Zookeeper 和Thrift RPC 建立面向一体化仿真的综合服务层次架构。在异构系统一体化仿真中间件系统的支持下,各异构仿真应用系统可以有效连接和协同仿真,满足异构系统一体化仿真的综合性仿真需求,实现跨语言和跨平台的异构仿真系统互联互通,并可有效支持多异构节点和多仿真任务的实时在线仿真。