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