代軍普
(中國人民解放軍 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