基于Redis与WebSocket的战场态势实时推送方案设计及实现
2018-09-26潘峰王笑天宋钰涛丁冬
潘峰 王笑天 宋钰涛 丁冬
摘要:战场态势信息系统在信息化战争中具有十分重要的作用。为确保态势信息的准确性和时效性,设计一套可靠高效的信息实时推送方案以提供支撑。基于Redis与WebSocket的实时推送方案,不仅操作简单,而且能够兼容Windows和Linux两大软件平台,支持从C/C++或Java程序中引接数据,同时向C/C++或js前端进行推送,满足绝大多数系统开发及维护需要。此外,通过采用订阅与分发机制,保证方案高效运行。在指定硬件条件下,分别使用不同长度的模拟消息和不同数量的终端进行性能测试,能够满足战场态势信息系统的需要。
关键词:战场态势信息系统;实时推送;Redis;WebSocket
DOI:10.11907/rjdk.181593
中图分类号:TP319
文献标识码:A文章编号:1672-7800(2018)007-0143-04
Abstract:Battlefieldsituationinformationsystemplaysaveryimportantroleininformationwarfare.WiththerapiddevelopmentofInternettechnology,theresearchofbattlefieldsituationinformationsystembasedonB/Sarchitecturehasmadegreatprogress.Inordertoensuretheaccuracyandtimelinessofsituationinformation,wemustdesignareliableandefficientinformationpushschemetoprovidesupport.ThispaperintroducesaninformationpushschemebasedonRedisandWebSocket,whichisnotonlysimple,butalsocompatiblewithtwomajorplatformsofwindowsandLinux.Atthesametime,itsupportsthetwomainstreamdevelopmentlanguagesofC/C++andJavatomeettheneedsofthedevelopmentandmaintenanceofthevastmajorityofthesystems.Inaddition,thesubscriptionanddistributionmechanismisadoptedtoensuretheefficientoperationofthescheme.Underthespecifiedhardwareconditions,thesimulationmessageswithdifferentaveragelengtharetestedrespectivelytoverifythefeasibilityofthescheme.
KeyWords:battlefieldsituationinformationsystem;informationpush;Redis;WebSocket
0引言
戰场态势信息系统是以战场地理环境数据与作战态势数据为管理和处理对象,并对战场态势信息数据进行接收、管理、存储、查询、统计、分析和共享的综合性系统[1]。它是具有交互式作战空间态势感知及共享能力的最有效工具和手段,其根本目的是获得相对信息优势,打赢信息化战争[2,3]。近些年,随着互联网技术的快速发展,基于B/S架构的战场态势信息系统研究取得了长足进步。尤其是得益于B/S架构在安装部署和升级维护等方面的优势,其已基本具备“指挥所开设到哪里、战场态势服务就支撑到哪里”的能力[4]。
众所周知,战场态势瞬息万变,作战时机稍纵即逝,因此为了确保态势信息的准确性和时效性,设计一套可靠高效的信息实时推送方案提供支撑。同时考虑到系统的开放性和兼容性,尽可能支持不同软件平台、开发语言。虽然在民用领域,一些国内外知名厂商如Google、阿里、腾讯都给出了信息实时推送的解决方案[5,6],但是一方面考虑到军用系统的安全性和保密性要求,所有软件必须自主可控,另一方面这些体系化的解决方案大多太过重量级,对硬件环境与软件部署有较多要求和限制,暂时不能满足战场态势信息系统机动灵活部署的需求。本文介绍一种基于Redis和WebSocket的实时推送方案,不仅操作简单,而且能够兼容Windows和Linux两大软件平台,支持C/C++和Java两种开发语言,满足绝大多数系统开发与维护需要。此外,通过采用订阅与分发机制,保证方案高效运行。在指定硬件条件下,分别使用不同长度的模拟消息和不同数量的终端进行测试,验证该方案性能。
1Redis
Redis(RemoteDictionaryServer)是一个完全开源免费、遵守BSD协议、基于Key-Value键值对的持久化数据库存储系统,于2009年首次发布[7]。Redis采用C语言编写,提供多种语言访问接口,包括C/C++、Java、PHP、JavaScript、Python等。Redis采用Key-Value模型,使用Hash表实现Key与Value间的映射关系,因此可以通过Key值高效地对数据进行检索。同时Redis本身支持master-slave(主从)同步,可有效提高系统的可靠性,并且可以通过读写分记提高性能。与其它常见的Key-Value缓存系统相比,Redis主要有性能极高、数据类型丰富、操作原子性、可持久化4个特点[8,9]。
(1)性能极高。根据官方给出的bench-mark性能测试数据,Redis读的速度可以达到110000次/s,而写的速度则可以达到81000次/s。在相同硬件环境下,Redis与业界最常用的Memcached系统性能非常接近,能够完全满足各式应用需要。
(2)数据类型丰富。Redis支持5种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)和zset(sortedset,有序集合)。string是Redis最基本的类型,支持最大存储512MB内容,并且为安全的二进制,可以包含任何数据,比如jpg图片或序列化对象。hash是一个string类型field和value映射表,特别适合用于存储对象。list是简单的字符串列表,能够按照插入顺序进行排序。set是string类型的无序集合。zset在set类型基础上为每个插入记录增加一个浮点类型的score属性,该属性在插入记录时指定,每次插入记录后,集合中的数据按照各记录的score属性重新排序。
(3)操作原子性。Redis所有操作都是原子性的,即每一次操作要么成功执行,要么失败完全不执行。同时,Redis也提供简单的事务控制机制,通过MUTIL/EXEC命令将多个Redis操作打包起来作为一个命令执行。Redis能够保证来自不同客户端的命令串行执行,即在一个命令执行结束前不会执行其它客户端的命令,从而保证打包在一起执行的命令不会被其它客户端命令干扰,进而提供了数据操作的隔离性。
(4)数据持久化。Redis支持数据的持久化,能够将内存中的数据保存在磁盘中,重启时再次加载使用。
2WebSocket技术
WebSocket协议[10]是基于TCP的一种新的网络协议。它实现了浏览器端与服务器端之间的全双工(full-duplex)通信,因而也支持服务器端主动发送信息给浏览器端。在WebSocket中,需要先通过浏览器发出WebSocket连接请求,服务器端收到后立刻作出回应,这个过程通常被称为“握手”。而后,浏览器端与服务器端之间形成一条双向快速通道,两者之间通过该条通道可直接传送数据,如图1所示。
与传统的轮询方式相比,WebSocket主要有以下几点优势:①响应及时。对于传统的轮询方式,由于客户端不知道服务端的数据何时更新,因此不能确保服务端消息在第一时间传送给客户端。WebSocket因为在服务端与客户端之间创建了一条可以多次使用的通道,所以一旦通道建成,就可以在一段时间内保证服务端与客户端之间的数据实时同步,满足应用需求;②网络带宽占用少。在传统的轮询方式中,无论服务端数据是否发生变化,每一个客户端都会定时发起请求,服务端接收后视情况予以应答,因此网络上会存在很多无效或无意义的轮询请求和应答,而WebSocket只在服务端数据变化时才发出通知消息,对网络带宽的占用会大大降低;③服务器负载小。在传统的轮询方式中,服務端需要定时响应每一个客户端的请求,给出适当应答,而WebSocket服务端只需要保持与每一个客户端连接即可,能够节约很多处理开销[11,12]。
3方案设计
3.1实时推送方案
在战场态势信息系统中,需要从众多形态不一的业务系统引接各类原始信息,通过消息总线服务和实时推送服务送至战场态势融合服务,经加工处理后生成统一的综合态势信息,再通过消息总线服务和实时推送服务送至各终端更新显示,如图2所示。
为了确保战场态势信息的准确性和时效性,使用Redis作消息队列,经封装后对外提供消息总线服务。首先,Redis操作原子性的特点可以保证原始信息和综合态势信息无损传递;其次,Redis的高速读写可以为系统提供高吞吐量的处理能力,有效避免信息阻塞甚至是积压情况出现;第三,Redis支持丰富的数据类型,可以满足不同信息源对数据格式的要求;第四,支持数据持久化的特性可以让用户按需保存原始信息和综合态势信息,为总结讲评、推演复盘、数据挖掘等活动提供支撑[13]。
至于实时推送服务,则考虑基于WebSocket予以实现。一方面,WebSocket能够及时感知服务端的数据变化,并在第一时间通知客户端进行更新,满足指挥员实时掌握战场态势的需求;另一方面,与传统的轮询方式相比,WebSocket在带宽占用和服务端负载方面有明显优势,能够有效降低对系统硬件环境的要求,便于在条件受限的机动式指挥所中安装部署[14]。同时,随着网络技术的飞速发展,WebSocket的兼容性也在不断提高,其实现复杂度大大降低[15]。
3.2并发吞吐量
为了更好地满足广大指战人员全盘掌握战场情况、辅助制定作战决策的需求,战场综合态势信息系统需要从越来越多的业务系统引接原始信息,从而生成更加准确和精细化的综合态势,而这必然会导致信息更新频率越来越高。同时,随着各种台式、便携式、手持终端普及,战场态势信息系统的服务对象也日益增多[16]。以上都对实时推送方案的并发吞吐量提出了较高要求。
考虑到不同终端对态势信息的需求可能不同,采用订阅和分发机制取代最原始的广播方式实现信息推送[17]。将态势信息进行分类,各终端首先向实时推送服务注册自己感兴趣的分类,实时推送服务感知到某类态势信息更新后,只对相应感兴趣的终端进行推送,从而避免网络中出现无效报文,影响整体传输效率。同时,各终端也只会接收到对自己有用的信息,可以减少处理开销。
当战场综合态势信息系统的信息源和服务用户数量上升到一定规模时,还可以通过使用Redis官方提供的集群方案以及反向代理服务软件实现横向扩展,利用多实例协同运行以及负载均衡等策略,提高系统服务能力[18]。同时,方案也能进一步提高系统的抗毁能力,避免因个别节点故障影响正常使用。
3.3软件平台兼容性
为便于开展战场态势信息系统的部署应用,必须考虑实时推送方案对软件平台的兼容性。虽然Redis本身只支持Linux系统,并不支持直接在Windows系统中使用,但是MicrosoftOpenTechgroup已经在此基础上开发并对外提供了一个可以在Windows系统中稳定运行的版本,从而解决了Redis服务端的软件平台兼容性问题[19]。同时,通过使用hiredis和libWebSocket组件,可以轻松实现从Redis中逐一获取信息,并通过网络推送给指定用户。上述组件都是用纯C语言编写的,代码完全公开,并且可以完美兼容Linux和Windows两大软件平台[20]。
3.4开发语言支持情况
如前文所述,战场态势信息系统一方面要从各业务系统引接原始信息,另一方面还要接收不同终端的订阅,对综合态势信息进行按需分发。而各业务系统信息源管理系统通常不是用C/C++语言就是用Java语言开发的,为了避免其在接入战场态势信息系统过程中进行大量适应性改造,消息总线服务应对外提供支持上述两种开发语言的接口。经过试验,使用hiredis和Jedis就可以通过简单的函数调用实现与Redis队列的交互[21]。此外,为了同时适应客户端和Web端两种终端显示模式,实时推送服务应同时具备向C/C++和js前端推送数据的能力。由于WebSocket是HTML5中定义的一种新协议,在JavaEE7中也实现了该协议,因此通过使用libWebSocket就可以让系统满足不同终端的要求。
4性能测试
为了验证方案性能,使用普通台式机部署战场态势信息系统,再使用几台相同机器模拟业务系统的信息源和终端用户进行简单测试。各台式机配置如下:CPU为Inteli5-3570,主频3.4GHz,内存4GB,百兆网卡,操作系统采用Windows7旗舰版(SP1)。
考虑到真实环境中态势信息存在不同长度的情况,分别采用平均长度为10、100、1000字节的模拟消息以及1、5、10个模拟终端对该方案进行测试,结果如图3所示。
根据测试结果,设计的实时推送方案随着消息长度和服务用户增加,其吞吐量会出现比较明显的下降。但即便是使用平均长度为1000字节的模拟消息同时为10个终端提供服务,仍然可以达到每秒276条的推送速度,完全可以满足战场态势信息系统的需要。
5结语
如前文所述,战场态势信息系统由于对准确性和时效性都有较高要求,因此需要设计一套可靠高效的信息实时推送方案以提供支撑。考虑到军用领域暂无满足此需求可灵活部署的解决方案,本文介绍一种基于Redis和WebSocket的实时推送方案,不仅操作简单,而且能够兼容Windows和Linux两大软件平台,同时支持C/C++和Java两种开发语言,以满足绝大多数系统开发和维护需要。此外,通过采用订阅与分发机制,保证方案高效运行。在指定的硬件条件下,分别使用不同长度的模拟消息和不同数量的终端进行测试,验证了该方案性能可满足战场态势信息系统的需要。
目前我国军用网络出于安全考虑,全部采用物理隔离方式独立运行,并且针对类似战场态势共享的特定应用,往往单独分配足够信道资源以保证业务不受影响。因此,实时推送方案的设计尚未涉及如何根据各用户之间的传输质量进一步优化传输策略。未来很可能要将综合态势信息系统应用在带宽受限的有线传输和无质量保证的无线传输环境下,届时各用户的信道传输條件差异性较大,并会随着时间推移呈现无规律变化,所以如何充分利用有限的传输资源,尽可能及时准确地将用户感兴趣的信息推送至终端是值得进一步研究的课题[22,23]。
参考文献:
[1]谢卫.基于GIS和RS的战场态势信息系统研究[D].成都:西南交通大学,2010.
[2]陈引川.战场态势信息系统的研究与实现[D].郑州:中国人民解放军信息工程大学,2006.
[3]石子言,赵国林,胡乔林.基于模糊综合评判法的网络攻击效果评估方法研究[J].软件导刊,2017,16(2):156-159.
[4]张云峰,廖斌.基于B/S架构的校园办公自动化系统设计与实现[J].软件导刊,2016,15(8):104-106.
[5]李娜,杜彦辉,陈默.基于短地址混淆和谷歌云推送的移动僵尸网络的构建[J].计算机应用,2015,35(6):1698-1704.
[6]胡峥辉.基于阿里云的微电网能量监控调度系统[D].广州:华南理工大学,2016.
[7]曾超宇,李金香.Redis在高速缓存系统中的应用[J].微型机与应用,2013(12):11-13.
[8]杨旸.基于Redis的Thrift缓存机制设计[J].软件导刊,2016,15(3):29-32.
[9]邱祝文.基于redis的分布式缓存系统架构研究[J].网络安全技术与应用,2014(10):52-54.
[10]薛陇彬,刘钊远.基于WebSocket的网络实时通信[J].计算机与数字工程,2014(3):478-481.
[11]盛平,丁波.基于WebSocket协议的智能温室测控系统设计与实现[J].软件导刊,2016,15(8):65-68.
[12]张文,牟艳,高振兴,等.WebSocket技术在工业设备数据实时监测中的应用[J].计算机与现代化,2017(11):111-115.
[13]陈晓峰,刘兴,高元博,等.基于数据挖掘的海战场态势可视化平台构建[J].火力与指挥控制,2015(4):144-147.
[14]张维,贾爱梅.战术互联网在机动式指挥所中的组织应用研究[J].舰船电子工程,2013,33(10):11-12.
[15]胡朝举,高聪.WebSocket新特性及其安全研究[J].网络安全技术与应用,2015(11):55-56.
[16]王万停,华红胜.便携式指挥通信终端及控制方法设计[J].无线互联科技,2017(18):1-2.
[17]钱哨,陈丹.基于数据分发服务的发布订阅系统[J].电子技术与软件工程,2017(6):153.
[18]高昕,黄真.Redis集群在有轨电车车载系统中的应用[J].现代城市轨道交通,2018(2):18-20+24.
[19]张威.基于redis的分布式缓存系统架构分析[J].计算机产品与流通,2017(8):252.
[20]丁振凡.基于WebSocket的在线围棋对弈软件设计[J].吉首大学学报:自然科学版,2017,38(4):27-33.
[21]徐竟州.基于Redis的高并发抢红包应用的设计与实现[D].长沙:湖南大学,2016.
[22]周莹.受限带宽环境下实时数据分发服务传输优化技术研究[D].武汉:中国舰船研究院,2016.
[23]魏畅.无线信道的确定性建模与分析[D].南京:南京邮电大学,2013.
(责任编辑:何丽)