基于Libevent的栅格数据服务引擎设计与实现

2016-05-04 07:06代军普
关键词:WEB服务栅格数据

代军普

(中国人民解放军 61175部队, 江苏 南京 210049)



基于Libevent的栅格数据服务引擎设计与实现

代军普

(中国人民解放军 61175部队, 江苏 南京 210049)

摘要:针对网络化三维可视化应用系统栅格数据服务需求,设计了栅格数据服务引擎的总体框架和相关数据操作接口,探讨了基于libevent的栅格数据服务引擎的具体实现方法,构建了一套轻量级、高性能、易操作的栅格数据服务引擎,该引擎性能大大优于主流商业软件,在高分遥感影像数据管理应用中发挥了重要作用.

关键词:空间数据引擎; 栅格数据; Web服务; Libevent

随着对地观测数据获取能力的逐步提高和航空、航天侦察体系的逐渐完善,空间对地观测数据在时间分辨率、空间分辨率和光谱分辨率等方面都得到迅速提高.如何收集、处理、存储、分发和管理各种地理空间数据,通过“网络中心数据”策略和网络数据服务全面提高地理空间数据服务支持能力,确保无论何时何地都能为用户提供完整可用的高精度地理空间数据服务,是地理空间数据服务应用的重要研究内容,地理空间数据服务引擎技术研究是实现该目标的重要途径.

美国环境系统研究所(Environmental Systems Research Institute,ESRI)最早提出了空间数据库引擎(Spatial Database Engine,SDE)的概念并进行实践.SDE是一个向关系数据库中加入空间数据及其位置、形状等要素信息的空间数据模型,实际上是一组基于空间数据库的程序集[1].目前,大型数据库厂商和GIS软件商都在致力于开发空间数据库引擎,代表性的产品有Oracle公司的Oracle SDO、ESRI公司的ArcSDE、Informix公司的DataBlade、MapInfo公司的SpatialWare、北京超图公司的SuperMap SDX+等,这些商用空间数据库引擎通常都支持比较丰富的地理空间数据模型,并且与主流关系数据库的兼容性较好,功能和通用性都比较强.但在过于强调功能和通用性的情况下,导致软件体量庞大、安装配置难度高、接口和二次开发复杂,在灵活性和功能定制方面都存在不足,服务性能难以满足三维可视化应用系统的网络化栅格数据服务支持.为此本文主要针对栅格数据的特点和三维可视化应用系统的网络化栅格数据服务应用需求,基于libevnet设计并实现了一套轻量级、高性能、易操作的栅格数据服务引擎(GeoXtreme Engine,GXEngine),作为栅格数据库管理系统和应用程序间的中间件,为用户提供一组对海量栅格数据进行操作的开放接口,在海量栅格数据的管理和分发应用服务中发挥了重要作用.

1栅格数据服务引擎设计

本文提及的栅格数据服务引擎的作用对象主要包括遥感影像、栅格地图和数字高程模型等栅格数据.由于数据类型固定、数据量大但结构简单,在栅格数据服务引擎设计过程中不需要考虑复杂的数据模型和通用性.为了与栅格数据的特点以及存贮管理和应用需求相适应,在设计栅格数据服务引擎时主要考虑了以下几个基本要求[2-4]:

(1)数据一体化存储管理.保证了数据的完整性,栅格数据管理系统要能统一存储栅格数据及其属性数据,同时支持本地文件、数据库等多种存贮管理方式,并能实现文件与数据库表的相互转换.

(2)统一开放的数据访问接口.对用户提供统一开放的数据访问接口,通过该接口,用户可以完成存储、读取、检索、管理、更新数据等一系列基本数据操作.

(3)多种服务应用模式:栅格数据服务应支持通过本地和Web等多种服务模式,可满足本地、C/S、B/S等多种服务应用模式的数据访问需求.

(4)多用户并发访问.在确保数据的一致性和安全性的基础上支持多用户并发访问控制.

(5)高效的空间数据查询检索.栅格数据服务引擎可通过高效的索引机制和缓存机制来组织和管理栅格数据管理系统中空间数据,并能提供高效的空间数据查询和检索,能满足可视化应用数据服务需求.

(6)完善的安全访问机制.提供比较完善的安全访问机制,确保数据的安全和合理使用,同时保持栅格数据服务系统的安全和稳定性.

1.1功能设计

根据以上对栅格数据服务引擎的分析,栅格数据服务引擎应包括栅格数据上载更新、栅格数据提取及提供栅格数据服务的数据存贮管理、运行维护等关键后台支撑等功能模块[4-6],其总体功能及结构关系如图1所示.

图1 栅格数据服务引擎内部功能模块关系

数据存贮管理:在对海量多源异构栅格数据进行统一编码的基础上,一体化组织各类数据产品并进行存贮,为用户提供数据录入、数据检索、数据下载等后台支撑管理服务.

栅格数据上载更新:栅格数据类型繁多,包括各种来源、各种时相的多源多分辨率数据,同时数据量非常大,数据管理复杂,因此数据管理是栅格数据服务的一项关键后台支撑技术,数据管理应该采用面向服务的方式实现.

栅格数据检索:将栅格数据对象中的重要信息抽出,加以组织,赋予语意,建立关联关系,同时根据数据存贮编码规范,进行简单、复杂或综合的信息查询,以快速高效地确定栅格数据资源的有效性和位置所在,促进所需栅格数据资源的发现和检索.

栅格数据提取:提供统一的访问接口,能够以本地、数据库、Web等多种模式实现不同栅格数据的统一访问和透明操作,满足用户的栅格数据服务应用需求.

后台运维管理:后台运维管理作用于系统构造及系统运行的全过程,系统运行管理平台的主要功能是维护系统的基本信息,实现系统初始化、通信、并发控制、安全机制、日志管理等,进而保障栅格数据服务引擎支撑服务的正常运行.

1.2服务接口设计

栅格数据库管理系统后台需要解决大量数据存贮管理、并发控制、安全访问等方面的基础支撑工作,以提高数据的访问效率和用户的易操作性[6];但对用户来说,栅格数据服务引擎需要针对不同的文件类型与组织结构,运用虚拟化思想,将多源、异构、多时相的影像数据实体资源虚拟化成统一的逻辑资源视图的描述方法,为虚拟文件的可视化表达提供统一的访问接口,实现不同栅格数据的统一访问方式和透明操作.

为满足封装设计和栅格数据通信、数据存贮、管理和处理等任务目标,采用面向对象的设计思想和方法对栅格数据服务引擎进行设计,栅格数据服务引擎提供的外部服务接口主要以基于COM组件技术的数据访问接口提供,具体包括如下几个主要接口:

IGX_MainCtrl(主控接口);

IGX_DBInfo(数据源信息查询接口);

IGX_DBConnect(连接接口);

IGX_DBIndex(栅格数据索引接口);

IGX_DBManager(栅格数据管理接口);

IGX_Util(实用工具接口);

IGX_Security(数据和用户安全机制接口)

客户端应用程序利用栅格数据服务引擎提供的外部接口进行栅格数据上载更新操作时通常要经历创建主控接口、连接栅格数据、查询或创建数据管理对象、数据区域空间索引、栅格数据上载更新等操作.数据的上载更新主要支持本地操作.数据服务通常要经历创建主控接口、连接栅格数据、查询数据管理对象、目标区域数据空间索引、栅格数据获取等操作,在网络及Web服务环境下还需要对用户进行安全机制验证.

2基于libevent的栅格数据服务引擎实现

在栅格数据服务引擎Web服务应用中,本文使用libevent作为其网络底层库,使得在进行Web服务接口开发过程中只需要专注于服务事件本身的响应和处理,而不必关心网络服务的底层协议和实现,可降低开发难度,又能发挥成熟第三方库长迭代开发周期形成的稳定、高效优势,更好地保证了在栅格数据服务器连接数增加的情况下,也能充分发挥I/O性能.

2.1Libevent简介

Libevent是一个轻量级的开源高性能网络库,使用者众多.作为底层的网络库,Libevent已经在Netchat、 memcached、Vomit Nylon等中广泛的使用.Libevent有几个显著的亮点:轻量级,专注于网络;事件驱动,性能高;源代码精炼、易读;跨平台,支持Windows、Linux、BSD和Mac OS等;支持多种I/O多路复用;支持定时器、信号等事件;注册事件优先级等[5].

Libevent本身就是一个典型的事件驱动设计模式--Reactor模型,具有快速响应能力、简单高效的编程接口、可扩展性强、可复用性高等优点,是编写高性能网络服务器的必备模式之一.

2.2基于libevent的Web服务实现

Libevent库的使用极大地简化了栅格数据Web服务的实现,使得编写Web高并发响应栅格数据服务器变得更加容易.利用libevent构建Web服务对客户端的数据请求进行响应的整个过程主要包括如下几个步骤(http://libevent.org):

(1)初始化:初始化libevent API和相关环境,设置服务器端的IP地址及监听端口;

(2)创建HTTP服务:在event_base上新建一个evhttp,将这个evhttp绑定到监听的IP和端口号.

(3)设置HTTP回调函数:使用evhttp_set_gencb设置Http Server的处理请求的回调函数.

(4)启动HTTP Server:等待请求进入事件循环.

在libevent回调函数中,可以获取客户端请求(request的HTTP Header和参数等),进行响应的处理,再将结果发送给客户端(response的HTTP Header和内容,如二进制栅格数据).libevent除了能设置通用回调函数外,还可以针对特定的路径请求设置对应的特殊回调处理函数,事件处理过程与通用事件函数处理相似.

2.3libevent多线程模型

由于Libevent本身不是多线程安全的,不能充分利用CPU的多核计算与处理能力.为弥补libevent存在的这一缺陷,本文借鉴memcached(http://memcached.org)的多线程模型,建立了消息通知和同步层机制相结合的libevent多线程模型,借助该模型实现了多线程环境下的libevent正确安全使用,从而充分发挥了CPU的多核计算和处理能力,大大提高了栅格数据服务器的服务能力和性能.

图2 libevent多线程模型示意图

libevent多线程模型的结构和关联关系如图2所示,具体实现时主要包括如下几个步骤:

(1)系统初始化时,预先创建主线程和一系列工作线程组成的线程池,每个线程包括主线程都有自己独立的libevent实例event_base;

(2)在主线程的main event_base中对socket的链接请求事件进行监控 (listen),当新的链接请求到达时,主线程将接收到的请求封装为连接队列项(CQ_ITEM,Connect Queue Item)后将其分配到线程池中的某个工作线程的工作队列中,工作线程的查找分配是用Round-robin算法实现,并通过线程注册的管道(pipe)通知到线程;

(3)每个线程都有一个thread event_base监控本身的pipe事件已经连接socket事件,当线程的pipe收到主线程通知后, 将新的链接socket注册到thread event_base,接收请求,随后由工作线程从连接队列中取出CQ_ITEM来处理该连接的所有后续事件.

3试验及应用实例

本文的技术方法在Windows平台下开发了栅格数据服务引擎[7-8],下面就栅格数据服务的试验情况进行简要介绍.

3.1试验数据情况

全球范围栅格数据体量非常大,通常作为基础底图进行使用,对数据的现势性要求不是很高.为此直接使用网络可供获取的各种公开来源数据,完成了全球范围栅格数据的下载、完整性检查、分层分块和入库管理[9-10],具体包括Google、Baidu、天地图及其他网站获取的正射遥感影像数据(DOM)、矢量栅格化数据(MAP)、SRTM90米地形数据、ASTER GDEM30米地形数据,试验数据按照Tile分块、金字塔分层、Block大文件的方式进行存贮管理.试验数据基本情况如表1所示,总计约5.3TB.图3是全球栅格数据处理果示意图,其中左图为地图数据,右上为遥感影像数据,右下为DEM数据.

表1试验数据基本情况

数据名称Tile尺寸Block尺寸金字塔层数据来源数据量DOM256256*2561-15层Google、天地图等4.07TBMAP256256*2561-16层Google、Baidu等828GBDEM256128*1281-9层SRTM90米155GB10层ASTER30米130GB

图3 全球栅格数据处理结果示意图

3.2栅格数据服务试验

为验证栅格数据服务引擎的功能和性能,本文进行了栅格数据服务验证,试验用栅格数据服务器环境为Windows Server 2008 R2 64位操作系统,Intel i7-2600 CPU、主频3.4GHz、8核,硬盘容量15TB.试验主要包括以下几个方面:

(1)数据下载速率试验.数据下载服务是栅格数据服务引擎的最基本要求,图4为对兴趣区域栅格数据的管理和下载功能进行验证的试验结果,左图为DEM数据下载试验结果示意图,右图为正射影像数据下载结果示意图.试验结果表明在千兆网络环境下通过本引擎进行数据下载的平均速率可达30MB/s,明显优于相同试验环境下ArcGIS Server 10.1可达到的15.8MB/s的平均数据下载速率,本文设计实现的栅格数据服务引擎的效率明显优于ArcGIS Server.

图4 栅格数据下载服务

(2)可视化应用系统栅格数据服务支持.为进一步验证栅格数据服务引擎的性能,在试验过程中采用客户机/应用服务器/数据服务器模式,以海量空间数据库为数据服务器+高效的数据处理服务器+普通PC为客户端作为栅格数据管理与服务的基本架构体系,通过Web服务的形式为应用系统提供网络化栅格数据服务支持,已经在一系列应用平台开发中得到了成功应用.图5为在高分对地观测应用项目某项目中进行应用的试验情况,在网络带宽100M/s,虚拟用户数50个的情况下,能实现平滑的放大、缩小和漫游操作,试验结果表明本文的研究成果能通过Web方式为应用系统开发提供稳定、可靠的栅格数据服务支持,引擎性能足以满足三维可视化应用系统对网络化栅格数据服务的实际应用需求.

图5 栅格数据服务应用试验(高分应用项目)

4总结与展望

本文基于libevnet设计并实现了一套轻量级、高性能、易操作的栅格数据服务引擎,实现了ArcgisServer和ArcSDE在栅格数据管理和服务访问方面的基本功能,本引擎体量小,安装完毕后大约只需要10MB磁盘空间,安装配置和数据访问方面也更简单、更灵活,试验结果表明本引擎的性能大大优于Arcgis系列软件,能够有效实现多源海量栅格数据的管理并提供网络化栅格数据服务,能满足包括三维可视化实时渲染在内的各类Web应用系统对栅格数据服务提出的性能要求.该研究成果已经成功应用于高分遥感影像网络化三维数据服务,在全球海量地理空间数据高效共享分发和服务应用等方面也发挥了重要作用.但是,目前该数据服务引擎目前仅能利用单机服务器的存贮和计算资源,尚无法发挥多服务器或服务器集群的性能和威力,对于海量用户的多并发服务应用能力还存在不足,有待于在今后的工作中进一步研究和完善.

参考文献:

[1]吴光强. 军事地理空间数据库引擎的设计与实现[D]. 长沙:中南大学. 2010.

[2]Lindstrom P,Pascucci V. Visualization of large terrains Made Easy [C]//proceedings of IEEE Visualization San Diego:IEEE Press,2011:363-576.

[3]Ammann L,Genevaux O,Dischler J M.Hybrid rendering of dynamic heightfields using ray-casting and mesh rasterization [C]//Proceedings of Graphics Interface.Ottawa:Canada,Interface 2010:161-168.

[4]王超. 基于空间数据库的栅格数据存储管理关键技术研究[D]. 长沙:国防科学技术大学,2009.

[5]刘义,陈荦,景宁,等. 利用MapReduce进行批量遥感影像瓦片金字塔构建[J]. 武汉大学学报(信息科学版),2013,38(3):278-282.

[6]杜清运, 虞昌彬, 任福. 利用嵌套金字塔模型进行瓦片地图数据组织[J]. 武汉大学学报(信息科学版), 2011,5(36):564-567.

[7]李浩松,朱欣焰,李京伟,等. WebGIS空间数据分布式缓存技术研究[J]. 武汉大学学报(信息科学版). 2005.12.

[8]Google Earth & Google Map——数据存储、管理、表现及开发机制.[EB/OL].(2011-01-24)[2015-06-19].http://www tuicool.com/arties/YvEJBvq.

[9]陈蕊. SRTM高程数据空值区域的填补方法及分析[D]. 昆明:昆明理工大学. 2008.

[10]张朝忙,刘庆生,刘高焕,等. SRTM 3与ASTER GDEM数据处理及应用进展[J].地理与地理信息科学.2012,28(5):29-34.

(编辑:刘宝江)

Design and implementation of grid data service engine based on Libevent

DAI Jun-pu

(61175 Troops,The Chinese People′s Liberation Army, Nanjing 210049,China)

Abstract:Aiming at the requirement of grid data service of Network visualization application system, the overall framework and relevant data operation interface of grid data service engine are designed,and the specific implementation method of grid data service engine based on libevent is discussed, and a grid data service engine with a set of lightweight, high performance and easy operation is constructed.The engine performance is much better than the mainstream commercial software, which plays an important role in the high score remote sensing image data management applications.

Key words:space data engine; grid data; Web service; Libevent

中图分类号:P237

文献标志码:A

文章编号:1672-6197(2016)04-0070-05

作者简介:代军普,男,daijunpu@163.com

收稿日期:2015-10-18

猜你喜欢
WEB服务栅格数据
连续型栅格数据的预测系统研究与应用
基于Web服务的SPSS与.NET系统集成开发
基于线性回归的航班延误预测研究与系统开发
面向移动GIS的快速检索方法研究
基于GDAL的标准图幅生成及数据批量裁剪方法*1
教学工作量管理系统的设计与实现
一种基于SOA的web异构数据集成方法研究
基于ArcGISEngine的南水北调工程基础栅格数据管理
基于ArcGIS Engine的栅格数据转换矢量数据
基于oracle的统一瓦片分块栅格数据库模型