周施文,鄭 超,程 志
(福建省地震局,福州 350003)
我國是世界上地震災(zāi)害最為嚴重的國家之一。隨著移動通信和智能手機的普及和全民防震減災(zāi)意識的提高,國內(nèi)手機應(yīng)用市場上出現(xiàn)了相應(yīng)的地震信息類應(yīng)用。此類應(yīng)用絕大多數(shù)以提供地震三要素(震時、震中、震級)信息為主,官方應(yīng)用以中國地震臺網(wǎng)的 “地震速報”為代表,第三方應(yīng)用以成都高新減災(zāi)研究所的 “地震預(yù)警”為代表。在應(yīng)用介紹里提到具有地震預(yù)警功能的國內(nèi)手機應(yīng)用,僅有成都高新減災(zāi)研究所的 “地震預(yù)警”應(yīng)用,但是該應(yīng)用的地震預(yù)警數(shù)據(jù)來源是基于較為簡易的地震監(jiān)測儀器和該所自主研發(fā)的地震監(jiān)測系統(tǒng),誤報風(fēng)險較大,并不具備官方權(quán)威性;而在日本,地震預(yù)警信息只有政府授權(quán)的組織和部門,如日本氣象廳,才可發(fā)布地震預(yù)警信息。因此,研發(fā)一個基于官方地震數(shù)據(jù)來源、具備官方權(quán)威性的手機地震預(yù)警應(yīng)用已不僅僅是市場所需,更是地震系統(tǒng)為大眾提供地震預(yù)警服務(wù)的當(dāng)務(wù)之急[1-2]。
實現(xiàn)手機地震預(yù)警應(yīng)用需要采用高效、可靠、低耗的消息傳輸機制。目前主流的面向消息中間件協(xié)議有Java消息服務(wù)(JMS)、高級消息隊列協(xié)議(AMQP)、流文本定向消息協(xié)議(STOMP)、可擴展通訊和表示協(xié)議(XMPP)、消息隊列遙測傳輸(MQTT)等。基于上述各協(xié)議的中間件產(chǎn)品 (如Apache Qpid、ActiveMQ、RabbitMQ等)均能提供高效、可靠的消息傳輸服務(wù)。因此,各協(xié)議的功耗差別成為了本文選擇的重要依據(jù)。經(jīng)調(diào)研,MQTT協(xié)議 “體積”小、功能 “專一”,成為市面上手機APP的主要選擇,代表應(yīng)用為Facebook Messenger App。因此,MQTT協(xié)議成為本文搭建手機預(yù)警應(yīng)用的選擇。另一方面,目前主流的手機操作系統(tǒng)有安卓、蘋果、微軟和黑莓等。據(jù)統(tǒng)計,截至2015年,全球安卓操作系統(tǒng)份額達81%;2015年度中國手機市場上,搭載安卓系統(tǒng)的手機獲得82.02%的關(guān)注比例,占據(jù)絕對主流。
基于上述兩點,本文以安卓系統(tǒng)為目標,首先簡略介紹MQTT相關(guān)資料,然后詳細介紹基于MQTT協(xié)議開發(fā)安卓手機地震預(yù)警應(yīng)用,并給出相關(guān)的測試評估結(jié)果。
MQTT協(xié)議全稱是消息隊列遙測傳輸協(xié)議(Message Queuing Telemetry Transport), 由 IBM 公司主導(dǎo)開發(fā),提供開源的實現(xiàn)。MQTT協(xié)議是面向消息中間件(Message-Oriented Middleware,MOM)的一種協(xié)議。MOM是一種異步、無阻塞、基于消息的通信技術(shù),能夠屏蔽操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議的差異,具有良好的可靠性和靈活性,特別適用于邏輯關(guān)系松散的分布式環(huán)境[3?;诖?,MQTT協(xié)議具有以下幾點特性:
(1)采用發(fā)布-訂閱消息通信協(xié)議,提供一對多的消息發(fā)布模式。
(2)基于TCP/IP協(xié)議,提供3種消息服務(wù)質(zhì)量 (Quality of Service, QoS):
①At Most Once,用0標識,消息最多被傳遞一次;在基于TCP/IP協(xié)議的網(wǎng)絡(luò)中,消息可能會丟失或重復(fù)。
②At Least Once,用1標識,確保消息到達,但可能會重復(fù)傳遞消息。
③Once and Exactly Once,用2標識,消息保證傳遞且僅有一次傳遞。
(3)開銷小,固定長度的消息頭部是2字節(jié),利于大數(shù)據(jù)并發(fā)時節(jié)省數(shù)據(jù)流量。
(4)支持處理客戶端和服務(wù)器之間的連接丟失,如果客戶端意外掉線,可使用 “遺愿和遺囑”(Last Will和 Testament特性) 向服務(wù)器發(fā)布一條消息。
(5)支持絕大多數(shù)平臺和編程語言,實現(xiàn)程序松耦合。
(6)易于實現(xiàn),語法采用簡單的動詞集合,如connect、subscribe等。
MQTT協(xié)議的基礎(chǔ)模型中定義了3種角色:消息發(fā)布者Publisher、消息代理Broker和消息訂閱者Subscriber,如圖1所示。其中,消息代理即為消息代理服務(wù)端,負責(zé)管理消息發(fā)布者的注冊和主題登記、消息訂閱者的注冊和主題訂閱、消息的存儲和轉(zhuǎn)發(fā)。消息訂閱者和消息發(fā)布者的角色可以根據(jù)場景的不同而互相轉(zhuǎn)換。比如說,一個消息發(fā)布者可以同時向消息代理訂閱主題并接收消息推送,從而成為消息訂閱者,反之亦然。
MQTT協(xié)議屏蔽了具體的消息內(nèi)容,以主題(Topic)為標識對發(fā)布的數(shù)據(jù)進行轉(zhuǎn)發(fā)。發(fā)布者可以通過向不同主題發(fā)布不同的信息,提高信息發(fā)布的效率;訂閱者可根據(jù)需要訂閱相關(guān)的主題,減少冗余信息,提高信息的利用率。
圖1 MQTT協(xié)議原理基礎(chǔ)模型Fig.1 The fundamental model of MQTT
實現(xiàn)MQTT v3.1.1協(xié)議功能的消息代理軟件有很多,其中開源的以Mosquitto、EMQTT(Erlang MQTT Broker)、VerneMQ為代表,閉源的以IBM公司的Websphere MQ和MessageSight為代表。其中,EMQTT和MessageSight突出了高并發(fā)功能,可支持百萬級連接和消息并發(fā)。本文選擇IBM MessageSight(虛擬機版)作為消息代理服務(wù)器,原因有3點:第一,便于安裝,在虛擬機上導(dǎo)入MessageSight程序后配置,即可開始使用;第二,便于操作,MessageSight除了支持命令行配置之外,還帶有可視化管理界面;第三,可以得到IBM的專業(yè)技術(shù)支持。
數(shù)據(jù)處理服務(wù)器接收到地震數(shù)據(jù)源發(fā)送的地震信息數(shù)據(jù)后,根據(jù)不同的信息,生成符合預(yù)定格式的地震預(yù)警數(shù)據(jù)和地震速報數(shù)據(jù),通過不同的主題發(fā)送至消息代理服務(wù)器。安卓手機地震預(yù)警應(yīng)用(以下簡稱預(yù)警應(yīng)用)在連接MessageSight的時候會訂閱相關(guān)主題,MessageSight會記錄此信息,當(dāng)接收到數(shù)據(jù)處理服務(wù)器發(fā)送的數(shù)據(jù)時,即時按主題推送至預(yù)警應(yīng)用(圖2)。預(yù)警應(yīng)用根據(jù)接收到的數(shù)據(jù)和其所在的主題進行相關(guān)操作。本文的重點在實現(xiàn)預(yù)警應(yīng)用與MessageSight的連接、主題訂閱、消息接收和響應(yīng)。
圖2 地震數(shù)據(jù)流示意圖Fig.2 The earthquake dataflow diagram
本文使用 “eewdata”和 “eqrdata”主題分別推送/接收地震預(yù)警數(shù)據(jù)和地震速報數(shù)據(jù)。兩個主題的數(shù)據(jù)格式均采用JSON數(shù)據(jù)格式。地震預(yù)警數(shù)據(jù)包括發(fā)震時刻、震中經(jīng)度、震中緯度、震中地名、震級和消息發(fā)送時刻等信息;地震速報數(shù)據(jù)包括自動/人工速報標識、震中地名、震中經(jīng)度、震中緯度、震級、震源深度和發(fā)震時刻等信息。
2.3.1 預(yù)警時間計算方法
本文采用的預(yù)警時間計算方法如圖3所示。
設(shè)tw為用戶所在位置的預(yù)警時間,TS為S波到達用戶所在位置的時刻,T2為預(yù)警應(yīng)用接收到預(yù)警數(shù)據(jù)的時刻(由預(yù)警應(yīng)用即時獲取),Tθ為地震發(fā)生時刻(由預(yù)警數(shù)據(jù)提供),Distance為用戶所在位置到震中的距離(用戶所在位置信息由預(yù)警應(yīng)用獲取,震中位置由預(yù)警數(shù)據(jù)提供,根據(jù)球面兩點間距公式計算得出),VS為S波傳播速度 (3.55 km/s)。假設(shè)服務(wù)器時間與終端系統(tǒng)時間均與因特網(wǎng)時間同步,預(yù)警時間計算公式如下所示:
2.3.2 用戶所在地預(yù)估烈度計算方法
本文所使用的預(yù)估烈度計算方法如(2)所示。設(shè)m為震級(由預(yù)警數(shù)據(jù)提供),Intensity為用戶所在地預(yù)估烈度。
安卓手機地震預(yù)警應(yīng)用模塊包括核心功能模塊和輔助模塊,核心功能模塊包括連接模塊、數(shù)據(jù)接收處理模塊、信息展示模塊;輔助模塊包括數(shù)據(jù)庫模塊、定位模塊、應(yīng)用參數(shù)設(shè)置模塊、地圖模塊、科普模塊。本文主要介紹核心功能模塊。
2.4.1 連接模塊
預(yù)警應(yīng)用通過MQTT協(xié)議連接MessageSight服務(wù)器,并訂閱eewdata和eqrdata兩個主題。應(yīng)用安卓Service類在后臺維持預(yù)警應(yīng)用與MessageSight服務(wù)器的連接,包括斷線重連等。
2.4.2 數(shù)據(jù)接收處理模塊
當(dāng)接收到MessageSight推送的數(shù)據(jù)包時,數(shù)據(jù)接收處理模塊先提取主題名字,再從數(shù)據(jù)中提取各個參數(shù)值,生成可讀性文本,對于地震預(yù)警,還需要計算用戶所在地到震中的距離、預(yù)警時間和預(yù)估烈度,再激活相應(yīng)的信息展示模塊。
2.4.3 信息展示模塊
信息展示模塊有文本展示和地圖展示,主要介紹文本展示部分。當(dāng)接收到eewdata主題的信息時,將激活預(yù)警框。預(yù)警框中包含的信息有避震建議、預(yù)警倒計時、地震三要素、用戶所在地預(yù)估烈度和與震中的距離,如圖4所示;接收到eqrdata主題的信息時,將彈出速報通知。速報通知包含的信息有地震三要素、震中經(jīng)緯度和震源深度,如圖5所示。
每一條接收到的信息將以列表的形式展示,用戶進入程序后可瀏覽信息。預(yù)警歷史記錄包含的信息有地震三要素、預(yù)警數(shù)據(jù)推送時刻和預(yù)警應(yīng)用接收時刻,如圖6所示。地震速報記錄包含的信息有地震三要素、人工/自動速報標簽、震源深度,如圖7所示 (“[測試]”標簽表示該條信息是測試數(shù)據(jù)。)
圖3 預(yù)警時間計算示意圖Fig.3 The schematic diagram of EEW time calculation
圖4 預(yù)警框示例Fig.4 EEW alert example
圖5 速報通知示例Fig.5 EQR notification example
圖6 預(yù)警列表Fig.6 EEW list
圖7 速報列表Fig.7 EQR list
3.1.1 測試服務(wù)器
測試服務(wù)器的操作系統(tǒng)是Windows Server 2008 R2 Enterprise x64,MessageSight所在虛擬機分配內(nèi)存4GB。
3.1.2 測試用安卓真機
本文使用華為P6-T00(移動版)進行真機測試。該手機的基本參數(shù)是:安卓版本4.4.2,系統(tǒng)版本號Emotion系統(tǒng) 2.0,RAM 2.0GB,四核 1.5 GHz處理器。
3.1.3 測試用電腦
本文使用聯(lián)想T440模擬批量客戶端測試。該電腦的基本參數(shù)是:Intel Core i5-4200U@1.6GHz,RAM 4.00GB,Windows 7專業(yè)版 SP1 x 64。
(1)將安卓程序封裝成安裝程序(.apk文件),在華為手機上安裝運行。
(2)聯(lián)想T440模擬99個預(yù)警信息接收客戶端。
(3)內(nèi)網(wǎng)測試:100個客戶端通過局域網(wǎng)同時連接上處在同一網(wǎng)絡(luò)的MessageSight,發(fā)送端測試程序向MessageSight發(fā)布一條預(yù)警信息,分別在MessageSight連接負載數(shù)為1 000、2 000、3 000、4 000、5 000個的情況下,統(tǒng)計100個客戶端接收到預(yù)警信息的時刻,計算與發(fā)送時刻之間的時間差(即耗時)并分析。
(4)外網(wǎng)測試:100個客戶端通過因特網(wǎng)同時連接上MessageSight,發(fā)送端測試程序向MessageSight發(fā)布一條預(yù)警信息,分別在MessageSight連接負載數(shù)為1 000、2 000、3 000、4 000、5 000個的情況下,統(tǒng)計100個客戶端接收到預(yù)警信息的時刻,計算與發(fā)送時刻之間的時間差(耗時)并分析。
(5)測試結(jié)果:內(nèi)網(wǎng)、外網(wǎng)測試結(jié)果分別如圖8、圖9所示。基于此次測試,可以得出以下結(jié)論:
①在兩種網(wǎng)絡(luò)環(huán)境下,平均耗時均隨著服務(wù)器連接負載量的增多而增高,但均不超過0.5 s。
②在內(nèi)網(wǎng)環(huán)境下,數(shù)據(jù)接收耗時受服務(wù)器連接負載量影響大;在外網(wǎng)環(huán)境下,數(shù)據(jù)接收耗時受網(wǎng)絡(luò)傳輸影響大。
本文基于MQTT協(xié)議研發(fā)了安卓手機地震預(yù)警應(yīng)用。該應(yīng)用可實時接收消息代理服務(wù)器(IBM MessageSight)推送的地震預(yù)警數(shù)據(jù)和地震速報數(shù)據(jù)并進行相應(yīng)的操作。模擬測試結(jié)果顯示在網(wǎng)絡(luò)較為穩(wěn)定的情況下,接收服務(wù)器推送數(shù)據(jù)的平均耗時在0.5 s以內(nèi),可以滿足地震預(yù)警對時效性的要求。MQTT協(xié)議提供的輕量級信息傳遞、低能耗也可以滿足手機應(yīng)用在數(shù)據(jù)流量、電池續(xù)航等方面的要求。
由于硬件條件的限制,本文無法實現(xiàn)更大樣本數(shù)量的評估測試,將在后續(xù)的研究工作中進行更全面的評估測試和程序優(yōu)化。
圖8 內(nèi)網(wǎng)測試結(jié)果Fig.8 Intranet experiment results
圖9 外網(wǎng)測試結(jié)果Fig.9 External experiment results
參考文獻:
[1]王 挺,陳修吾,葉佳寧.基于自動地震速報的地震應(yīng)急基礎(chǔ)信息快速提取模塊的研究與實現(xiàn)[J].華南地震,2016,36(1):16-23.
[2]黃文輝,沈玉松,呂作勇,等.地震超快速報系統(tǒng)試運行結(jié)果評估[J].華南地震,2016,36(4):1-7.
[3]徐晶,許煒.消息中間件綜述 [J].計算機工程,2005,31(16):73-76.