韓麗霞 張占營
(1.天津市西青區(qū)人民檢察院 天津市 300380 2.天津師范大學計算機與信息工程學院 天津市 300387)
從“數字城市”到“平安城市”再到如今的“智慧城市”,以“綠色、智能、安全”為主題的“智慧城市”建設正如火如荼地進行,迅速在中國大地遍地開花[1]?!爸腔巯馈迸c智慧城市的建設可謂相輔相成,通過運用現代高新技術,智慧消防實現了無線報警網絡服務。它解決了電信、建筑、供電、交通等公共設施建設協(xié)調發(fā)展的問題,消防指揮中心與用戶單位聯網,改變了過去傳統(tǒng)、落后和被動的報警、接警、處警方式,實現了報警自動化、接警智能化、處警預案化和管理網絡化,極大地提高了處警速度,使人民生命、財產的安全以及警員生命的安全得到最大限度的保護。
隨著智慧消防信息化建設的不斷推進,信息系統(tǒng)規(guī)模在不斷擴大,各系統(tǒng)之間的關系變得越來越復雜。消防系統(tǒng)信息化是一個漸進的過程,各個應用系統(tǒng)之間互相獨立并且存在較大差異性,所以形成了一個個的“信息孤島”[2]。如何將眾多的“信息孤島”聯系起來,實現對服務通信、硬件和數據等方面集成管理的系統(tǒng)平臺,是智慧消防系統(tǒng)建設的重點也是難點。
在復雜系統(tǒng)建設的過程中,高性能框架的重要性不斷凸顯。2017年11月份,阿里發(fā)布了dubbo-2.5.7,這是繼2017年9月份以來阿里重新推出dubbo 后的第三代更新版本,dubbo 是一個分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,以及SOA 服務治理方案,它是面向服務的體系架構SOA 時代的產物,關注點主要在于服務的調用,流量分發(fā)、流量監(jiān)控和熔斷。在服務治理的開源框架中,Spring Cloud 框架也相當優(yōu)秀,它誕生于微服務架構時代,關注微服務治理的生態(tài),依托Spirng Boot 的優(yōu)勢,為開發(fā)人員提供了快速構建分布式系統(tǒng)的一些工具,包括配置管理、服務發(fā)現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等,考慮到微服務治理的方方面面。
Mule 是一個以Java 為核心的輕量級的消息框架和整合平臺,技術上關注靈活性,高效性以及易開發(fā)性,具有服務中介、數據轉換、消息路由、服務創(chuàng)建和托管的功能。本文以面向服務的體系架構SOA 為理念,基于Mule 提出了一個將硬件、數據和服務統(tǒng)一管理的集成系統(tǒng)平臺,提供可插拔的Web 服務,擴展性強。該平臺框架與dubbo 十分相似,實現了組織內部或跨組織邊界的不同系統(tǒng)的連接,解決了數據源之間的數據和不同應用之間的服務互相交互的問題。本文實現的集成系統(tǒng)平臺不僅是企業(yè)可用于服務的智能化管理中心,而且是企業(yè)內服務使用者與企業(yè)服務交互的統(tǒng)一接口,為智慧消防系統(tǒng)集成提出了新的解決辦法。
圖1:SOA 的基本體系結構
圖2:總體業(yè)務架構
面向服務的體系架構(SOA),是在分布式的環(huán)境中,將各種功能都以服務的形式提供給最終用戶或者其他服務,這些服務帶有定義明確的可調用接口,可以以定義好的順序調用這些服務來形成業(yè)務流程。SOA 是一種“抽象的、松散耦合的粒度軟件架構”,其核心理念是“重用”和“互操作”,它將資源整合成可操作的、基于標準的服務,使其能被重新組合和應用。SOA 的基本體系結構如圖1所示[3]。
ESB 全稱為Enterprise Service Bus,即企業(yè)服務總線。它是傳統(tǒng)中間件技術與XML、Web 服務等技術結合的產物,負責集成和智能化管理服務。應用程序通過調用ESB 向外暴露出來的服務接口獲得數據,這些接口是標準統(tǒng)一的,然而具體實現則對上層應用程序隱藏,ESB 負責消息傳輸、服務接入、協(xié)議轉換、數據格式轉換,在ESB 內部通過注冊、發(fā)現、調度服務實現數據集成[4]。ESB提供了網絡中最基本的連接中樞,是構筑企業(yè)神經系統(tǒng)的必要元素。ESB 的出現改變了傳統(tǒng)的軟件架構,可以提供比傳統(tǒng)中間件產品更為廉價的解決方案,同時它還可以消除不同應用之間的技術差異,讓不同的應用服務器協(xié)調運作,實現了不同服務之間的通信與整合。從功能上看,ESB 提供了事件驅動和文檔導向的處理模式,以及分布式的運行管理機制,它支持基于內容的路由和過濾,具備了復雜數據的傳輸能力,并可以提供一系列的標準接口。
本文集成系統(tǒng)平臺的實現中,通過Mule ESB 把消防業(yè)務系統(tǒng)集成起來,通過企業(yè)系統(tǒng)就可以利用Mule ESB 訪問各個子系統(tǒng),解決了傳統(tǒng)被動報警的局限性,極大地提高了處警速度,實現真正的“智慧”消防。
在開發(fā)真實系統(tǒng)之前,構造一個原型,在該原型的基礎上,逐漸完成整個系統(tǒng)的開發(fā)工作即快速原型模型,它是增量模型的另一種形式??焖僭湍P偷牡谝徊绞墙ㄔ煲粋€快速原型,實現客戶或未來的用戶與系統(tǒng)的交互,用戶或客戶對原型進行評價,進一步細化待開發(fā)軟件的需求。通過逐步調整原型使其滿足客戶的要求,開發(fā)人員可以確定客戶的真正需求是什么;第二步則在第一步的基礎上開發(fā)客戶滿意的軟件產品。
增量模型融合了瀑布模型的基本成分(重復應用)和原型實現的迭代特征,該模型采用隨著日程時間的進展而交錯的線性序列,每一個線性序列產生軟件的一個可發(fā)布的“增量”??蛻魧γ恳粋€增量的使用和評估都作為下一個增量發(fā)布的新特征和功能,這個過程在每一個增量發(fā)布后不斷重復,直到產生了最終的完善產品。增量模型強調每一個增量均發(fā)布一個可操作的產品。
所謂可插拔,意味著給系統(tǒng)添加新功能的時候(或者將原來功能的實現替換成新的實現而保持接口不變),不改變系統(tǒng)已有功能。這樣的可插拔的功能模塊被稱為插件。插件(plugin)的出現可以很好地支持系統(tǒng)的可擴展性(Extensibility),一個擴展性好的系統(tǒng)意味著很容易替換或者增加某些功能。本文的集成平臺實現可插拔的Web 服務,最大化的降低變化帶來的復雜性,具有強大的擴展能力,尤其針對像 “智慧消防”這樣的系統(tǒng),系統(tǒng)功能隨著城市發(fā)展在不斷變化,可插拔的Web 服務打破了傳統(tǒng)的對象復用技術、組件復用技術的靜態(tài)性,實現動態(tài)地增、刪業(yè)務功能,為程序維護帶來便利,用戶也具有良好體驗。
總體架構分為三個主要部分:軟件集成中心、數據集成中心、硬件集成中心。三個主要部分相輔相成,利用外圍中間件、基礎支持框架、數據中心,最終實現系統(tǒng)集成的目的,為智慧城市各子系統(tǒng)建設提供基礎保障。總體業(yè)務架構如圖2所示。
整個系統(tǒng)可劃分成數據集成中心、軟件集成中心、硬件集成中心、系統(tǒng)集成這幾部分。其中,數據集成中心主要負責數據的轉換、整合、處理等工作;軟件集成中心負責ESB 服務器的監(jiān)視和控制、權限數據的設置以及應用的構建和發(fā)布,所有權限控制和數據流轉由ESB 服務器實現;硬件集成中心負責集成物聯網數據,數據由ESB 應用中的服務流程接入;系統(tǒng)集成由應用中的服務流程完成。系統(tǒng)原理如圖3所示。
圖3:系統(tǒng)原理
圖4:部署圖
圖5:用戶組操作模塊結構
圖6:服務器管理模塊結構
圖7:構建數據集成器模塊結構
SIP 系統(tǒng)由以下部分組成:
(1)SIP 服務器/集群(多臺);
(2)SIP-CONSOLE 服務器(單一);
(3)數據庫(單一);
部署圖如圖4所示。
該集成系統(tǒng)平臺主要有以下幾個功能:平臺管理、ESB 服務器管理與監(jiān)控、應用管理、服務管理以及數據源管理。
平臺管理主要實現用戶及用戶組的增、刪、改、查功能。通過接口即用戶或者用戶組管理頁面,將所有參數、權限輸入到頁面上,頁面通過控制層,最終與用戶或用戶組業(yè)務層取得聯系,從而實現對數據庫的操作。以用戶組的操作為例,其模塊結構如圖5所示。
ESB 服務器管理包括兩大方面,第一,對服務器進行增加、展示、移除以及操作,控制某服務器是否加入集群。通過服務器管理頁面,用戶只需要對所有功能進行可視化操作,方便快捷,無需了解具體實現步驟,達到了很好地用戶體驗。第二,對服務器的監(jiān)控功能,該平臺實現了對服務器統(tǒng)一管理的功能,在服務器管理頁面上,可以獲得各個服務器的狀態(tài)信息、圖表項、服務器所在虛擬機各項狀態(tài)信息以及系統(tǒng)各項狀態(tài)信息。其模塊結構如圖6所示。
應用管理功能實現了軟件的集成管理,在應用包管理界面,實現對應用的發(fā)布、卸載、展示等功能。
服務管理功能通過參數和腳本、pattern lib 快速構建服務,提供服務報文的快捷轉換。還可以在服務管理頁面中展示接口,并控制該服務和服務中接口的啟動和停止。除此之外,還特別設計了服務安全管理,即對用戶的權限進行設定,當用戶滿足條件時,為用戶生成CA 證書并且下載證書包。
基于Mule 技術,簡化了不同數據源之間的數據交互。除此之外,該平臺還實現了數據抽取與預處理功能,在數據模型管理頁面上,將抽象的數據模型展示給用戶,或者進行新增、編輯、刪除、構建等操作。在數據集成器管理頁面,通過展示數據集成器,可以發(fā)現是否存在數據轉換腳本異常、數據來源連接異?;蛘呦到y(tǒng)運行異常等。下面以構建數據集成器為例,其模塊結構如圖7所示。
系統(tǒng)接口的實現將使平臺可以達到跨語言,跨硬件,跨網絡環(huán)境等特性,大大提高系統(tǒng)的可用性和擴展性。
本系統(tǒng)統(tǒng)一采用JSON 作為數據傳輸格式。它是一種輕量級的數據交換格式。JSON 采用完全獨立于語言的文本格式,但是也使用了類似于C 語言家族的習慣。這些特性使JSON 成為理想的數據交換語言。易于人閱讀和編寫,同時也易于機器解析和生成(網絡傳輸速度快)。
本系統(tǒng)使用CXF Webservice 開源框架,發(fā)布RESTful 風格的Webservice。REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。Web 應用程序最重要的 REST 原則是,客戶端和服務器之間的交互在請求之間是無狀態(tài)的。從客戶端到服務器的每個請求都必須包含理解請求所必需的信息。如果服務器在請求之間的任何時間點重啟,客戶端不會得到通知。此外,無狀態(tài)請求可以由任何可用服務器回答,這十分適合云計算之類的環(huán)境??蛻舳丝梢跃彺鏀祿愿倪M性能。
在服務器端,應用程序狀態(tài)和功能可以分為各種資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程序對象、數據庫記錄、算法等等。每個資源都使用 URI (Universal Resource Identifier) 得到一個唯一的地址。所有資源都共享統(tǒng)一的接口,以便在客戶端和服務器之間傳輸狀態(tài)。使用的是標準的 HTTP方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是應用程序狀態(tài)的引擎,資源表示通過超鏈接互聯。
Mule 開發(fā)用的是Anypoint Studio,它是一個功能強大、用戶界面友好的基于Eclipse 的開發(fā)工具。使用統(tǒng)一工具設計和實施 API,以圖形或 XML 形式構建、編輯、記錄和調試集成,簡化數據映射和轉換,完全支持從構建到部署的整個過程,使用預構建組件快速啟動集成。
groovy 是一種類似java 的語言,也是用eclipse 開發(fā),該平臺利用groovy 編寫,把數據轉接適配模板化,系統(tǒng)擴展時只需要針對具體數據結構創(chuàng)建新的javabean 并編寫新的groovy 文件,即可以擴展新的數據源。
下列是系統(tǒng)中用的groovy 模板之一。
import com.sip.transformer.util.BeanConvertor;
import com.sip.transformer.bean.DBParamForInsertion;
import org.mule.module.xml.transformer.XmlToObject;
import com.sip.di.datamodel.DataTable;
def XmlToObject=new XmlToObject();
XmlToObject.addAlias("DataTable",DataTable.class);
XmlToObject.getXStream().omitField(Object.class,"xs:schema")
XmlToObject.getXStream().autodetectAnnotations(true);
return XmlToObject.transformMessage(message,"utf-8");
在復雜系統(tǒng)平臺如智能消防系統(tǒng)的設計過程中,發(fā)布服務和注冊服務都是很重要的,通過把服務注冊到Mule ESB 中,隱藏了底層服務的實現細節(jié),上層應用只需調用Mule ESB 中暴露的接口就可以了。Mule ESB 負責協(xié)議轉換、數據格式轉換、服務路由等一系列繁瑣的事情。
通過使用Mule ESB 實現消防系統(tǒng)的系統(tǒng)集成,采用面向服務的架構,將易變的業(yè)務流程(業(yè)務)與相對穩(wěn)定的業(yè)務職能(服務)分開,通過服務將系統(tǒng)與業(yè)務系統(tǒng)之間進行解耦,同時也實現了業(yè)務系統(tǒng)之間形成松散結構,所以即便是未來消防業(yè)務的某些方面發(fā)生了變化,該平臺也能夠很好地適應,達到快速響應的目的。