基于并行下载算法和动态缓存池的高性能WebGIS数据存取与显示关键技术研究
Posted 地理信息世界GeomaticsWorld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于并行下载算法和动态缓存池的高性能WebGIS数据存取与显示关键技术研究相关的知识,希望对你有一定的参考价值。
作 者 信 息
黄科佳1,2,李少杰1,左 尧1,蔡文文1,李绍俊1,3,王少华1,4,宋关福1,3,钟耳顺1,4
(1. 北京超图软件股份有限公司,北京 100015;2. 北京航空航天大学,北京 100191;3. 国家测绘局 地理信息基础软件与应用工程中心,北京 100101;4. 中国科学院 地理科学与资源研究所,北京 100101)
【摘要】随着互联网的普及和信息技术的不断发展,各种各样的信息数据呈现出海量增长的趋势。数据是GIS系统的血液,同样呈现出纷繁复杂的特点,高效的数据存取、显示模式将大大加速GIS系统的效率,提升用户友好度。目前的WebGIS服务中,由于多用户同时访问、网络带宽资源等因素限制,往往造成WebGIS数据传输、可视化的效率低下。为此,本文提出一种基于并行下载算法和动态缓存池技术的高性能GIS数据并行处理方法。通过对传统单线程串行软件的并行化进行改造,实现了软件对系统资源的最优化利用,从而提升硬件资源利用率、软件的计算效率和整体性能。本模型研究设计了5个模块以流程化的方式实现算法、模型管理,包括数据预处理模块,消息队列准备模块,数据下载控制模块,循环控制模块和地图渲染模块5个流程模块。然后,利用客户端动态内存池LOD加载技术,通过预定义内存块个数和内存块大小,实现内存个数和内存块内容的自适应配置。通过任务消息队列依次出/入队列请求的方法实现高性能的WebGIS数据下载传输和加载,以解决现有技术不支持同步下载WebGIS数据和数据复用的问题。最后,为了进一步说明本模型算法的先进性,还对比分析了本研究算法与传统数据下载模型的效率,发现本研究算法对性能的提升可达到5倍以上,表现出了更加高效的GIS数据存取性能和渲染效果。
【关键词】多线程通讯;消息队列;动态缓存池;高性能GIS
【中图分类号】TP301.6 【文献标识码】A 【文章编号】1672-1586(2018)06-0106-07
引文格式:黄科佳, 李少杰, 左尧, 等. 基于并行下载算法和动态缓存池的高性能WebGIS数据存取与显示关键技术研究[J].地理信息世界,2018,25(6):106-112.
正文
0 引 言
随着互联网的普及和信息技术的不断发展,各种各样的信息数据呈现出海量增长的趋势。而WebGIS由于平台独立性、易访问性、计算资源负载均衡等特点而成为地理信息领域的一大增长点。但是面对海量的地理信息数据,如何高效地进行管理、分析和显示变得十分困难。同时,由于市场的扩大,用户需求的不断增加,WebGIS系统常常需要面临着多用户访问、网络带宽资源受限等情况。现有的WebGIS下载传输技术均基于单线程模型而设计,缺少同时发送网络请求的机制,无法实现并行下载传输WebGIS发布的服务数据,造成WebGIS数据传输的效率较低。如何把用户请求的数据快速、准确地管理和分析,并以高效、友好的可视化效果返回给用户,是WebGIS系统迫切需要解决的关键问题之一。
此外,现有WebGIS技术大都采用单线程串行的方式,将下载数据序列化到磁盘或数据库,需要时只能从磁盘或数据库读取数据,每次向磁盘或数据库存储和读取耗费大量的时间,无法直接使用当前已下载的数据,也无法复用频繁使用的数据。基于上述内容,本文结合WebGIS数据在线传输的特点,根据分布式并行策略,开辟对应线程间通信、调配计算任务、管理缓存空间资源、渲染任务资源的4个消息队列,并设计了5个模块以流程化的方式实现算法、模型管理,包括数据预处理模块,消息队列准备模块,数据下载控制模块,循环控制模块和地图渲染模块5个流程模块,实现高性能的WebGIS数据传输和响应服务。同时,本文还利用了客户端动态内存池LOD加载技术,通过预定义内存块个数和内存块大小,实现内存个数和内存块内容的自适应配置。通过任务消息队列依次出/入队列请求的方法实现高性能的WebGIS数据下载传输和加载,以解决现有技术不支持同步下载WebGIS数据和数据复用的问题,进一步为用户提供更好的WebGIS数据访问服务。
1 算法设计
1.1 算法模块设计
根据WebGIS数据在线传输和分布式并行模型的特点,研究设计开发了一种新型的GIS数据下载模型,如图1所示。该模型通过开辟多个消息队列,实现了线程间数据的实时通信。同时,划分在线传输的单节点数据为多个子节点数据,每个子节点均设置一个任务线程、任务缓存和数据队列,分别用于数据的通信,调配计算任务以及管理缓存空间资源。然后,通过多线程并行方法传输WebGIS数据,实现软件对系统资源最大化利用率。具体来讲,本模型主要包括5个流程模块,分别是数据预处理模块,消息队列准备模块,数据下载控制模块,循环控制模块和地图渲染模块。而在功能逻辑上,对应于5个功能模块,按顺序可划分成GIS数据的构造初始化,生成离线数据;发送多线程任务,分发实时绘制任务,生成网络请求;生成下载消息队列,多线程并行下载数据;消息出入队列管理和更新UI交互任务;更新内存池缓存队列,符号化要素并实时渲染图像结果,关联屏幕显示等。
图1 WebGIS数据下载模型的模块结构图
Fig.1 Module structure of WebGIS data download model
1.1.1 数据预处理
数据预处理模块,如图2所示,主要负责WebGIS服务数据的获取,并生成网络下载数据集和地图投影等配置信息存储表。首先,初始化网络服务环境,将WebGIS空间数据以XML或JSON等文件格式下载到本地系统,同时获取网络服务的URL参数信息,并根据键值对的存储规则解析XML或JSON文件。然后检查网络服务的有效性,过滤无效请求参数和服务类型。再获取地图范围、地图投影、下载数据风格和数据格式等信息。最后,提取下载和显示地图所需的参数信息,从而得到地图范围、比例尺、地图投影、下载请求规格信息,并按照网络数据集构造规则生成下载数据集和离线信息存储表,用于后续的消息队列中心提取数据构造多线程下载任务和子线程绘制任务。
图2 数据预处理模块
Fig.2 Data preprocessing module
1.1.2 消息队列准备
消息队列准备模块如图3所示,采用面向对象的多态基本设计原则,结合多线程同步编程模型,用于将WebGIS的网络服务分解为具体的HTTP请求任务,提供给数据下载模块进行在线实时请求。具体来讲,第一步,系统获取用户交互的手势动作,并封装成消息内容,通过UI主线程调用WebGIS服务接口;第二步,UI主线程根据消息类型和消息内容,发送地图绘制任务给渲染子线程;第三步,渲染子线程接受到绘制任务后启动渲染线程池,并查询数据准备阶段生成的网络数据集,计算出格网请求范围及比例尺或瓦片行列号;第四步,选择网络请求的服务类型,提取该服务类型的数据下载内容,生成符合WebGIS服务标准(REST或OGC等)的URL请求串。第五步,基于开源CURL库,一种利用URL语法在命令行方式下工作的开源网络文件传输下载库,初始化网络下载环境,得到基于HTTP协议的GET请求用于发送。
图3 消息队列准备模块
Fig.3 Message queue preparation module
1.1.3 数据下载控制
图4 数据下载控制模块
Fig.4 Data download control module
1.1.4 循环控制
循环控制模块如图5所示,用于将发送的请求任务全部依次下载,直到完成所有任务得到每一个请求任务的磁盘数据文件为止。具体来讲,首先,在数据下载模块发送请求后,按照发送请求的顺序依次获取每个请求的下载状态。如果状态为未完成,则请求任务建立新的消息队列,并触发消息队列再次发送请求任务,直到下载完成或者此任务请求次数超过5次为止。然后,根据主界面交互操作,获取新浏览区域的图像范围,构成新的请求任务。按照图像范围的顺时针顺序添加到消息队列,循环添加所有新请求任务。添加完成后触发消息队列开始请求服务器网络数据。等待完成消息触发后,开始遍历消息中心的所有消息队列,检查是否存在未发出的任务,有的话则将发送这些任务批量向服务端发送,不存在则系统进入睡眠等待状态,等待新任务的发送请求和未完成任务的再次发送请求。总而言之,循环控制模块的作用就是循环调度消息队列模块,建立消息实时出队列和入队列的更新机制,直到所有下载任务全部达到完成状态,得到最终的WebGIS网络服务结果。
图5 循环控制模块
Fig.5 Cycle control module
1.1.5 地图渲染
地图渲染模块如图6所示,用于获取数据下载阶段的图像结果和当前地图的格网瓦片范围和比例尺,将结果通过图形绘制接口绘制到终端屏幕,以及响应UI交互动作。显示过程中,分别将本地下载完成的单张瓦片图像读取到栅格数据集,在栅格数据集中裁剪、拼接图像,并将图像融合成真彩色24位的单波段位图。位图结果通过图形绘制接口构造成一个点符号对象,按照256或512单元格分别构造出若干个点符号对象,形成一个覆盖设备屏幕的格网区域。对于超出部分通过GIS中面与面几何裁剪方法处理。最后通过图形绘制接口OpenGL将符号映射成纹理对象,在显存内部开辟一块内存用于保存纹理对象。最后,完成所有符号对象的绘制,通知UI主线程进行刷新,并拷贝显存中内存块绑定到屏幕进行显示。
图6 地图渲染模块
Fig.6 Map rendering module
1.2 客户端动态缓存池技术
在WebGIS数据传输中,客户端访问服务器的数据下载量巨大,因此提高传输效率是需要解决的一大问题。为此,本研究首先在图像数据处理的系统中,利用GPU对数据纹理特征进行渲染,并通过OpenGL引擎的纹理映射表进行维护。这种方式可快速指定某个纹理绑定到显存显示,减轻了CPU的计算负荷。同时利用GPU强大的并行处理能力和LOD动态显示的技术提供更快的图形显示。然后,我们还设计了客户端下载地图数据的动态缓存池,预先读取数据到主存,并按照一定排序技术进行管理。该技术一般采用线性队列等先入先出数据结构实现。这样可极大地降低客户端向服务器发送下载请求的频率,减少客户端输入/输出(I/O)磁盘的次数,从而提高客户端访问WebGIS数据的速度。
缓存策略是缓存池技术中最重要的问题,良好的缓存策略会较好地实现高效缓存和资源有效利用间的平衡。本系统在主存创建一个先入先出的队列来实现缓存池机制。
1.2.1 缓存数据存储方法
图像数据缓存策略分为横向和纵向。横向上,如图7所示,将第n 层中当前视图区域的图像(i ,j )添加到缓存池中。然后,将图像(i ,j )数据导入到缓存池中,周围的(i -1 ,j -1 )、(i ,j -1)、(i +1,j -1)、(i -1,j )、(i +1,j )、(i -1,j +1)、(i ,j +1)、(i +1,j +1)8幅图像代表了它在第n 层的延伸。而在纵向上,图8中(i ,j )表示第n 层的图像,(i ,j )下面4个图表示第n 层图像对应在第n +1层按照比例尺对等规则划分的4幅图像。第n -1层的缓存图像按照同样的比例尺规则划分为一个图像,只占有第n 层(i ,j )图像的1/4空间范围。
在缓存过程中,第n 层图像(i ,j )的延伸图像在缓存过程中与第n 层的其他图像存在重复需进行过滤筛选,第n 层图像(i ,j )的分割图像在第n -1层与其他图像的延伸图像存在重复需进行过滤筛选,先从磁盘文件导入到内存图像,通过筛选剔除后的内存图像,再导入到缓存池中。
图7 WebGIS数据延伸缓存机制
Fig.7 WebGIS data extension caching mechanism
图8 WebGIS数据拉伸缓存机制
Fig.8 WebGIS data stretching caching mechanism
1.2.2 缓存数据加载方法
缓存数据加载方法如图9所示,第n层比例尺存储该层所有的延伸图像,第n -1层存储小于当前比例尺的所有拉伸图像,第n +1层存储大于当前比例尺的所有拉伸图像。在显示过程中按照第n 层>第n +1层>第n -1层的纹理遍历规则加载图像。具体加载流程如下:
1)用户浏览地图至第n 层,向系统发送显示请求;
2)系统自动遍历缓存池中第n 层所有图像,存在相交区域的图像,通过纹理映射技术直接传至显存显示,覆盖空白区域的图像,便于直观展示当前区域内的最新图像;
3)遍历缓存池中第n+1层图像,存在比例尺大于当前视图区域的图像,并且和当前视图区域相交,并且该图像区域在3)过程中没有被执行,通过纹理映射技术拉伸纹理缓存到显存显示,覆盖空白区域的图像;
4)遍历缓存池中第n -1层图像,存在比例尺小于当前视图区域的图像,并且和当前视图区域相交,并且该图像区域在4)过程中没有被执行,通过纹理映射技术拉伸纹理缓存到显存显示,覆盖空白区域的图像;
5)遍历n 层所有图像,将所有和当前视图相交的图像贴到显存,覆盖第n +1层或者第n -1层图像,确保最终显示的图像都是最新图像,不存在拉伸残图,完成整个纹理缓存的显示过程。
图9 WebGIS数据缓存加载复用三机制
Fig.9 WebGIS data cache load reuse 3 mechanisms
对于用户在客户端进行的一般操作,所有当前图像可能延伸到的图像数据均进行了缓存。理论上讲,缓存池越大,缓存到内存中的数据就越多,服务器接收到用户请求时查找磁盘的次数越少,传输速率就越高。但服务器内存有限,无需过多浪费,且应预留内存来处理其他请求。
2 算法性能对比
我们在主频2.6 GHZ、内存8 GB的8核处理器PC机中进行了多组对比分析实验见表1,使用中国交通路网瓦片数据(数据量大小为23.31 GB),实现发现在REST网络服务类型下,针对10、50、100三类GIS瓦片数,相较于传统下载算法,本研究算法性能提升均可达到5倍以上。同样地,针对WMS网络服务类型下,10、50、100三类GIS瓦片数,本研究算法性能提升均可达到5倍以上,有着较好的渲染性能和显示效果。
表1 两种WebGIS下载算法测试结果
Tab.1 Test results of two WebGIS download algorithms
然后,开启不同线程请求数据的测试结果见表2。
表2 不同线程请求时间测试结果
Tab.2 Test results of request times for different threads
研究发现:①当线程个数小于8个线程时,有空闲的CPU核心未被充分利用,随着线程数的增加,更多地利用处理器资源,吞吐量线性增加,平均响应时间线性减少,性能不断提升;②当线程个数达到8个线程,即与CPU核心数相等时,所有CPU核心被充分利用,各调度线程调度服务内核并行计算,并发处理性能接近最优;③当线程个数大于8个线程时,由于测试用的服务器CPU核心数只有8个,CPU会频繁地进行线程切换操作,这会导致额外的CPU开销,因此并发处理能力几乎不能再线性增加。
3 结束语
数据传输是WebGIS中的核心技术,也是影响WebGIS系统性能的一大关键点。本研究结合WebGIS数据在线传输的特点,基于多线程并行请求在线数据模型和客户端动态内存池LOD加载技术实现了软件对系统资源利用最优化,显著提高硬件资源利用率,提高WebGIS计算效率和性能。具体来讲,基于多线程间的通信效率,通过多线程并行方法将单节点数据分解为若干个子节点数据同步下载,提升了数据下载效率;采用图像数据内存池设计了图像数据缓存机制,充分利用客户端主存空间,降低了数据下载到本地后存储磁盘的耗时。同时,根据并行策略,开辟4个消息队列,实现线程间数据的通信,并将在线传输的单节点数据分为若干个子节点数据,分别为每个子节点开辟一个任务线程,一个任务缓存,一个数据队列,用于数据的通信,调配计算任务及管理缓存空间资源。通过多线程并行方法传输WebGIS数据,实现软件对系统资源最大化利用率,提高软件的网络访问效率和软件的整体性能。最后,我们还对比分析了本研究算法与传统数据下载模型的效率,发现本研究算法性能提升均可达到5倍以上,有着更加优秀的GIS数据下载性能和渲染效果。
本期回顾
综合评述
·
理论研究
·
·
·
·
·
·
·
·
·
·
·
·
·
·
创新应用
·
·
·
·
邮箱变更声明
·
网站开通公告
·
诚聘特约审稿专家
·
专题组稿
·
·
以上是关于基于并行下载算法和动态缓存池的高性能WebGIS数据存取与显示关键技术研究的主要内容,如果未能解决你的问题,请参考以下文章