何 洪 磊
(連云港職業(yè)技術(shù)學(xué)院 信息工程學(xué)院,江蘇 連云港 222006)
WebGIS(互聯(lián)網(wǎng)地理信息系統(tǒng))在當前有著廣泛的應(yīng)用,例如天氣預(yù)報、調(diào)查統(tǒng)計、國土管理、公共設(shè)施管理、城市規(guī)劃、環(huán)境評估、災(zāi)害預(yù)測、軍事公安、農(nóng)林牧業(yè)、水利電力、資源調(diào)查、郵電通訊、商業(yè)金融、交通運輸、宣傳展示等幾乎所有領(lǐng)域。
因此,有眾多的用戶需要搭建滿足自己需求的WebGIS系統(tǒng)。目前,搭建系統(tǒng)的方式通常是使用專業(yè)軟件(例如ARCGIS、mapinfo、超圖),聘請專業(yè)人員開發(fā)完成。這樣的搭建方式就需要較高的費用成本,對于大部分用戶來說構(gòu)成負擔(dān),尤其是一些非核心業(yè)務(wù),不頻繁使用的用戶。而且,在眾多的WebGIS系統(tǒng)應(yīng)用中,有許多是相同或者是相近的,重復(fù)搭建也是是一種資源的浪費。
為了解決這種問題,本文提出了一種SAAS模式的WebGIS系統(tǒng):用戶可以通過在線定制的方式搭建符合自己需求的WebGIS系統(tǒng);用戶自己制作的系統(tǒng)可以作為模板共享給其他用戶;有著相似應(yīng)用需求的用戶,可以使用某種WebGIS系統(tǒng)模板,修改參數(shù)就可以完成自己系統(tǒng)的定制。
當前最主流的WebGIS系統(tǒng)是分層式瓦片地圖,它將系統(tǒng)功能分解為瀏覽器端模塊和服務(wù)器端模塊組合實現(xiàn)[1-2],如圖1所示。瀏覽器端的JavaScript引擎運行地圖模塊,從服務(wù)器端獲取地圖瓦片并組織成為地圖,同時還能夠響應(yīng)用戶的縮放、拖動、標記等各種操作。服務(wù)器端提供WMS(Web地圖服務(wù))、WTS(Web瓦片服務(wù))、WFS(Web要素服務(wù))以及各種應(yīng)用服務(wù)。這樣的好處是降低了服務(wù)器端的負載,提高了對瀏覽器的兼容性。
圖1 WebGIS系統(tǒng)結(jié)構(gòu)
SAAS模式WebGIS系統(tǒng)設(shè)計采用了這種主流的分層式瓦片地圖結(jié)構(gòu),同時又要考慮到SAAS系統(tǒng)用戶眾多,用戶的各種不同需求,就需要實現(xiàn)系統(tǒng)的可定制性。為了滿足眾多租戶的各種需求,在進行系統(tǒng)設(shè)計之前,首先對租戶的需求進行分析,也就是在眾多的租戶需求中統(tǒng)計分解出共同的需求和差異化的需求。對于差異化的需求,在系統(tǒng)設(shè)計時,要考慮到可以允許租戶自己定制,并且不同的用戶之間不會互相影響[3-4],如圖2所示。
圖2 差異化需求的定制
假設(shè)共性需求為D0,可選的差異化需求為Δi(Δ1,Δ2,…,Δk),那么系統(tǒng)的總需求集是D=D0+Δ1+Δ2+…+Δk。不同用戶的需求集可以表示為:
(1)
系統(tǒng)提供服務(wù)集,每個服務(wù)對應(yīng)解決一個需求。例如對應(yīng)解決需求Δi的服務(wù)為Si,則系統(tǒng)的總服務(wù)集:
S=S0+S1+S2+…+SK
不同用戶的服務(wù)集可以表示為
(2)
考慮到用戶眾多,差異化需求會非常多,如果這些需求對應(yīng)的服務(wù)都在服務(wù)器端運行,會極大地增加服務(wù)器的負載,降低系統(tǒng)的運行性能。為了降低服務(wù)器負載,將對應(yīng)共性需求D0的服務(wù)S0在服務(wù)器端實現(xiàn),對應(yīng)差異化需求Δi的服務(wù)Si在瀏覽器端實現(xiàn)。
系統(tǒng)的一個關(guān)鍵技術(shù)就是可定制性,用戶可以根據(jù)自己的需要,對業(yè)務(wù)邏輯、用戶界面、數(shù)據(jù)結(jié)構(gòu)進行定制[5]。根據(jù)該原則結(jié)合WebGIS特點設(shè)計了SAAS模式WebGIS系統(tǒng)的結(jié)構(gòu),如圖3所示。
圖3 SAAS模式WebGIS系統(tǒng)結(jié)構(gòu)
數(shù)據(jù)層在服務(wù)器端,包括地圖瓦片數(shù)據(jù)、地理信息數(shù)據(jù)、元數(shù)據(jù)、應(yīng)用數(shù)據(jù)、WMS、WFS、WCS等。用戶對數(shù)據(jù)結(jié)構(gòu)的定制通過元數(shù)據(jù)實現(xiàn),同時元數(shù)據(jù)也是用來保存用戶定制的業(yè)務(wù)邏輯和界面信息。
業(yè)務(wù)邏輯層包括服務(wù)器端Web服務(wù)和瀏覽器端業(yè)務(wù)邏輯層兩部分,服務(wù)器端提供多種Web服務(wù),主要是實現(xiàn)用戶共性需求的功能。瀏覽器端業(yè)務(wù)邏輯層包括地圖模塊、服務(wù)模塊、配置模塊、控制模塊。地圖模塊實現(xiàn)地圖常用功能;服務(wù)模塊實現(xiàn)差異化需求的功能,提供各種服務(wù)模塊供用戶選擇;配置模塊是提供用戶定制界面、定制服務(wù)、定制業(yè)務(wù)邏輯功能;控制模塊是用戶定制內(nèi)容的實現(xiàn),控制系統(tǒng)按照用戶定制的業(yè)務(wù)邏輯運行。
表示層就是瀏覽器端提供的用戶界面,可以由用戶在配置模塊中定制。然后將配置信息存放到服務(wù)器端元數(shù)據(jù)表中。用戶使用系統(tǒng)時,按照元數(shù)據(jù)表中的信息顯示用戶界面。
SAAS模式WebGIS系統(tǒng)既要能滿足用戶定制需求,同時又要保證服務(wù)器的性能。本文設(shè)計的解決方案是:采用SOA方式,將系統(tǒng)服務(wù)功能分解并模塊化,供用戶自由配置,然后將負載合理分配到服務(wù)器端和客戶端。
所以SAAS模式WebGIS系統(tǒng)的關(guān)鍵技術(shù)包括:
(1) SOA和負載均衡。將用戶共性需求和差異性需求對應(yīng)的功能分別由多個服務(wù)實現(xiàn),并合理分布在服務(wù)器端和瀏覽器端。當多個用戶定制的不同實例同時運行時,降低服務(wù)器壓力。
(2) 系統(tǒng)可配置性。系統(tǒng)可由用戶定制性,包括用戶界面、業(yè)務(wù)邏輯、數(shù)據(jù)結(jié)構(gòu)等。
(3) 控制引擎。系統(tǒng)能夠監(jiān)聽用戶活動和服務(wù)模塊的返回值,按照用戶定制的參數(shù)運行。
(4) 系統(tǒng)的易用性。用戶可以將定制的系統(tǒng)作為模板,共享給其他用戶使用。
建立SOA架構(gòu),首先分析共性需求和差異性需求,然后構(gòu)建對應(yīng)的服務(wù)模塊解決。通過分析,常用的WebGIS系統(tǒng)需求包括:用戶管理、地理信息管理、地圖管理、類型切換、制圖、定時器、數(shù)據(jù)搜索、數(shù)據(jù)定制等[6-10]。對應(yīng)的服務(wù)模塊如下:
(1) 地圖服務(wù)。地圖服務(wù)通過瀏覽器端的JavaScript API和服務(wù)器對應(yīng)的服務(wù)實現(xiàn)??梢酝ㄟ^設(shè)置各種參數(shù),包括地圖的ID、對齊方式、地圖瓦片、中心坐標、寬度、高度等來確定具體的屬性。
(2) 地理信息管理。地理信息服務(wù)包括地理信息的類別管理和地理信息的添加、刪除、修改等。
(3) 用戶管理。用戶管理包括用戶的注冊、登錄、類別、權(quán)限等。
(4) 制圖服務(wù)。制圖服務(wù)是指根據(jù)地理信息在地圖指定的圖層中繪制圖表。例如在地圖上繪制各城市的GDP三維直方圖、繪制農(nóng)田病蟲害的散點圖、繪制河流濕地的生態(tài)圖等。
(5) 語音視頻通信服務(wù)。語音視頻通信服務(wù)是指提供和地圖上的某信息點視頻通信的服務(wù)。例如遠程在線監(jiān)控、語音視頻通話。
(6) 定時器。設(shè)置定時器,每隔一個指定時間,執(zhí)行設(shè)定的操作。例如,每隔5 min刷新氣象圖。
(7) 數(shù)據(jù)搜索。數(shù)據(jù)搜索服務(wù)包括搜索目標和返回結(jié)果顯示方式兩個部分,搜索目標是指定要搜索的數(shù)據(jù)庫,SQL語句。返回結(jié)果顯示方式是指返回結(jié)果顯示區(qū)的寬度、高度等樣式和顯示區(qū)界面中的數(shù)據(jù)集的字段。
其中一些服務(wù)對應(yīng)的類如圖4所示:GMap是通過GMAP接口實現(xiàn)的地圖對象;GIcon是圖標;GPoint是坐標;GPolyline是折線;GMark是標注;GDiv是在地圖對象指定圖層寫入內(nèi)容的類;Plot是在地圖繪制圖表的類;Search是實現(xiàn)搜索功能的類;Vedio_comm是實現(xiàn)地理位置實時通信的類;Web_commu是在WebRTC接口實現(xiàn)的瀏覽器端語音視頻通信類。
圖4 服務(wù)模塊類圖
系統(tǒng)將用戶管理、地理信息管理等用戶共同的需求,由服務(wù)器端實現(xiàn)。其他的差異化需求由于數(shù)量眾多,而且用戶數(shù)量龐大,如果這些需求對應(yīng)的服務(wù)放在服務(wù)器端同時運行將會對服務(wù)器構(gòu)成非常大的壓力[11]。所以,將對應(yīng)的差異化需求解決方案由JavaScript模塊完成,將這些模塊組成解決方案庫。用戶定制時,選擇相應(yīng)的JavaScript模塊,下載到客戶端瀏覽器運行即可。這些瀏覽器端的運行的服務(wù)模塊,如果需要訪問服務(wù)器端的數(shù)據(jù)庫,只需要調(diào)用在服務(wù)器端的一個數(shù)據(jù)庫操作的Web服務(wù)即可,如圖5所示。
圖5 服務(wù)模塊的負載均衡
系統(tǒng)的可配置包括用戶界面、業(yè)務(wù)邏輯的定制。用戶界面就是HTML文檔,所以界面自制就用戶編輯HTML文檔或者DOM對象樹。而業(yè)務(wù)邏輯包括是服務(wù)模塊選擇和業(yè)務(wù)規(guī)則文件的制作。各種服務(wù)模塊本身也需要配合用戶界面,例如地圖服務(wù)就是Gmap對象實例綁定一個DIV。通常是在HTML文檔包含要調(diào)用服務(wù)的JS庫,然后綁定DOM對象并實例化。所以,用戶界面定制和服務(wù)模塊的選擇可以一起完成的。
當前瀏覽器都支持編輯模式,所以主要開啟瀏覽器編輯模式,可以在線編輯HTML文檔。流程圖如圖6所示。
圖6 配置流程圖
工作過程如下:
(1) 首先生成一個iframe對象,將該iframe的中的document設(shè)置成編輯狀態(tài)(document.designMode="on"),這樣,就可以在這個空白文檔中實現(xiàn)在線編輯了。然后在用戶界面編輯區(qū)上方設(shè)置一個工具條,用于編輯用戶界面和服務(wù)模塊。
(2) 鼠標光標在編輯區(qū)內(nèi)拖動選擇編輯范圍,也可以單擊鼠標確定坐標。
(3) 編輯器會自動識別選擇范圍內(nèi)的對象和其父對象的DOM結(jié)構(gòu),例如document.table.img,用戶如果選擇了要編輯的對象,編輯器就會打開一個屬性對話框供用戶編輯。
(4) 如果用戶并未選擇編輯對象,而是單擊工具欄命令按鈕,編輯器就會執(zhí)行對應(yīng)的命令。這個命令如果是需要用戶設(shè)置參數(shù)的(例如服務(wù)模塊、表格、表單等),編輯器就會打開一個屬性對話框供用戶編輯,并且每個對象會被設(shè)置一個對應(yīng)的ID(例如,插入的第N個地圖模塊的ID設(shè)置為Map_N)。如果不是,就直接執(zhí)行。
(5) 編輯器將對應(yīng)命令執(zhí)行后的HTML代碼寫入編輯區(qū),編輯區(qū)顯示用戶編輯的結(jié)果,最后把HTML文檔和對應(yīng)的DOM樹保存到服務(wù)器端。
在上一個步驟中選擇了要加入的服務(wù)模塊,然后制作業(yè)務(wù)規(guī)則文件來組合這些服務(wù)。業(yè)務(wù)邏輯定制過程如圖7所示。
圖7 業(yè)務(wù)邏輯定制過程
一個業(yè)務(wù)規(guī)則文件包含多條業(yè)務(wù)規(guī)則,每條業(yè)務(wù)規(guī)則包含3個要素:源對象、事件、動作[12]。當源對象發(fā)生了某事件,就會觸發(fā)指定的動作。例如當搜索服務(wù)“search_1”完成搜索,結(jié)果返回之后,觸發(fā)執(zhí)行繪圖服務(wù)“Plot_1”,在地圖服務(wù)“Map_1”上繪制散點圖。業(yè)務(wù)規(guī)則以XML文件的格式保存。
〈rules〉
〈rule〉
〈sobj〉search_1〈/sobj〉
〈event〉complete〈/event〉
〈action〉Plot_1(Map_1, search_1.Data. coordinate, Scatter)〈/action〉
〈/rule〉
〈/rules〉
系統(tǒng)控制引擎負責(zé)按照用戶定制的參數(shù)運行系統(tǒng),包括用戶界面和業(yè)務(wù)邏輯。用戶界面數(shù)據(jù)(HTML文件)保存在用戶的元數(shù)據(jù)表中,因此,系統(tǒng)初始化的時候載入即可,而業(yè)務(wù)邏輯控制是控制模塊的核心??紤]到降低服務(wù)器負載便于和用戶的交互,控制引擎設(shè)計在瀏覽器端運行,由JavaScript程序完成??刂埔媸紫雀鶕?jù)用戶添加的服務(wù)模塊載入對應(yīng)的JavaScript庫。然后綁定對應(yīng)的DOM對象并初始化。接著根據(jù)業(yè)務(wù)規(guī)則文件按順序調(diào)用相關(guān)服務(wù)模塊,并監(jiān)聽用戶的活動,按照業(yè)務(wù)規(guī)則文件設(shè)定的條件對用戶活動作出響應(yīng)[13-16],如圖8所示。
圖8 控制引擎結(jié)構(gòu)
對用戶活動的監(jiān)聽是指對業(yè)務(wù)規(guī)則中指定DOM對象的監(jiān)聽。為了防止監(jiān)聽瀏覽器DOM對象的混淆,使用DOM level2事件的監(jiān)聽方法[17-18]:object.addEventListener("event",eventFunction,boolean);object即是業(yè)務(wù)規(guī)則中指定DOM對象,用getElementById(DOM_ID)獲取。DOM_ID是指定DOM對象的ID。為了防止事件冒泡,boolean設(shè)置為false。
業(yè)務(wù)邏輯處理可以看做是一個中央流程,單線程的異步模式運行。根據(jù)制定的條件確定調(diào)用不同的服務(wù)模塊, 這些條件可以是用戶活動或者是上一次調(diào)用的服務(wù)的返回值。業(yè)務(wù)邏輯處理根據(jù)條件構(gòu)造循環(huán)、聲明變量、復(fù)制和賦予值、定義故障處理等操作。
考慮到JavaScript必須在一個頁面運行,更換頁面后不能持續(xù)運行。所以必須保持一個主頁面運行控制引擎,其他的可變活動,放在iframe內(nèi)運行。另外,考慮到瀏覽器意外關(guān)閉。將控制引擎的執(zhí)行過程記錄到cookie本地數(shù)據(jù)中。如果出現(xiàn)意外關(guān)閉瀏覽器等情況,可以從斷點處繼續(xù)執(zhí)行。
為了驗證開發(fā)的SAAS模式WebGIS平臺能否在運行時支持多個租戶執(zhí)行不同業(yè)務(wù)流程實例,不同流程實例之間能否隔離。在客戶端模擬2個租戶,租戶分別設(shè)置配置方案,然后將這些配置方案存為不同的用戶配置文件,實驗環(huán)境配置如表1所示。
表1 實驗環(huán)境配置
其中, 租戶A需要一個園區(qū)規(guī)劃的WebGIS平臺,將園區(qū)三維地圖瓦片上傳到服務(wù)器端,調(diào)用地圖瓦片,使用折線工具和標注工具繪制規(guī)劃圖,租戶A的配置文件如表2所示,運行結(jié)果如圖9所示。
圖9 園區(qū)規(guī)劃
租戶B需要戶外運動管理的WebGIS平臺。由于人員眾多,每次活動將參與人員分成幾組,每組有個編號,由一個組長管理。每個組長的手機在系統(tǒng)注冊并登錄,這樣系統(tǒng)可以隨時獲得組長的GPS位置。當租戶B需要查找各個小組的當前位置并查看情況時。在搜索框內(nèi)輸入地理坐標的范圍,就可以搜索范圍內(nèi)所有小組,并在地圖上用標注顯示。單擊某個標注,調(diào)用語音視頻通信服務(wù),可以和組長視頻通信,查看當前狀況。租戶B的配置文件如表3所示,運行結(jié)果如圖10所示。
表2 租戶A的配置文件
表3 租戶B的配置文件
圖10 戶外管理
實驗結(jié)果表明,開發(fā)的SAAS模式WebGIS平臺能夠根據(jù)租戶配置文件派生出不同的流程實例,而且各個流程實例的執(zhí)行是相互隔離的、互不影響。
為了進一步評估SAAS模式WebGIS平臺的服務(wù)性能,將傳統(tǒng)SAAS模式和本文提出的模式做一個對比。
傳統(tǒng)模式下,所有服務(wù)實例都是運行在服務(wù)器端(見圖11),本文提出的模式下,只有通用服務(wù)S0(初始化和數(shù)據(jù)訪問)實例在服務(wù)器端運行,其他差異化服務(wù)實例在客戶端運行,見圖12。
圖11 傳統(tǒng)SAAS模式
圖12 負載均衡SAAS模式
下面討論兩種模式下各個實例的響應(yīng)時間的對比。
定義1服務(wù)器有P個,第j個服務(wù)器表示為Vj,它的計算機能力表示為Fvjj∈P。
定義2客戶端有Q個,第i個客戶端表示為ci它的計算機能力表示為Ecii∈Q。
為了簡化計算,假設(shè)所有實例內(nèi)的服務(wù)都是順序執(zhí)行。實例αb的服務(wù)集的工作量為
(1) 傳統(tǒng)SAAS模式下,所有服務(wù)部署在服務(wù)器端。單位時間內(nèi)到達的服務(wù)請求工作量
(3)
服務(wù)器平均處理速度=PF/G。
假設(shè)在未超負荷運行的情況下,根據(jù)排隊論的Erlang C結(jié)論:
其中,Ec是Erlang C公式,表達式
(4)
所以,對于客戶實例i總體的服務(wù)響應(yīng)時間
(5)
1≤mi≤ni≤k
(2) 本文提出的SAAS模式,初始化服務(wù)S0部署在服務(wù)器端,其他服務(wù)部署在客戶端。
單位時間內(nèi)到達服務(wù)器的服務(wù)請求工作量
(6)
根據(jù)式(5),服務(wù)器端處理時間:
所以總體的響應(yīng)時間
(1≤mi≤ni≤k;i∈Q)
(7)
使用Matlab 2014b進行模擬評估,為了簡化計算,假設(shè)服務(wù)器數(shù)量P=2個,每個服務(wù)器的計算能力Fvj=100(工作量/s),每個客戶端的計算能力Eci=20(工作量/s),每個實例包含的服務(wù)數(shù)量K=5個,每個服務(wù)Sk的工作量都=1,所有客戶端i請求速率R=1(次/s)。
表4 兩種SAAS模式的響應(yīng)時間
圖13 兩種SAAS模式的響應(yīng)時間對比
由圖13可知,當客戶端較少時,傳統(tǒng)的SAAS模式響應(yīng)時間較快,隨著用戶端數(shù)量的增加,傳統(tǒng)SAAS模式的響應(yīng)時間會迅速增加,遠遠高于本文提出的SAAS模式響應(yīng)時間。而本文提出的SAAS模式的響應(yīng)時間非常平穩(wěn),基本不會隨客戶端數(shù)量發(fā)生變化。
采用面向服務(wù)架構(gòu),將用戶常用功能分解并模塊化,用戶可以自由配置系統(tǒng),將負載合理分配到服務(wù)器端和客戶端執(zhí)行,用戶系統(tǒng)實例運行由流程控制引擎來控制。所以SAAS模式WebGIS系統(tǒng)的關(guān)鍵技術(shù)包括:SOA和負載均衡、系統(tǒng)可配置性、流程控制引擎、易用性。通過兩個實例的建立,驗證了系統(tǒng)關(guān)鍵技術(shù)的解決方案是有效的。
另外,由于WebGIS系統(tǒng)的需求繁多,系統(tǒng)開發(fā)人員不可能開發(fā)滿足所有應(yīng)用的服務(wù)模塊,考慮以后提供系統(tǒng)接口,用戶自己開發(fā)服務(wù)模塊,并分享給其他用戶使用。