基于发布/订阅的LVC互操作方法

2019-06-13 02:56陆志斌王洪军李佳桢王大将
指挥控制与仿真 2019年3期
关键词:异构代理节点

陆志斌,王洪军,李佳桢,王大将

(陆军指挥学院,江苏 南京 210009)

近年来,作战实验作为一种检验新型武器平台和作战概念的有效手段,越来越受到各国的重视。经过多年的建设和发展,各个不同领域都有一些好用管用的作战实验平台和软件,但是随着世界范围内军事变革和作战概念的不断更新,整合不同领域内的系统、开展联合作战实验和基于系统的仿真模拟训练,为参训部队和实验人员提供统一时空、相对逼真的仿真战场环境越来越受到重视。为此,美军提出了LVC(Live, Virtual, Constructive)训练用于解决实装、模拟器以及仿真系统之间联合运用的一种分布式交互仿真体系结构。

LVC训练的核心思想是将分散在不同地域的实兵系统和模拟系统互联起来,在一个时空域内进行统一训练。为了将针对不同领域,不同问题的异构系统联合起来,进行时空维度统一的训练,首先要解决以下几个问题[1]:

1)不同训练系统之间数据的相互识别;

2)保证多系统联合运行的逻辑合理性;

3)保证系统具有良好的可扩展性和灵活的可组性。

当前,解决同一体系架构内的多系统互联,虽然解决了体系结构内各LVC仿真资源的互操作问题,但是由于各体系结构的应用,阻碍了发展更大规模的仿真环境[2]。而解决多体系结构的互联,主要可采用点对点式网关、总线式网关、美军LVCAR中提出的网关重用技术以及基于Web服务的WebLVC互联方法。这几类方法中,美军在LVCAR计划中设想可以通过“网关的网关”,复用互联现存的体系架构。WebLVC通过WebLVC Server进行映射的方式,能够克服传统仿真中网络类型的限制,更易于扩展LVC资源的使用范围[2]。

此外,对于特定的异构应用,仅仅实现数据间交互还不能满足要求,比如不同分辨率的构造仿真系统之间,数据维度和粒度差异较大,要保证此类异构系统交联需求,还需要针对具体应用设计相应的中间件。因此,灵活易用的互联模型还需要考虑可扩展性。

借鉴WebLVC的思路,本文提出订阅/发布模型可以用于进行异构系统数据的跨层级交互。通过构建在应用层覆盖网络上的发布/订阅以及各异构系统上的Data Agent,可以实现分类数据的传输交互,以及多层级系统的数据转换服务。

1 基于混合P2P网关服务的LVC联合训练方法

为了让多技术体系异构系统之间能够灵活高效进行互联互通,本文考虑在不改变各异构系统原有通信架构的同时,采用应用层网关的设计思路,将传统LVC互操作网关构建在一种混合P2P[3]应用层网络上,如图1所示。

图1 基于混合P2P网关服务的LVC联合训练方法示意图

异构系统采用此方法进行交互时,需要区分三类数据,采用基于规则映射Data Agent的方式进行通讯。

1) 实时性要求高的数据:此类数据由元数据规定,直接由各异构系统对应的Data Agent节点相互通信,节点列表由信息发布/订阅机制维护;

2) 实时性要求一般的数据:采用信息发布/订阅模型进行数据收发;

3) 互联互通元数据:直接由信息发布/订阅模型进行收发,相关元数据保存在各异构系统对应的Data Agent节点上,用于进行仿真数据的映射转换。

以跨系统聚合解聚为例,系统内部的聚合解聚由相应的系统独立完成;对于有跨系统聚合解聚的数据,首先在各自的Data Agent内定义元数据,规定好聚合或解聚的系统指向,统一发布到全网;之后,由各异构系统进行独立的交互数据发布,相应Data Agent根据订阅模板可接收到需要的数据,并转入系统内部进行聚合解聚。

2 关键信息发布/订阅模型设计

本文的发布/订阅模型借鉴Triantafillou[4-5]等人提出的结构化P2P网络发布/订阅模型,构建一种混合P2P网络结构,整个服务层网络由信息发布服务器、信息索引节点(Tracker Peer,TP)、普通节点(Ordinary Peer,OP)三类节点组成。网络中的TP节点和OP节点按照混合P2P方式组织起来,其中TP之间以结构化P2P方式连接,构成一个TP网络(或TP域),OP和TP之间以无结构方式连接,OP节点接受TP节点的管理;TP网络负责管理资源的检索以及为上层提供广播服务。本文中的信息索引节点(Tracker Peer)TP以Chord方式连接(以下简称Chord网)。事件通知服务由TP网络来维护,TP节点在发布/订阅模型中充当了事件代理(包括订阅代理和发布代理)的角色,订阅者通过自己连接的TP节点向事件通知服务发送订阅请求(该TP节点称为订阅者的订阅代理);事件的发布者首先将事件发布到自己所连接的TP节点上(该TP节点称为发布者的发布代理),由该TP节点和整个TP网络交互,进行事件的匹配、分发以及消息反馈收集等操作,如图2所示。

图2 发布/订阅网络结构图

发布/订阅模型存在两类集结点:分订阅集结点(Sub-subscription Rendezvous)和订阅集结点(Subscription Rendezvous)。分订阅集结点是存储属性约束订阅的节点,每个集结点保留了订阅的模式信息(Schemak)、参与映射的属性名称(attribi)、分订阅所属的区间信息(rangei)以及分订阅自身的信息。订阅集结点是存储订阅信息和传递订阅的节点,事件发布时需要依靠订阅集结点进行事件传递。模型的分布式数据结构如图3所示。

图3 多集结点固定划分类型空间的发布/订阅模型分布式数据结构

下面从发布订阅接口定义、事件/订阅表示、订阅管理、事件发布与匹配、事件分发与反馈、错误恢复以及复杂操作支持七个方面来介绍发布/订阅模型。

2.1 发布/订阅接口定义

本文发布/订阅支持三个函数:

1) ConfigSchema(Schema):配置模式定义函数,在全局范围内广播模式定义;

2) Publish(Event):事件发布函数,参数是事件Event,通知事件服务发布事件Event;

3) Subscribe(S):订阅函数,参数是订阅S,请求接收和S相匹配的事件。

2.2 事件/订阅表示

事件/订阅表示定义事件和订阅的数据结构,它是发布/订阅系统的表达能力的重要体现。在本文中,事件/订阅表示包括模式定义、事件格式以及订阅格式,下面分别进行描述。

1)模式定义

在该发布/订阅模型中,模式定义主要用来对属性类型以及类型上的操作进行限定,并且将类型按照范围进行划分,每个划分区间内的订阅由一个集结点来管理。模式定义的规范如下:

其中,Name指的是属性的名称,Type指类型的名称;Type Definition是对该类型的描述;Range是该类型的范围;Rendezvous Number是该类型在Range下需要的集结点数,通过Range字段和Rendezvous Number字段可以计算出该类型下所有分订阅集结点的ID;Operator List包含了一系列该类型下的操作符,而在Operator Semantics里对这些操作符的作用和语法进行了描述。

例如,表1所示的模式描述了“地点”和“时间”两个属性的规则.

表1 模式定义示例

当然,可以使用形式化方法来获得更加精确的类型描述和操作符描述,由于不是本文的重点,在此不再描述。

模式定义标识SchemaID由两部分组成:hash(Schema)和Time(Schema)。其中,hash(Schema)是对Schema内容的哈希值,而Time(Schema)则是该Schema生成的时间。

2)事件格式

在本文的模型中,事件分为两个部分:事件描述部分以及事件附加信息部分。事件描述部分是由模式定义标识(SchemaID)和一系列属性的说明组成,每一个属性ai由属性类型(type)、属性名(name)、操作符(Operator)以及属性值(value)组成。其中,属性类型和操作符由模式定义规定;事件附加信息部分可以包含附加信息所在节点的地址列表。本文采用简单格式,仅将事件描述部分表示出来,以后在类型明确的情况下将省略类型信息的描述,例如事件E={(地点,=, “江苏南京”)}中省略了“地点”的类型String。

3)订阅格式

订阅的作用是对用户感兴趣内容的描述,本文中订阅的格式和事件的格式类似,包括模式定义标识和一系列属性约束组成,如订阅SschemaID={(地点,=, “江苏南京”),(时间,>, 2008-9-20)}表达了订阅者希望接收2008年9月20号以后地点在江苏南京的事件。

一个订阅的标识SubID由两部分组成:hash(IP of subscriber)以及该订阅中属性约束的个数。

2.3 订阅管理

当订阅者将订阅S注册到事件通知服务时,订阅代理根据订阅中每个属性的类型以及属性值所属范围映射到集结点。首先,订阅代理利用哈希函数计算出每个属性订阅条件的键(标识)key=hash(t(ai):ai:range(v(ai))),其中参数“t(ai):ai:range(v(ai))”是属性类型、属性名称和属性值所在的类型区间的联合字符串,哈希函数hash()是覆盖网络层提供的机制,通过key值可以将订阅S上ai属性的订阅条件路由到节点标识与key相等或最接近的信息索引节点上,该节点就成为订阅S中ai属性的订阅条件Si的订阅集结点。

为了管理订阅,每个集结点需要维护以下数据结构:

1) SchemaList: 模式管理表,保存不同模式下的订阅情况。键是模式的名称 SchemaName,值是属性管理表AttribList;

2) AttribList: 属性管理表,保存已经有订阅的属性情况。键是属性的名称AttribName和属性类型Type的联合字符串,值是区间列表RangeList;

3) RangeList: 区间列表,保存管理该属性订阅的集结点列表。键是hash(t(ai):ai:range(m)),即管理该属性range(m)的集结点ID,值是操作符管理表OPList;

4) OPList: 操作符管理表,保存特定模式下的属性的操作符列表。键是操作符名称OPName,值为操作符订阅树OPTree;

5) OPTree: 操作符订阅树,将操作符上的订阅按照操作符的语义组织成二叉检索树。

当集结点收到某属性的订阅条件Si之后,执行如图4的订阅管理算法。集结点先抽取订阅Si中的模式信息(SchemaID)、类型信息(t(ai))、属性名称信息(ai)、类型值信息(v(ai))以及操作符信息(OP(ai)),根据这些信息依次查询SchemaList、AttribList、OPList以及OPTree,最后按照分订阅中的操作符OP(ai)选择不同的OPTree调用OPTreeInsert(v(ai), SubID)将分订阅插入其中。

图4 订阅管理算法

以订阅S={(地点,=, “江苏南京”), (内容,=, “集结”), (时间,>, 2008-9-21), (时间,≤, 2008-9-28)}为例阐述订阅传播情况,设系统发布/订阅模式定义如表1所示,该模式定义规定了String和Time两种类型,其中,String类型是Unicode序列,范围从1个字节到128个字节,需要64个集结点并且只有一个操作符用来作String的相等匹配;Time类型表示是日期。

订阅代理首先对S进行解析得到四个分订阅Si(i=1,2,3,4),其中S1=(地点,=, “江苏南京”),S2=(内容,=, “集结”),S3=(时间,>, 2008-9-21),S4=(时间,≤, 2008-9-28),之后节点按照发布订阅模式抽取分订阅中的内容进行集结点映射。为了阐述的一般性,以分订阅S3为例,得到分订阅的键值为key=hash(Time:“时间”:[2008-9-15, 2008-10-1))。假设节点r的标识等于key或者等于successor(key),分订阅S3将被路由到节点r,在r中的OPList中操作符OP(a3)的OPTree中将添加一条记录。

当订阅者退订时,因为分订阅集结点数量较多,在逐一取消订阅的过程中可能会发生错误,所以我们采取首先向订阅集结点发送退订消息,然后解析出分订阅逐一向分订阅集结点发送退订消息的方法。另外订阅者还可以在订阅时制定一个TTL(Time To Live),超时后系统自动删除订阅,省去了退订的操作。

2.4 事件发布与匹配

当发布者发布事件E到事件通知服务时,其所属信息索引节点(即事件代理)执行如图5所示的算法进行事件匹配。事件代理首先提取事件中的事件模式标识(SchemaID)以及分事件Ei中的类型信息(t(ai))、属性名称信息(ai)以及属性值信息(v(ai));之后遍历区间列表RangeList将分事件发布到各分订阅集结点上。分订阅集结点收到事件后,执行匹配算法,返回满足匹配条件的SubID;然后发布者统计出该订阅拥有的分订阅数量,根据SubID查询订阅集结点上关于该订阅的信息,若订阅属性数等于统计出的分订阅数量,就调用deliver(SubID)分发事件。

图5 事件发布算法

以事件E={(地点,=, “江苏南京”),(内容,=, “集结”),(时间,=, 2008-9-21)}、订阅S1={(地点,=, “江苏南京”),(时间,>, 2008-9-20)}、订阅S2={(内容,=, “集结”),(时间,>, 2008-9-16),(时间,≤, 2008-9-30)}为例,阐述事件的发布和匹配过程。S1,S2订阅后的分布式数据结构状态如图6所示。

图6 订阅示例

事件E有三个分事件,分别从分布式数据结构中查询得到符合E1={(地点,=, “江苏南京”)}的订阅有S1,符合E2={(内容,=, “集结”)}的订阅有S2,符合E3={(时间,=, 2008-9-21)}的订阅序列为S1,S2,S2。统计得到E上S1有两个分订阅满足条件,S2有三个分订阅满足条件,它们的个数分别和订阅的属性个数相等,按照事件发布匹配算法,事件E将会传递到这两个订阅者处。

2.5 事件分发与反馈

事件经过匹配后发布代理就能够直接将事件传递到每个订阅者所属TP处,但是这样的做法效率极低,事件分发节点需要为每个订阅建立一条传输通路,更为极端的是,如果一个TP下有多个订阅者订阅符合该事件,仍然需要为这几个订阅分别建立通路。这种情况下,事件分发的效率几乎取决于事件分发节点,事件分发的时效性难以得到保证。

本文采用的基于Chord的广播服务使用了TP节点指向表覆盖范围一定的特性,以事件分发节点为源,构建一个组播树来分发事件,以此来提高事件分发的效率。

根据Chord节点指向表的特性,如果消息的标识objectID落在节点n.finger[i].interval内,n就将该消息转发至n.finger[i].start节点,由该节点继续转发。使用这个特性,采用如图7所示的算法来构建组播树。

图7 事件分发算法

例如,在8个节点的Chord网中,假设节点0是事件代理,有匹配订阅的订阅代理集合为{3,6,7}。那么,上面的算法将构建一棵如图8所示灰色节点构成的组播树,节点0就在这棵树上分发事件。

图8 组播树示例

采用这样的组播树,可以统计事件发布的情况。当订阅代理处有匹配的订阅时,订阅代理就负责接收订阅者的反馈,统计出错订阅者的情况,按照事件分发的反向层层向事件代理递交事件反馈。如上例中的节点3,6,7负责统计出各自负责的订阅者的反馈消息,分别向节点2,4,6递交,节点2,4则向事件代理0递交事件分发结果。若没有订阅者出错,则事件分发结束;否则节点0向出错节点直接发送事件,直到确认订阅者不在网络中或者成功接收真实信息后结束分发。

3 结束语

针对联合作战实验多种体系结构系统的数据交互问题,本文提出了一种基于应用层混合P2P网络构建的订阅/发布模型。通过该模型,在需要进行异构系统互联互通时,仅需在系统数据服务应用层进行少量的改动,从而不需要改变原有系统的通信架构,即可满足异构系统进行互联互通的需求,由于混合P2P网络技术成熟且开发难度较小,该模型具有一定的灵活性和易用性,下一步将深入研究大规模联合仿真中的数据负载问题。

猜你喜欢
异构代理节点
ETC拓展应用场景下的多源异构交易系统
离散异构线性多智能体系统的输出一致性
试论同课异构之“同”与“异”
基于图连通支配集的子图匹配优化算法
结合概率路由的机会网络自私节点检测算法
面向复杂网络的节点相似性度量*
采用贪婪启发式的异构WSNs 部分覆盖算法*
《汽车维修技师》诚招代理
凝聚与铺张——孙绍振教授《以丑、呆为美》两岸同课异构教学观摩后记
1号异星球餐馆·不可思议的代理老板