以下内容来自 2013年西北工业大学博士论文《多层次分布式服务的分布仿真支撑平台技术与应用》,作者李铁。
20世纪90年代,美国军方在SIMNET项目的体系结构和协议基础上提出了DIS(Distributed Interactive Simulation)。DIS是一个网络协议标准,它提供了通过协议数据单元PDU(Protocol Data Unit)传送实体状态和其它信息的方法。这些协议数据单元由数据包组成,在仿真网络上用广播的方式发送。在仿真应用的推动下,DIS从仅支持基于同构网络的分布交互仿真发展为支持基于异构网络的分布交互仿真,从概念性研究发展到人员训练、武器研制、战术演练和空中交通管制等具体的仿真应用。DIS采用了消息广播机制及固定的PDU单元使得系统的可伸缩性和协同性不好,另外由于DIS缺乏可靠的对象间通讯和时间管理服务,所以不能满足大规模仿真的需求,这些都影响了仿真应用向深度和广度发展。
在90年代初期,DARPA资助MITRE研究设计了一种用于大规模的、聚合级对抗仿真的通用仿真协议ALSP(Aggregation Level Simulation Protocol)。ALSP的设计中没有中心结点,每个仿真应用都需要通过控制自己的局部资源自主地采取行动。它支持系统动态配置,仿真实体可以自由加入和退出仿真。此外,ALSP还提供地理分布、基于消息的协议、时间管理、数据管理和属性所有权相关的服务。与DIS中的实时仿真器不同,ALSP提供的时间管理服务中的仿真时间是与物理时间无关的,它一种离散事件仿真,能够保持仿真中事件的因果关系。为了将具有不同内部数据表示的仿真应用集成到同一个系统中,ALSP还定义了一种通用表示方式及相应的转换和控制机制。
在总结DIS和ALSP的经验基础上,经过仿真项目的不断地修改和验证,1996年9月,美国国防部仿真与建模办公室DMSO(Defense Modeling and Simulation Office)颁布了高层体系结构HLA(High Level Architecture)。在随后的一年多时间中,HLA标准得到了不断的改进并在改进过程中形成了HLA v1.1、HLA v1.2和HLA v1.3标准。在1997年6月HLA开始了IEEE标准化过程,并于2000年10月被正式采纳并形成了IEEE P1516、IEEE P1516.1、IEEE P1516.2系列标准,其中IEEE P1516为HLA标准的框架和规则,IEEE P1516.1是HLA标准的接口规范,IEEE P1516.2是HLA标准的对象模型模板。
经过HLA v1.3和HLA P1516较早版本的试行阶段,SISO又在2008年提出了新一代的HLA 1516Evolved标准,其中主要解决的问题是:一、提出模块化的FOMs和SOMs,使维护HLA对象模型更加灵活,拓展更方便,可以从标准模型中分离出自定义内容,通过逐步使用部分内容模型来完善整个联邦对象模型;二、新增了Web服务,通过该服务可以在广域网上以Web服务通信框架的方式实现对HLA标准功能的访问;三、不同邦员定购同一信息时可以选择不同频率,从而降低网络负载;四、制定了动态链接兼容机制,使联邦在不同RTI平台之间切换更简便,甚至不需要重新编译和链接;五、增加了容错机制,HLA 1516Evolved标准下的联邦中某成员出现故障时,联邦将能够及时探测到并将其移出联邦;六、其他方面的修改,如时间类型标准化和改进数据记录等。
由上可知,HLA发展到HLA 1516Evolved这一步,已经在仿真的重用、容错、降低网络负载和Web服务方面进行了较大改进。HLA标准的实现需要相应软件的支撑,该软件被称为运行支撑平台RTI(Runtime Infrastracture)。不过,目前国内外应用较多的是符合HLA v1.3或者HLA 1516这两种版本标准的RTI,符合HLA 1516Evolved标准的RTI较少,其中已经实现商用的有pRTI v4.0。
HLA标准由三部分组成:规则、对象模型模板和接口规范。
HLA的规则主要规定了邦员的责任以及成员和RTI之间的关系,一共有10条规则。
对象模型模板OMT(Object Model Template)提供了表示HLA对象模型信息的通用方法。在HLA中,对象模型分为两种:联邦对象模型FOM(Federation Object Model)、仿真对象模型SOM(Simulation Object Model)。对象模型模板由对象模型鉴别表、对象类结构表、交互类结构表、属性表、参数表、路径空间表、FOM/SOM词典等部分组成。
HLA的接口规范通过规定RTI提供的接口以及邦员提供的回调接口来确定邦员之间如何交互,按功能可以分为6类服务,详细说明如下:
1)联邦管理(Federation Management)
一个仿真系统称为一个联邦。此项服务是管理整个仿真联邦的运行;建立和销毁联邦,加入和退出邦员,邦员同步点和实施联邦的保存和恢复等。
2)声明管理(Declaration Management,DM)
完成实体对象(Object)和交互(Interaction)的发布(Publish)和订阅(Subscribe),以及相关的一些协调控制工作。
3)对象管理(Object Management)
对象管理包括了对象实例注册(Object Instance Registration),属性值更新(Attribute Values Update),对象实例发现(Object Instance Discovery)和属性值反射(Attribute Values Reflection),发送交互(Send Interaction)和接收交互(Receive Interaction),还包括控制实例更新的相关函数以及其它函数。
4)所有权管理(Ownership Management)
所有权管理通过“推”或“拉”机制来完成对邦员之间对象属性所有权的转换服务。
5)时间管理(Time Management,TM)
时间管理提供多种时间管理策略和时间推进策略,并负责联邦时间的推进。
6)数据分布管理(Data Distribution Management,DDM)
数据分布管理通过路径空间(Routing Space)(HLA1.3)或区域(Region)(HLA1516),在声明管理实现基于对象类和对象属性数据过滤基础上,提供更加精细的基于对象实例属性值的过滤,以减少网络数据的传输。
以往的RTI主要采用了以下几种架构:
1)集中式。如图1.1所示,集中式RTI是在一个联邦中只部署一个RTI服务器,HLA的所有功能都集中在该RTI服务器上实现。集中式RTI易于管理,全局数据维护效率高,数据一致性容易保证。
图1.1 集中式架构
2)功能分布式。所谓功能分布式的RTI是将RTI的实现分成两部分(图1.2),一部分称为中心RTI部件CRC(Central RTI Component),主要负责联邦管理、对象管理中的全局名及全局标识管理、所有权管理以及时间管理中的时间计算等工作,另一部分称为局部RTI部件LRC(Local RTI Component),主要负责声明管理、对象管理中的对象发现、数据更新、交互等、时间管理中的逻辑时间、消息排序等、以及数据分发管理等功能。在一次分布式仿真中,系统部署一个中心RTI部件CRC,同时在每个邦员中部署一个局部RTI部件LRC,CRC部件、每个LRC部件之间都相互连接。
图1.2 功能分布式架构
3)全分布式。全分布式RTI结构如图1.3所示,其中每个局部RTI部件都相当于一个RTI,它不存在中心RTI,它的优点是不存在系统瓶颈问题,但是缺点是缺乏集中的全局管理,在实现类似时间管理等这种需要全局数据的管理服务时,随着系统规模增大,复杂程度将急剧增加,效率降低很快。
图1.3全分布式架构
4)层次式。图1.4示意的体系结构中有多个RTI系统,这些RTI系统称为RTI节点,另外还有一个独立的中心系统运行,称之为中心RTI节点。各个RTI节点为平等关系,负责接收和转发仿真应用程序的数据,是最基本的数据交互管理单位和接口。管理这些RTI节点的是中心RTI节点,它负责全局数据的处理,是各个RTI节点的协调中心,不同RTI节点之间以及它们与中心RTI节点之间采用自定义交互协议通信,通过协商共同实现HLA/RTI的服务功能,使得各个主机上独立运行的RTI节点对于邦员来说相当于一个集中式服务器。
图1.4层次式架构
5)改进的层次式。这种体系结构与层次式大体相似,也是三层结构,见图1.5。主要区别在于其最顶层通过若干节点实现全局性事务管理,包括管理邦员与中间层服务器的状态,监控各中间层服务器的心跳和处理负载平衡等事务。
图1.5改进层次式架构
6)多层次的联邦群。图1.6所示的多层次联邦群是将多个联邦通过邦员代理按照树形结构连接,各个 联邦分别建立在各自支撑平台上,由邦员代理将联邦间通信信息聚合后发出。这种结构实际是运行于多个支撑平台上的多联邦互联,在系统规模增大时,邦员代理容易成为系统瓶颈。
图1.6多层次联邦群
声明管理是RTI减少网络通信流量的基本措施。HLA标准采用对象模型(Object Model,OM)来描述联邦中的邦员在联邦运行时需要交互的各种数据及信息。
联邦对象模型(Federatioin Object Model,FOM)提供了所有邦员之间交互的信息模型协议,它是个整体统一的协议,各邦员还需要制定自身涉及的模型协议,即成员对象模型(Simulation Object Model,SOM)。SOM中确定邦员公布和定购的对象类及属性、交互类及参数等特性。
邦员加入联邦后立即根据预先确定好的静态SOM声明自身的公布和定购信息,由RTI保存这些信息,并在公布与定购有交集的邦员之间建立通信连接,通过控制信息的传输通道来实现声明管理。
这种声明管理模式严格确定了邦员的公布与定购信息。它的缺陷在于:对于一个复杂的联邦,由于邦员众多,功能各异,涉及的知识领域不同,通常情况下,邦员的模型设计者能掌握该邦员的功能和工作流程,清楚运行过程中所需求的信息,但是却难以确定该邦员需要公布的信息内容,容易出现漏报或多报现象。漏报时会导致仿真模型不完整,而多报时会出现冗余信息,造成资源浪费,所以在联邦开发过程初期的FOM和SOM设计阶段通常会花费大量的时间和人力才能确保声明正确。
另外,对于层次式RTI或者多层次的联邦群,声明管理是针对全局而言的,它们无法实现局部的声明管理。例如一个局部RTI或者局部联邦下的成员A定购了某个交互类,成员A不会只收到局部RTI或局部联邦内产生的交互实例,而是会接收到系统全局范围内产生的交互实例。成员A如果希望只响应局部生成的该类型交互,只能有两种方法:
一是重新制定新的交互类型或者派生子类。这种方法相当繁琐,在带来不便的同时也容易造成一些理解上的歧义。例如同样是发射指令,需要通过制定类似A区发射指令和B区发射指令这样的多个类型才能区分开,所以比较繁琐。
二是通过具体的参数来区分。这种方式下,所有定购了该类型交互的成员都将先收到数据,然后再在成员内根据接收的参数数值进行判断,所以并没有减少不必要的网络通信。
声明管理在通信上实现了基于类的过滤,数据分发管理的目的是在此基础上进一步实现基于数值的过滤,采用的方法是通过高效的匹配算法确定有效通信数据,尽量消除网络中冗余信息,提高网络带宽利用率。下面是常用的几种DDM算法,首先给出相关的部分定义:
公布区域集:用于发送交互或更新实例属性的区域实现的集合。邦员利用它来表明发送数据的范围。
订购区域集:用于类属性订购或交互类订购的区域实现的集合。邦员利用它来表明接收数据的范围。
范围交叠:同一维度上两个范围,交叠当且仅当或且。
区域交叠:两区域交叠当且仅当这两个区域的所有公共维度上的范围交叠,如果两个区域没有公共维度则不交叠。
区域集交叠:一个公布区域集与一个订购区域集交叠当且仅当这两个区域集中至少各存在一个区域,且这两个区域交叠。
公布区域集和订购区域集可随着邦员的兴趣或实体在仿真环境中状态的变化而变化。
DDM的基本方法是在各邦员声明的公布区域和定购区域的基础上,通过判断公布区域与定购区域的交叠与否来决定是否在公布与定购邦员之间建立通信联系。当一个公布区域集与一个订购区域集交叠时,RTI在这两个区域集所属的邦员之间建立一个连接关系,从而订购邦员能够收到公布邦员的属性更新。当一个公布区域集与一个订购区域集没有交叠时,RTI就不会在这两个区域集所属的邦员之间建立数据连接关系,订购邦员也就收不到公布邦员的属性更新。
穷举法是通过查询当前所有的订购(公布)区域来判断与某公布(订购)区域是否相交。这种算法最简单,不需要存储额外的信息并且能够精确判断有效的匹配区域。但如果分布仿真系统中的实体数目较多时,这种算法计算量很大,假设共有N个d维区域需要进行匹配,则查询复杂度为O(d*N)。为此,有些研究者在此基础上提出了区域聚合的方法,通过聚合操作将一些相近或交叠的原始区域合并来减少区域总数,从而减少区域匹配计算的复杂度,但是这种方法牺牲了匹配精度,原本不交叠区域也可能判为相交,使得过滤效率下降。
网络法是将d维区域预先划分为规则的d维网格。每一个网格都对应一个UDP通信的多播组。对区域边界进行简单的计算可确定区域覆盖的网格。当邦员创建一个区域时,就可以确定它所覆盖的网格,然后该成员加入到网格对应的多播组。如果某邦员删除了一个区域,它应该退出对应的多播组。如果公布区域和订购区域相交,则它们一定覆盖了至少一个相同的网格,所以它们会至少加入一个相同的多播组。公布邦员将数据通过多播组发送到订购邦员。如图1.7中,P1与S1相交于R6、R7,那么邦员可以通过加入到R6、R7对应的多播组来发送和接收对应信息。
图1.7网格法示意图
网格法算法简单,实现容易。由于其发布区域和订购区域之间的交叠判断是通过与预先划分的网格比对实现的,因而计算开销较低。网格法计算动态d维区域与网格相交的时间复杂度为O(d*K)(K是被覆盖的网格的数量)。
网格法的缺陷主要表现在以下5点:
1)当公布区域和订购区域覆盖相同的网格而实际上并未相交时,会引起数据在公布区域与订购区域并不相交的公布邦员和订购邦员间传送,产生虚假连接。虽然通过细分网格可以在一定程度上减少虚假连接的产生,但这将增加多播组的数量;
2)当公布区域和订购区域共同覆盖多于一个的相同网格时会产生冗余连接,使同一数据被多次发送和接收,造成资源浪费。虽然可以通过其他算法剔除冗余连接,但是会增加计算量;
3)网格法所需的多播组数量较多,而且利用率不高。在网络通信中,过多使用多播组会造成网络和主机I/O性能的降低。多播组划分过细时,组内成员变动比较频繁,加入或退出多播组的耗时和故障率也随着数量的增加而增大;
4)采用网格法的RTI中,邦员只简单地根据区域本身所覆盖的网格去加入或退出相应的多播组,不考虑是否有其他邦员在相应区域上有数据需求,因此,信息使用率不高;
5)多播组的利用率不高,如果某些网格不被区域覆盖时,则该多播组不对应任何发送或接收者,浪费了网络资源。
由于网格法的以上缺陷,不少研究人员提出了一些改进算法,如通过计算最优网格大小来提高多播组利用效率,但是由于网格法的特点,改进算法只在性能上有所改善,无法在原理上弥补自身的缺陷。
空间层次划分算法的基本思想是认为在分布仿真系统中,由于分布在全域空间上的多数实体区域之间是没有关系的(即公布和订购区域不交叠),所以可以事先将整个空间划分为若干小空间,然后再进行匹配。不同的层次划分法的主要区别在于空间划分方法的不同,有的是将全部空间划分为多个子空间,然后再将各个子空间均匀划分,有的则是将空间进行多次二叉树划分,直到获得足够的子空间,然后再确定各子空间内的待匹配区域。显然,子空间的划分大大减少了各子空间内的待匹配区域数量,如果将全空间进行k层划分,每层均匀划分为m份,则N个d维区域进行匹配的平均时间复杂度为。层次划分法虽然可以有效减少区域匹配数量,但是影响算法效率的因素在于区域的空间分布情况和划分空间的方法,最坏的情况相当于在各个子空间上进行穷举法。
为了进一步减少数据分发时需要匹配的区域数量,一些研究人员提出了基于区域移动历史相交信息的快速匹配算法。该算法认为待计算区域移动时,与其它区域相交的变化情况必定与该区域的移动有关,所以该区域在更新时不用与其他区域匹配,只需要考虑在移动范围之内的区域即可。
具体实现时,将所有区域中属于相同维的范围数据使用一个有序列表维护,将待计算区域的各维通过对应的有序列表进行基于快速优化算法的查询比对。假设待计算区域的某维范围用表示,那么在找到了小于a的最大值范围和大于b的最小值范围所对应的区域后,就能够确定可能相交的区域了,从而避免了与其它区域进行交叠判断,减少了计算量。
图1.8基于区域移动历史相交信息的快速匹配法示意图(移动前)
图1.9基于区域移动历史相交信息的快速匹配法示意图(移动后)
如图1.8所示,若L1是待比较范围,将L1~L6的范围按顺序排列,可知比L1左端小的最大值范围是L4,比L1右端大的最小值范围是L5,那么L1可排除L4和L5,而只与L2、L3、L6比较。而当L1移动后(见图1.9),该算法只需要从已有的L2、L3、L6中删除去L2,然后再从有序列表的右侧中查找出新入的范围L5即可。如果大规模分布仿真系统中的待比较区域很多,这种算法可以有效降低计算次数,查询效率较高。
图1.10区域部分交叠示意图
上述所有的算法都是尽量减少进行定购与公布区域匹配的数量,但是这种按公布和定购区域进行交叠匹配的数据分发管理算法本身是有缺陷的。见图1.10,P1是公布区域,S1是定购区域,按照以上的数据分发管理算法,两者之间有了交叠,所以建立了通信连接,所有P1的数据都发往S1方,但是图中可以看出,事实上P1中的A点数据并非S1所需,而只有B点数据是S1需要的,这就造成了通信资源的浪费,没有完全过滤掉无用数据。造成这个缺陷的原因在于通常公布区域与定购区域之间不会完全重合,如果按照区域交叠匹配关系实现通信管制时,必然会有一些无效数据发往定购方,造成网络通信和数据处理上的资源浪费。如果数据在公布区域内呈平均分布,那么无效数据出现的机率与公布、定购区域交叠的程度成反比。
另外,从实际使用的角度来看,由于各邦员不仅要确定定购的维度和区域,还要确定公布的区域,实现起来比较繁琐。尤其在当联邦规模大时,对象类和交互类以及属性、参数的数量极多,实际工作中难以做到为每个属性或参数设置公布与定购的区域。这就导致多数仿真项目在实际执行时,往往没有设制维度和区域,也就实现不了数据分发管理的目标,所以需要采取措施减少实现工作量。
分布仿真支撑平台是仿真系统各成员间通信交互的技术核心,如果平台故障将造成整个仿真过程的失败,这是不可接受的,所以容错处理能力是衡量一个分布仿真支撑平台性能优劣的指标之一。
从系统组成的角度来看,一个分布式仿真系统的故障可能出现在三个层次上:资源层、中间件层以及应用层。其中资源层错误包括底层的网络设施及计算机节点故障,这种故障可能是硬件的问题(如网线、路由器故障),也可能是软件的问题(如操作系统崩溃);中间件层错误主要是指软件崩溃导致的全局或局部服务中断;应用层错误则是指运行于支撑平台之上的、与具体仿真研究领域密切相关的各种联邦及邦员进程崩溃。由于资源层故障将导致中间件层服务中断,所以关于这三个层次的错误处理主要表现在中间件层和应用层处理上。
对于中间件层的错误处理,目前的主要处理措施是采用心跳通信机制来探测故障节点。如BH-RTI在探测故障节点的同时为各个节点实时备份信息数据,如果发现节点故障后,则通过管理者节点记录下故障点信息并在新节点加入后恢复数据,以便从错误发生处继续执行仿真过程。另外,如果管理者节点故障,其他节点会通过竞争选举出新的管理者,并通报新管理者的位置信息。不过这种方法的问题在于:故障RTI节点在没有恢复正常前,其下属的邦员是无法继续参与仿真的,而且如果应用层的邦员没有设计自动恢复机制,那么当RTI节点恢复正常后,邦员也无法自动加入联邦。
对于应用层的错误处理,HLA 1516Evolved标准中制定了部分容错机制,当邦员出现故障时,联邦将能够及时探测到并将其移出联邦。不过这种处理方法只是确保故障成员不影响其他成员运行,对于如何恢复联邦的正常仿真功能没有涉及。一些研究人员提出利用网格技术来实现系统资源监视以及数据备份和恢复,这样可以降低实现分布仿真支撑平台容错处理机制的难度。还有些研究是通过冗余的邦员来实现信息冗余,以此来处理邦员出现的故障。虽然这些处理机制能够在一定程度上解决应用层错误,但是这些方法的问题在于难以设计通用的信息备份和恢复机制,这是因为应用层的软件设计千变万化,需要备份的内容除了与仿真支撑平台交互的数据外还包括大量复杂的描述自身状态的信息,而这些信息无法预测,也没有规律可循,所以需要针对具体情况设计。
与容错处理类似,负载平衡处理的对象主要是中间件层和应用层。分布仿真系统的负载失衡根据原因也分为与之相关的两种:一是应用层的仿真成员间由于自身运算量的不同造成的负载失衡;二是由于网络通信量的不同在RTI内部引起的负载失衡。
国内外研究人员对仿真系统负载平衡处理的研究大部分集中于应用层上,即通过迁移邦员来调整联邦内各仿真节点的负载。从应用层的角度通过邦员迁移来解决负载失衡问题。这些方法的不足在于:
首先,应用层的邦员必须具备一些如备份和状态恢复这样的功能,但是由于RTI并不提供这些服务,所以对应用层的邦员设计要求较高,增加了用户开发难度。
其次,对于一些自身占用资源过大的邦员,如果不预先部署,将会因为迁移较大的资源以及状态文件导致整个系统长时间停滞,反而降低了仿真效率。
第三,有些方法需要利用网格、移动Agent技术或第三方软件支持,增加了开发和使用复杂性。
最后,如果邦员在迁移时是一个不可拆分的整体,那么计算量大的邦员在迁移后容易因自身运算任务繁重会造成原本负载较轻的主机节点迅速过载,从而导致系统负载再次失衡。
中间件层的负载平衡主要是处理分布仿真支撑平台内部节点的负载失衡问题。由于中间件层对于上层应用来说是透明的,所以不会增加仿真系统开发人员的工作量。不过现阶段,作为中间件层的分布仿真支撑平台只有少数具备了负载平衡能力。比如基于CORBA技术研制RTI,它采用了层次式服务体系,最底层是部署在邦员节点上的代理层,代理层通过调用局部RTI服务器的功能来实现服务。而CORBA技术确保了代理层能够根据负载情况从多个服务器中自行选择负载较轻的服务器提供服务,这类RTI的负载平衡能力取决于所采用CORBA平台的性能。