基于主题的VSM中间件的设计与实现
2011-06-09王张平杜承烈周彦菲
王张平,杜承烈,周彦菲
(西北工业大学 计算机学院,陕西 西安 710129)
在分布式环境下进行一些仿真应用时,常常要进行数据计算、显示、交换、存储等多项任务。这需要将整个系统的任务分布到若干节点上,每个节点完成各自的任务。而每个子节点在完成其子任务的每一步计算之后,在开始下一步仿真运算之前都需要和其他节点进行数据的同步和交互,因为它需要其他节点提供的一系列参数在上一时刻的最新值,同时它也要为其他节点提供一些参数的最新值,这就必须要找到一种有效的共享内存机制[1]。
以太网下进行仿真实验时,目前常用的解决方案是采用一种虚拟共享内存中间件。它有效地实现了数据的透明访问和交换。在网络负载不是很大的情况下,具有一定的实时性。但在高网络负载的情况下,很却存在着仿真交互数据的刷新延迟,实时性能很差等缺点,限制了仿真系统性能的提高。为了适应现代大型分布式系统的要求,特别是在分布式实时系统中,当网络负载很大的情况下对系统实时性的需求,提出了一种基于主题的VSM中间件的改进方案。此方案采用了数据的发布/订阅通信模式,并结合组播技术实现了IP网络中一点到多点的高效数据传送,能够节约大量网络带宽、降低了网络负载。通过引入该机制,优化了网络通信,提高了VSM中间件的在高网络负载的情况下的实时性和稳定性。
1 虚拟共享内存中间件
1.1 VSM中间件的设计思想
VSM中间件是结合RPC和DSM(Distributed Shared Memory)的设计思想,将方法和内存都本地化的分布式中间件。VSM中间件是位于平台操作系统之上、用户仿真应用程序之下的一组软件,实现分布式仿真系统中的仿真任务的调度和仿真数据的透明交互,其核心是虚拟共享内存。其基本的结构示意图如图1所示。
图1 VSM的结构示意图Fig.1 Structure diagram of VSM
通常的设计是共享内存模块作为网络的基本单元与通信网络相连,每个节点内存模块的内容都是相同的。网络上每个节点内存为“虚拟共享内存”,它含有网络中所有用户可共享的数据和信息,内存中的数据为网络上所有相关节点内容拷贝的组合,并且内存中的内容可由当前节点计算机的值不断地刷新,或者由网络中其他节点不断地刷新。所有虚拟共享内存数据的相对地址,对网络中所有节点是相同的,实现的是逻辑上的共享内存[1-2]。每个共享内存的尺寸是由各客户向服务器注册时,由服务器分配的动态内存。具体地讲就是根据所有客户机上已经注册的模块数目,以及每个模块实际所需要内存大小来确定的。每个模块所需求的共享内存区用来存放该模块中的状态、变量等参数。由于每个模块实际变量数目可能不一样,因此它所需求的共享内存大小也就可能不一样。
1.2 VSM中间件的工作原理
图2为虚拟共享内存中间件的工作原理示意图。假设仿真实验环境有3个节点,每个节点都开辟了同样大小的共享内存区,当节点A的仿真模块向某个偏移地址写入数据Data1时,将即时刷新其他节点中相同偏移地址的的数据。此时节点A的进程会通过广播的方式将数据映射到其他节点相同偏移地址的共享内存区上。那么节点B和节点C就会读到数据Data1了。用户只需关心读写操作,底层数据更新由系统自动完成,从而满足了分布式环境下仿真系统对数据透明交互的需求。
图2 VSM工作原理示意图Fig.2 Principle diagram of VSM
VSM中间件分为3个层次:网络接口层、系统管理层和用户接口层。网络接口层负责网络数据的传输并刷新各节点共享内存。系统管理层主要负责仿真任务调度及VSM共享内存的管理。用户接口层为用户提供了与内存模块交互的接口,方便用户进行读写操作[3]。
1.3 VSM中间件的特性
1)实时性 VSM中间件通过将内存本地化,实现了虚拟共享内存。这种通过空间上的开销可以达到减少网络访问的时间和次数。在一定的仿真环境下,特别是在网络负载不是很大的情况下具有一定实时性。
2)透明性 VSM中间件使得应用程序不用关心网络传输,对内存的读写操作与常规的内存读写操作没有区别,数据的网络传输对用户而言是透明的。
3)可扩展性和可移植性 由于用户接口与网络接口的剥离,当网络硬件或网络协议发生变化时,无需更改用户接口,只需扩展网络接口,这就增强了VSM对异构网络的可扩展性和用户应用程序的可移植性。
VSM的这些优点使VSM能够为分布仿真试验提供实时透明的数据交互,但是VSM的设计特点同样面临一些的问题。
1)高负载下的实时性 由于VSM中的一个节点的数据更新,底层会自动广播到其他所有节点的数据,导致所有数据节点的更新。这样在一个具有n个仿真节点的VSM分布仿真试验中,更新m字节数据 ,在网络上将需要传输n×m个字节,造成了大量额外开销。使分布仿真试验在负载较高的情况下网络传输的实时性难以得到保证。
2)缺乏对大数据的支持 由于VSM网络传输代价很高,当进行大数据的网络传输时,不仅会增加网络的负载,而且会导致VSM对大数据的刷新延迟,影响VSM系统的实时性能。VSM对总内存大小的支持一般在几百KB内,只能支持一些中小型仿真系统。
VSM的这些问题,都有一个共同的原因,就是数据更新时,VSM网络传输的代价太高。为了降低VSM网络传输代价,同时保持VSM实时透明的数据交互特性,引入了基于主题的发布订阅/订阅通信机制。
2 基于主题的VSM中间件
2.1 基于主题的VSM中间件的提出和基本原理
如图2所示,如果节点C仅订购节点A上的数据Data1,但是根据VSM全局内存的设计思想。当节点A上的数据Data2更新后,那么节点C上的数据Data2也会得到数据更新,但是节点C根本不需要数据Data2。在使用VSM在仿真测试的应用中发现,并不是所有仿真节点对所有共享内存都有需求。比如显示节点需要计算节点的数据,但计算节点并不需要显示节点的数据,在VSM中间件的数据交互过程中,仍然会将显示节点数据更新到计算节点,这就造成了不必要的网络传输开销,影响了数据交互的实时性。统计发现,在传统的分布试验仿真系统中,这种不必要的网络传输开销,占总开销的比例在33%至87%之间,具体比例取决于仿真系统中各个仿真节点间的数据依赖关系。
基于上述情况,采用了基于主题的VSM中间件的构思。主题通常是字符串,它是用来表示某个特定数据的代号或者数据名称。每个节点上的某个主题所代表的数据只可能被对该主题感兴趣的订阅者所接收[4-6]。在基于主题的VSM中表现为节点数据的写操作只会导致对此数据感兴趣节点数据区的刷新。对没有订阅此主题的节点,VSM的数据是不会刷新的。这就减少了不必要的网络带宽的浪费,降低了网络负载,提高了数据透明交互的实时性。
和传统的VSM中间件不同,基于主题的VSM中间件采用了数据的发布/订阅通信模式。数据的发布订阅关系指的是仿真实验中节点间的数据读写关系。基于主题的VSM中间件采用的是服务器/客户端的工作模式,每个节点在仿真实验前需要向服务器注册本节点IP地址,节点自身的主题以及节点感兴趣的主题。服务器根据节点间的数据依赖关系分配组播地址,客户端进程读取数据时,如果数据是其他节点上的数据,就加入该数据所分配的组播地址。当数据得到更新后,相应的组内节点上所订购的数据也就得到了更新。基于主题的VSM中间件的总体设计思想是:不改变用户接口层,通过修改系统管理层与网络接口层实现发布订阅机制;系统管理层上负责管理发布/订阅表,网络接口负责优化网络传输。
2.2 基于主题VSM中间件的实现
2.2.1 虚拟共享内存
为了维护VSM中间件的原有特性,并且能够减少不必要的数据发送所带来的网络资源浪费,在基于主题的VSM中间件中每个仿真节点依然都具有一个全局共享内存,这个全局内存的编址方式也是相同的,但是这个内存的内容不再是网络上所有节点数据内容拷贝的组合。全局内存中只有仿真节点订阅的数据所对应的内存才有可用值,只有订阅了的数据节点才能读。
2.2.2 数据的发布与订阅
在基于主题的VSM中间件中,每个节点都有个XML数据文件,文件中描述了本节点数据主题的发布和订阅信息。系统初始化时,每个节点首先通过解析XML文件形成发布/订阅表,此表由系统管理层来维护。随后节点进程根据系统管理层上的发布/订阅表向服务器注册本节点的信息,包括有节点IP地址,节点自身的主题以及节点所订购的数据主题。服务器在接收到各节点的注册信息后,首先判断是否有相同的主题,以确保主题的唯一性,然后根据数据主题的订购关系为被订购的主题统一分配组播地址,并通过广播的方式分发到各个节点上。在收到服务器广播信息后,节点系统管理层向自身的发布/订阅表填写主题所分配的组播地址、端口等信息,并分配VSM共享内存和创建共享内存表。节点的注册流程如图3所示。
图3 注册流程图Fig.3 Flow chart of register
2.2.3 网络接口的实现
网络接口的功能主要负责数据的网络传输,在VSM仿真系统执行写操作时,根据数据主题查找系统管理层中的共享内存表,找到对应数据在虚拟共享内存中的相对地址,从而向对应内存写入数据,在写操作完成后立即启动数据发送线程对其他节点进行数据组播。数据发送线程完成了网络接口发送模块的功能,当数据发送线程收到通知后,通过查找系统管理层中的发布/订阅表获得数据主题的组播地址,以该组播地址将数据组播出去。如若获取该数据主题的组播地址失败,则组播地址不存在,说明此数据主题没有被任何节点订购,数据发送线程结束。对于用户而言,写数据与普通写操作无异,数据的发送由数据发送线程自动完成,用户无需关心。数据发送流程如图4所示。
图4 数据发送线程流程图Fig.4 Flow chart of sending data
在数据订阅者端,当数据要执行读操作时,由于在节点向服务器注册完毕后,订阅者通过遍历系统管理层中的发布/订阅表,找到所感兴趣主题的组播地址,并加入该组播地址,随后启动数据接收线程,数据接收线程只会接收到本节点感兴趣的主题数据。对用户而言,读操作和普通读操作无异,数据的更新由底层数据接收线程自动完成,无需用户关心。数据接收流程如图5所示。
图5 数据接收线程流程图Fig.5 The flow chart of receiving data
在实现过程中,组播地址采用统一的端口号,这样节点在加入组播组时,只需要填充相应的组播IP地址[7],因此采用单线程就可以实现数据的接收。
3 性能和改进
3.1 基于主题的VSM中间件性能分析与测试
从2.2中可以看出,改进后VSM中间件并不影响用户写操作,只是在数据的网络传输过程中增加了一个发布表的查找过程。在仿真应用过程中,一般都是通过逻辑时间或者物理时间推进来运行的,数据的读操作一般发生在下一步时间推进的运行过程中。因此对仿真性能影响并不大[8-10]。最重要的是,基于主题的VSM中间件的发布/订阅功能,实现了数据有选择的发送和接收,在仿真节点一定的情况下,降低了仿真数据的网络传输量,保证了共享内存中数据更新的稳定性,从而提高了数据交互的实时性能。
此外改进后的VSM中间件对原VSM透明的数据交互等特性没有任何影响。原VSM中间件上的应用程序,只需增加调用数据的发布/订阅接口,便可直接移植到新VSM平台上。可以看出很好了保持了原VSM的优点。
从上述分析可以看出,基于主题的VSM中间件具有以下特性:
1)提高了实时性能 使用组播技术优化了网络传输,同时采用基于主题的发布/订阅通信机制进一步降低了网络通信量,并且所有节点的数据更新时间与网络上实际连接的节点数量无关。这就增加了VSM通信的稳定性,提高了VSM的实时性能。
2)支持大数据的网络传输 和传统的VSM中间件相比,在满足一定实时性要求下,VSM共享内存区中最大数据块能够由之前的数百kb增加到10 Mb左右,这样便能支持一些大的数据传输。
为了验证该方案的实际性能,搭建了3台节点计算机的分布式环境。在以太网下,网络带宽为100 Mb/s交换机为TP-Link TL-SL1226,3台计算机内存均为1 Gb,CPU为Intel Core双核。操作系统为Windows XP。对大小不同的数据包的传输延时和丢包情况进行了记录。其中丢包率测试时发送数据包为100 000次。测试结果如表1所示。为了进行性能对比,在同样的资源环境下,使用传统的VSM中间件进行了同样的测试,测试结果如表2所示。
表1 基于主题的系统性能测试Tab.1 The perform ance test of topic-based system
表2 原系统性能测试Tab.2 The performance test of traditional system
3.2 存在的问题和改进
由于数据的发布/订阅关系是通过解析XML文件[11]而形成的,这有别于传统的发布/订阅关系,不能从真正意义上来支持动态的数据发布/订阅功能。因此,为了支持动态的数据发布/订阅功能,允许所有的节点进程在运行期可与服务器建立一个新的连接。数据的发送方将自身所要发送的主题发布到服务器上,服务器首先对系统中的发布/订阅表进行查阅,如果该主题在系统中还不存在,则服务器负责为该主题分配一个组播地址,并且将该组播地址返回给该节点进程;如果发布/订阅表中已经存在该主题或者存在对该主题的订阅,则服务器将已经分配的对应于该主题的组播地址返回给节点进程。数据的接收方将自身所需要的主题发送到服务器。服务器对系统中的发布/订阅表进行查询,如果存在该主题,则将主题所对应的组播地址返回给接收节点进程,否则为该主题分配一个新的组播地址,并将该组播地址返回给节点进程。服务器在返回各节点组播地址后,节点都会更新自身的发布订阅表。
另外,系统中采用的是UDP来组播数据,由于受到底层发送缓冲区大小的限制,一个完整的大数据块在发送过程会出现数据的丢失或者无法发送。为了支持更大数据块的传输,需要再有自定义协议模块的设计。
4 结束语
基于主题的发布/订阅通信模式在通信领域占有重要的地位,它适应了计算机向实时、分布式发展的趋势。通过将基于主题的发布订阅模式引入分布式仿真平台的VSM中,一定程度上降低了网络通信的负载,增强了VSM数据通信的实时性,从而满足分布式仿真逐渐增强实时性需求,以适应计算机仿真领域的不断发展。
[1]吴成富,欧峰,陈怀民,等.基于组播技术的共享内存网络设计与实现[J].测控技术,2009,28(10):55-58.WU Cheng-fu,OU Feng,CHEN Huai-min,et al.Design and impletation of VSM network based on multicast[J].Measurement&Control,2009,28(10):55-58.
[2]常青,杜承烈.基于虚拟共享内存中的分布式仿真平台构架方法研究[J].测控技术,2001,20(3):50-52.CHANG Qing,DU Cheng-lie.Research on the method of distributed simulation platform architecture based on the Virtual shared memory[J].Measurement&Control,2001,20(3):50-52.
[3]王琼,杜承烈.基于DSM技术的VSM中间件的研究与开发[J].计算机应用研究,2005(12):201-203.WANG Qiong,DU Cheng-lie.Research and development of VSM middleware based on DSM technology[J].Application Reaearch Of Computers,2005(12):201-203.
[4]苑洪亮.基于内容的“发布/订阅”若干关键技术研究[D].湖南:国防科技大学,2006.
[5]Pongthawornkamol,Nahrstedt,WANG Gui-jun.Probabilistic QoS modeling for reliability/timeliness prediction in distributed content-based publish/subscribe system over best-effort networks[C]//New York,NY,USA:ACM,2010,185-194.
[6]Eugster P,Felber P,Guerraoui R.The many faces of Publish/Subscribe[J].ACM Computing Survey,2003,35(2):114-131.
[7]斯蒂文斯.TCP/IP详解,卷1:协议[M].范建华,译.北京:机械工业出版社,2000.
[8]刘旭军,马跃,于东.发布/订阅通信模式的实时性能分析与评估[J].计算机工程,2010,36(20):229-231.LIU Xu-jun,MA Yue,YU Dong.Analysis and evaluation on the real-time performance based on Publish/Subscribe communi-cation model[J].Computer Engineering,2010,36(20):229-231.
[9]伍智锋,唐硕,杜承烈.基于共享内存机制的分布式飞行仿真研究[J].计算机仿真,2002, 19(6):18-21.WU Zhi-feng,TANG Shuo,DU Cheng-lie.Research on the distributed flight simulation based on the mechanism of VSM[J].Computer Simulation,2002,19(6):18-21.
[10]黄姝娟,杜承烈,尤涛.中间件技术实时性能的比较[J].计算机工程,2009,5(11):32-37.HUANG Zhu-juan,DU Cheng-lie,YOU-Tao.Comparison of real-time performance for the middleware technology[J].Computer Engineering,2009,5(11):32-37.
[11]刘雨潇.基于SAX的XML数据解析技术分析研究[J].现代电子技术,2010(12):55-56,65.LIU Yu-xiao.Analysis and research of XML data analytical technique based on SAX[J].Modern Electronics Technique,2010(12):55-56,65.