李 東,申 遼
1云南省自然資源廳國土資源信息中心
2云南省測繪資料檔案館〈云南省基礎地理信息中心〉
隨著自然資源數據獲取方式更加快捷,云南省現有自然資源信息化建設積累了大量的空間地理信息數據成果,因數據量大導致地圖服務瀏覽、查詢效率不高,地圖瓦片的構建處理時間冗長、更新不及時,影響了自然資源大數據建設成果的應用與推廣。同時,現有國土資源、基礎測繪、地質環境等專業的信息化應用建設中也發布了大量的地圖服務,由于技術要求不一、管理分散、更新困難等問題,迫切需要建設國土空間海量數據快速瀏覽查詢、服務發布及更新系統,滿足自然資源空間大數據的管理、快速瀏覽查詢和更新需求。
建設自然資源數據快速瀏覽與服務發布系統,主要是為了解決好兩個方面的問題。
一是研發高性能分布式地圖瓦片引擎,解決地圖服務的快速切圖、快速發布、快速瀏覽的問題。實現在大數據量背景下的空間地圖服務高速化。
二是研發國土資源空間數據統一發布系統,解決現有地圖服務管理分散、數據不統一、資源利用效率低等問題。實現跨平臺的地圖服務統一管理、統一發布和統一更新。
系統功能的建設應包含高性能地圖瓦片引擎、空間數據高速更新、統一地圖服務發布與管理、地圖快速瀏覽查詢、系統監控等五大主要功能模塊。
自然資源海量數據快速瀏覽與服務發布系統需要在架構層面,解決自然資源數據體量巨大、處理速度快、數據類型繁多、價值密度低等特性帶來的挑戰,因此在技術選型上采用了當前主流的Hadoop架構,并結合空間數據存儲、分析的特點,選擇了多種當前主流的大數據框架[1]。在大數據存儲層,統一采用分布式文件系統,架構Swift、HBase,實現對空間數據的存儲;在大數據處理層,采用MapReduce、Hive、Spark等大數據處理框架,同時采用GIS Tools for Hadoop實現對空間大數據的處理[2]。空間大數據管理的總體技術架構如圖1所示:

圖1 系統技術架構
(1)數據采集層
國土資源大數據快速瀏覽與服務發布系統的數據來源于國土資源大數據平臺,數據格式以結構化空間數據為主,此外還會包括大量的非結構化數據,例如:圖片、視頻、音頻、文檔等。
(2)大數據存儲層
為了滿足不同數據格式的存儲要求,在數據存儲層搭建異構的數據庫存儲技術,對于結構化數據,采用傳統的關系型數據庫(RDBMS)Oracle;對于非結構化數據,采用分布式存儲架構,Ceph、HDFS、HBase、Swift。在數據存儲層,對關系型數據庫和分布式存儲實現統一管理,向上層提供統一的訪問接口[3]。
(3)大數據處理層
結合空間數據處理的特點,在大數據處理層建 立GIS Tools for Hadoop框 架,依 托 底 層 的MapReduce、Hive,對空間數據進行分布式處理和運算。同時,搭建通用的大數據處理框架,如Spark等,滿足常規大數據的處理需求,處理結果經過空間建模、可視化,最終面向業務應用。
(4)服務層
服務層為用戶提供快速瀏覽的地圖服務能力,包括矢量地圖快速瀏覽服務、影像地圖快速瀏覽服務。
(5)應用層
國土資源大數據快速瀏覽與服務發布系統支持Web端的訪問方式,用戶可以在Web端,訪問系統所發布的各類專題地圖服務。包括土地專題圖、礦政專題圖、地質環境專題圖、不動產登記專題圖等。
(1)高性能地圖瓦片引擎
提供矢量地圖的分布式瓦片圖像緩存生成、影像地圖的分布式瓦片圖像緩存生成、分布式瓦片緩存管理、瓦片緩存局部更換等功能。為了與ArcGIS平臺兼容,高性能瓦片引擎要在輸入、輸出兩大環節與ArcGIS平臺保持兼容。高性能地圖瓦片引擎不僅要能夠識別ArcGIS配圖文件,還要能夠利用存儲在國土資源空間數據庫中的空間數據來生成地圖瓦片。由于既有的業務應用系統所引用的地圖服務,都是采用ArcGIS平臺發布的,所以高性能地圖瓦片引擎所生成的地圖瓦片也要能夠發布到ArcGIS平臺上,這樣就可以最大限度地保證在提升地圖服務效能的同時,保持相關業務的持續性。
采用分布式計算框架不僅把計算的壓力分散到多臺設備上,尤其是把IO的壓力也分散開,有效利用各臺設備上的高速緩存,極大地提高瓦片生成效率。
在分布式瓦片引擎節點上生成的地圖瓦片,也是散布在各個節點上。通過分布式文件系統將這些分散的地圖瓦片組織成為一個統一的整體。為了提高分布式瓦片存儲的存取速度,必須建立一套統一的分布式文件索引。
(2)數據主動更新
針對既有空間數據庫,能夠感知空間數據的更新。按照數據更新的空間范圍,快速重構瓦片圖像緩存,并更新到相關地圖服務中。
數據更新模塊的功能滿足兩項要求:
一是能夠主動感知既有空間數據庫中的指定空間數據的更新。
二是按照空間數據更新范圍,自動生成局部瓦片并更新到相關地圖服務中,根據所感知的空間數據的更新范圍,自動計算需要重新生成的瓦片范圍,通過瓦片引擎生成局部的地圖瓦片,然后再通過地圖統一發布服務,把局部的地圖瓦片更新到相關的地圖服務中。
(3)統一地圖服務發布與管理
統一地圖服務發布與管理模塊包含國土空間資源目錄維護、矢量地圖服務快速發布、影像地圖服務快速發布、導入既有地圖服務、地圖服務維護管理等功能。
統一地圖服務發布與管理模塊的功能需要滿足兩項要求:
一是快速發布新的地圖服務,包括矢量地圖服務和影像地圖服務。在高性能地圖服務平臺上,發布新的地圖服務。根據要求通過高性能地圖瓦片引擎生成地圖瓦片,提供可以快速瀏覽的地圖服務。
二是跨平臺維護與管理既有已發布的地圖服務。通過ArcGIS的地圖服務管理接口,跨平臺接入已發布的地圖服務,并實現統一的地圖服務管理功能。
(4)地圖快速瀏覽查詢。地圖快速瀏覽查詢模塊包含基礎地圖快速瀏覽、專題圖快速瀏覽、圖層控制、地圖工具(選取、繪制、編輯、地圖量算)、空間數據快速查詢、空間數據分析等功能。本模塊實現的地圖快速瀏覽與快速查詢是基于所發布的地圖服務提供的高性能。
(5)系統監控
系統監控模塊包含集群管理、服務器節點監控、服務發布任務監控、操作日志、系統日志,以及基礎的系統管理功能。
由于高性能地圖瓦片引擎會用到分布式處理技術,導致系統部署在較為復雜的分布式集群環境下,良好高效的系統監控模塊會使得整個集群環境易于維護。
隨著云計算的發展,系統應用的規模不斷擴大,常規的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構演進有條不紊。在本系統里我們將業務應用抽取為一個個獨立的服務,形成穩定的服務中心,統一對外提供服務調用。采用分布式部署,具備橫向擴展能力,滿足快速響應需求,提供高容錯處理機制。
主要核心部件:
Remoting:網絡通信框架,實現了sync-overasync和request-response消息機制;
RPC:遠程過程調用,支持負載均衡、容災和集群功能;
Registry:服務目錄框架用于服務的注冊和服務事件發布和訂閱。
借助于Nginx的事件驅動模型和非阻塞IO,可以實現高性能的Web應用程序。同時引入ngx_lua,該模塊通過標準Lua5.1解釋器或LuaJIT 2.0/2.1,把Lua嵌入到Nginx里面,并利用Nginx子請求,把強大的Lua線程混合到Nginx的事件模型中。Lua代碼被執行在網絡上是100%非阻塞的。在本系統中,上游請求服務為Redis,通過讀取Redis里存儲的瓦片緩存票據緩存索引,最終實現地圖訪問的高性能分發。
Nginx采用的是master-worker模型多進程模型一個master進程管理多個worker進程,基本的事件處理都是放在woker中,由master處理外部信號、配置文件的讀取及worker的初始化,worker進程采用單線程、非阻塞的事件模型(Event Loop,事件循環)來實現端口的監聽及客戶端請求的處理和響應,同時worker還要處理來自master的信號。由于worker使用單線程處理各種事件,所以一定要保證主循環是非阻塞的,否則會大大降低worker的響應能力。而Lua代碼執行是非阻塞,非常符合Nginx進程模型。
通常GIS軟件以數據獲取、存儲、管理功能為主,并添加了各種時間維度和空間維度的專題圖展示功能,具有空間統計、地理分區、路徑分析、選址優化等空間分析方法。但現有的數據管理和分析算法也難以擴展到大規模的分布式并行計算系統之上,無法滿足對非結構化的未知數據的探索性分析的需要,無法滿足大規模數據快速處理和復雜時空關系的分析需要。分布式空間分析引擎,引入空間數據庫一體化管理空間、屬性數據,以及較小冗余度、高效空間索引等優勢,結合分布式計算引擎對大型運算的優化支持,實現分布式技術的空間分析方法。分布式空間分析引擎架構由2部分組成:
一是分布式計算層,以計算性能良好的Spark作為計算引擎,引入了與其他分布式計算不同的彈性分布式數據集(Resilient Distributed Datasets, RDD)進行內存運算,與MapReduce相比節省了大量的磁盤輸入、輸出操作,提高了運算速度;并以Shark(Hive on Spark)為數據倉庫,將查詢語句轉換為Spark上的RDD操作。
二是數據管理層,采用空間數據庫與HDFS混合的方式進行數據存儲。
通過高速分布式計算技術與傳統的空間地理信息服務發布相結合,建設自然資源數據快速瀏覽與服務發布系統,實現高速生成地圖瓦片、高速發布地圖服務、高速瀏覽地圖服務,從技術上為云南省國土資源大數據的推廣應用提供保障。同時通過分布式服務治理技術,對國土資源時空云平臺、基礎地理信息時空云平臺、地質環境信息時空云平臺上所發布的地圖服務,實現跨平臺的統一管理、統一發布、統一更新,逐步改善既有業務應用系統的地圖服務環境,從管理上解決國土資源信息化高速發展、數據成果快速積累所帶來的一些問題。