趙國峰1) 李 鑫1) 李 麗1) 李永紅2) 黃祖超1)
?
中國地震信息網(wǎng)速報信息實時同步設計與實現(xiàn)
趙國峰李 鑫李 麗李永紅黃祖超
1)中國地震臺網(wǎng)中心,北京 100045 2)山東省地震局,濟南250014
結(jié)合中國地震信息網(wǎng)地震速報信息實時發(fā)布需求、速報信息源及接收方式,針對現(xiàn)同步系統(tǒng)存在的問題,提出了“雙路接收、對比監(jiān)控”的技術(shù)思路,并進行了功能設計與主要功能的實現(xiàn)。新系統(tǒng)不僅提升了網(wǎng)站速報信息服務的可靠性,而且將其與短信功能結(jié)合,能自動發(fā)現(xiàn)異常狀況,便于及時處置故障。
中國地震信息網(wǎng) EQIM 短信
中國地震信息網(wǎng)(CSI,即www.csi.ac.cn)是一個面向社會公眾宣傳地震科普和預防等知識的綜合性行業(yè)網(wǎng)站,同時提供地震監(jiān)測、震災預防、地震應急及震后救災等信息,并自動準實時發(fā)布國家臺網(wǎng)測定的速報信息,是地震信息服務的重要窗口。2008年“5.12”汶川大地震時,因訪問量突增,造成網(wǎng)站系統(tǒng)擁堵癱瘓。之后,公眾對地震信息關(guān)注巨增,為了提升網(wǎng)站的抗點擊能力,滿足用戶訪問高并發(fā)的需求,對網(wǎng)站系統(tǒng)進行了升級和改版,同時研制了速報數(shù)據(jù)同步軟件,解決了網(wǎng)站速報數(shù)據(jù)及時獲取問題。但在系統(tǒng)運行中,因軟件設計、設備和系統(tǒng)維護等原因?qū)е碌卣鹚賵髷?shù)據(jù)多次同步失效,系統(tǒng)可靠性難以保障,且只能在被動發(fā)現(xiàn)問題后,人工發(fā)布地震速報信息,影響了網(wǎng)站速報信息服務質(zhì)量。
本文通過對中國地震信息網(wǎng)速報數(shù)據(jù)的接收、同步策略分析,并結(jié)合近年來網(wǎng)站速報信息自動發(fā)布失效原因,提出了“雙路接收、對比監(jiān)控”的技術(shù)思路,并優(yōu)化設計了同步軟件,新增短信告警功能。一方面可以增強網(wǎng)站速報信息發(fā)布的可靠性,另一方面可以主動發(fā)現(xiàn)異常,及時處置故障,增強系統(tǒng)運維保障能力。
1.1 速報信息源及接收方式
中國地震信息網(wǎng)的速報數(shù)據(jù)源為地震速報信息共享服務系統(tǒng)EQIM(Earthquake Instant Message)。EQIM是地震系統(tǒng)內(nèi)部速報信息快速通報、匯集與共享服務的軟件系統(tǒng)(陳曉輝等,2009;楊陳等,2009),系統(tǒng)總體結(jié)構(gòu)為樹形結(jié)構(gòu),由根服務器和節(jié)點服務器構(gòu)成,根服務器與節(jié)點服務器通過網(wǎng)絡互連,通過上報和分發(fā)等實現(xiàn)各節(jié)點間信息的通報與共享。從EQIM中獲取速報信息的方式(表1)有兩種,即NetSeis/IP協(xié)議方式(陳志勇等,2009;劉勝國等,2012;葉春明等,2013)和數(shù)據(jù)庫方式。中國地震信息網(wǎng)采用數(shù)據(jù)庫方式獲取EQIM中速報數(shù)據(jù),即通過部署一個節(jié)點服務器,從國家臺網(wǎng)根服務器中接收速報數(shù)據(jù),然后準實時同步至網(wǎng)站系統(tǒng)中。
表1 獲取EQIM速報數(shù)據(jù)方式
1.2 網(wǎng)站地震速報同步現(xiàn)狀及問題
中國地震信息網(wǎng)的速報信息服務最初是直接訪問國家地震科學數(shù)據(jù)共享中心網(wǎng)站(http://data.earthquake.cn/index.html)的數(shù)據(jù)庫,在汶川地震時,因訪問量過大,致使系統(tǒng)擁塞癱瘓。之后,公眾對地震信息關(guān)注度劇增,直接訪問數(shù)據(jù)庫方式無法支撐用戶訪問需求,為應對大量用戶高并發(fā)訪問需求,中國地震臺網(wǎng)中心對網(wǎng)站系統(tǒng)進行了改造,引入了網(wǎng)站CMS(Content Management System,即內(nèi)容管理系統(tǒng))和靜態(tài)化引擎,網(wǎng)站的速報信息展現(xiàn)也由查詢數(shù)據(jù)庫動態(tài)方式轉(zhuǎn)變?yōu)椴捎肏TML靜態(tài)頁面發(fā)布(圖1)。與此同時,研制了網(wǎng)站速報同步軟件,將接收EQIM服務器的速報數(shù)據(jù)準實時地同步至網(wǎng)站系統(tǒng)中。
該同步軟件以地震的發(fā)震時間為參考,使用了守護進程,每間隔一段時間(1—2s)對網(wǎng)站CMS庫中最近一次地震與EQIM庫中最近一次地震的發(fā)震時間進行比較,若早于,則EQIM中有新速報數(shù)據(jù)待同步,將數(shù)據(jù)同步至網(wǎng)站系統(tǒng)CMS庫中。該系統(tǒng)在當時解決了網(wǎng)站速報信息源和獲取時效性的問題,但在投入運行后,多次出現(xiàn)速報數(shù)據(jù)同步失效或丟數(shù)的異?;蚬收锨闆r。其導致的原因主要包括同步策略缺陷、系統(tǒng)故障和系統(tǒng)維護,其中,因同步策略缺陷導致的異常占一半以上。同步策略缺陷在于采用地震的發(fā)震時間為同步判斷條件,在以地震的發(fā)震時間作為同步判定依據(jù)時,因受臺網(wǎng)密度、數(shù)據(jù)的傳輸?shù)扔绊?,國家臺網(wǎng)測定不同地區(qū)的地震所需時間不同,在相續(xù)發(fā)生兩個地震時,可能會出現(xiàn)先發(fā)生地震的測定時間遲于后發(fā)生地震的測定時間,造成先發(fā)生地震數(shù)據(jù)同步失效,即丟數(shù)。
此外,系統(tǒng)硬件或軟件維護期間,速報數(shù)據(jù)接收服務會停止,期間轉(zhuǎn)發(fā)的地震速報信息會丟失,無法同步至網(wǎng)站,且每次出現(xiàn)此類情況時,均是被動發(fā)現(xiàn)和處置故障。為改變這種情況,結(jié)合工作實際,本文提出了“雙路接收,對比監(jiān)控”的優(yōu)化解決方案。
2.1 技術(shù)思路
部署2臺同步服務器,同時接收EQIM的速報數(shù)據(jù),準實時同步至網(wǎng)站CMS系統(tǒng)中,并對網(wǎng)站CMS系統(tǒng)中同步的速報數(shù)據(jù)進行監(jiān)控;同步時每臺同步服務器的應用攜帶唯一標識IP,用于區(qū)分不同的同步服務器;由于速報數(shù)據(jù)來源相同,因此每條速報數(shù)據(jù)記錄的同步來源中,應包含2臺同步服務器的應用標識IP,若只含一個同步標識時則說明存在異常(圖2)。通過應包含和實際包含的標識的對比,可以確定異常同步服務器的標識,結(jié)合短信模板生成告警短信,并將短信推送至短信系統(tǒng),實現(xiàn)對異常的同步應用的自動告警,為值班人員及時發(fā)現(xiàn)和處置故障提供幫助。
同步服務器上部署EQIM系統(tǒng)軟件和速報數(shù)據(jù)同步比對監(jiān)控軟件。其中,EQIM系統(tǒng)軟件用于接收并存儲國家中心EQIM根服務器轉(zhuǎn)發(fā)的速報數(shù)據(jù);速報數(shù)據(jù)同步比對監(jiān)控軟件負責將EQIM接收到的數(shù)據(jù)準實時同步至網(wǎng)站CMS數(shù)據(jù)庫,并監(jiān)控網(wǎng)站CMS數(shù)據(jù)庫中的數(shù)據(jù)同步狀況,發(fā)現(xiàn)異常時,向值班人員發(fā)送告警短信。速報數(shù)據(jù)同步比對監(jiān)控功能軟件從功能上主要分為同步處理和對比監(jiān)控兩個功能模塊。
2.2 同步處理功能模塊
該模塊負責將速報參數(shù)信息由同步服務器中EQIM系統(tǒng)數(shù)據(jù)庫中catalog數(shù)據(jù)表中同步至網(wǎng)站CMS庫中,速報信息發(fā)布由網(wǎng)站系統(tǒng)負責。為便于識別新增數(shù)據(jù),在不影響EQIM軟件運行的前提下,對EQIM的catalog表增加一個stat整數(shù)型字段,用于標識數(shù)據(jù)是否同步,其默認值為0,表示該記錄數(shù)據(jù)為待同步狀態(tài),同步后由同步模塊將其變?yōu)?(圖3)。
該功能模塊由守護進程進行調(diào)度管理,進程啟動后,先檢查系統(tǒng)是否有stat值為0記錄。若無則進程進入休眠狀態(tài);若有則檢查網(wǎng)站庫中該記錄是否存在(ID相同的記錄)。若存在,則對網(wǎng)站庫相同ID的數(shù)據(jù)記錄進行更新,即將記錄的來源標識信息中追加本機標識信息,同時來源量值加1;若不存在,則將新增數(shù)據(jù)記錄,新增記錄的來源標識信息設為本機IP,來源量為1。完成數(shù)據(jù)處理后將EQIM中對應記錄的stat字段值變?yōu)?,之后進程進入休眠狀態(tài)。休眠時間作為參數(shù)可靈活配置,根據(jù)同步時效要求,一般設置為1000—2000毫秒。
其部分代碼如下:
//從EQIM庫中獲取待同步數(shù)據(jù)
List newcatalist = (List) EQIM_DS.query(sql_getNewCata, null,new MapListHandler());
if (newcatalist.size() > 0)
{
QueryRunner WZ_CMS_DS= new QueryRunner();
WZ_CMS_DS.setDataSource(oracleds);
// 存在待同步的數(shù)據(jù)記錄
for (int i = 0; i < newcatalist.size(); i++)
{ // 獲取并逐條處理新記錄
Map temp = (Map) newcatalist.get(i);
String cata_id = (String) temp.get("Cata_id");
// 從網(wǎng)站庫中中獲取相同ID(cata_id)的記錄
String[] p1 = { cata_id };
List l = (List) WZ_CMS_DS.query (sql_checkCatalog InOracle, p1,
new MapListHandler());
if (l.size() == 1)
{
// 待同步數(shù)據(jù)已在網(wǎng)站庫中存在,更新來源標識,其中eqim_ip為本機IP
String[] param1 = { (String) ((Map) l.get(0)).get("SOURCE_IP")+":" +eqim_ip, cata_id };
WZ_CMS_DS.update(sql_updateNewCata2oracle, param1);
}
if (l.size() == 0)
{ //網(wǎng)站庫中不存在該記錄,插入新記錄
String[] params = {
cata_id, eqim_ip,
(String) temp.get("Operator"),
((Double) temp.get("Lat")).toString(),
((Double) temp.get("Lon")).toString(),
((Double) temp.get("Depth")).toString(),
((Double) temp.get("M")).toString(),
(String) temp.get("location_cname"),
((Timestamp) temp.get("O_time")).toString() };
WZ_CMS_DS.update(sql_insertNewCata2oracle, params);
}
EQIM_DS.update(sql_updateCataStatus,{cata_id});
}
}
2.3 比對監(jiān)控功能模塊
該模塊負責網(wǎng)站CMS中速報數(shù)據(jù)的同步狀態(tài)監(jiān)控,通過應到同步服務器標識與實到同步服務器標識的對比來確定異常,根據(jù)短信模板,將異常信息加工成短信,并推送至短信系統(tǒng)。其處理流程為:進程啟動后,將獲取網(wǎng)站庫中的異常速報記錄,異常記錄的屬性值為:count值小于2、IS_CHECK為0且SAVE_TIME早于當前系統(tǒng)前5分鐘,即在5分鐘中內(nèi)該數(shù)據(jù)記錄未被更新,5分鐘可作參數(shù)配置。若異常記錄數(shù)存在,則表示某一速報數(shù)據(jù)接收或同步存在異常,即某一路的數(shù)據(jù)未在規(guī)定的時間內(nèi)到達,否則,表示正常,進程進入休眠狀態(tài)。當存在異常時,處理異常數(shù)據(jù)記錄,從應到的同步來源標識中剔除已到的來源標識(記錄中的來源標識)后即為異常的標識,然后加工告警短信,即按照模板組合告警短信,并將短信推送至短信系統(tǒng),最后更新網(wǎng)站庫中該異常記錄的狀態(tài)值,將其由0變成1。完成后,進程進入休眠狀態(tài),休眠時間為參數(shù),可靈活配置,建議監(jiān)控間隔設置為2—3分鐘(為120—180s)(圖4)。
處理的部分代碼如下:
//從網(wǎng)站庫中獲取異常記錄信息
List newcatalist=(List) WZ_CMS_DS.query(sql_getNewCatalogNoCheck, para,new MapListHandler());
if(newcatalist.size()>0){
for(int i=0;i { //逐條處理告警記錄 Map temp=(Map)newcatalist.get(i); // 取記錄ID, 同步服務器標識SOURCE_IP, 同步量rcd_count String cata_id=(String)temp.get("Cata_id"); String source_ip=(String)temp.get("SOURCE_IP"); int rcd_count=((BigDecimal)temp.get("COUNT")).intValue(); //處理異常,并生成短信,并發(fā)送至MSG_DS //eqim_ips應到同步服務器的全部標識,剔除已到源標識后即為異常標識IP String noeqimips=removeString(eqim_ips.split(","),source_ip.split(":")); String msg="EQIM源告警:未收到EQIM["+noeqimips+"]"+"轉(zhuǎn)發(fā)記錄(id:"+cata_id+")"; //發(fā)送信息至短信網(wǎng)關(guān)數(shù)據(jù)庫,有短信網(wǎng)關(guān)負責告警短信的發(fā)送 String[] param={phones,msg}; MSG_DS.update(sql_sendmsg, param); //更新網(wǎng)站庫中數(shù)據(jù)記錄的狀態(tài),由0便為1 result=WZ_CMS_DS.update(sql_updateCatalogCheckStatus,{cata_id}); } } “雙路接收,對比監(jiān)控”技術(shù)思路是針對中國地震信息網(wǎng)的速報信息同步的問題,不僅解決了原系統(tǒng)的BUG,又可確保在某一同步服務器系統(tǒng)或設備等出現(xiàn)故障時,網(wǎng)站速報信息服務正常。且在速報同步出現(xiàn)異常時,能自動向運維人員發(fā)送故障短信,便于及時處理故障,故障處置變被動為主動。本技術(shù)方案的前提是假設EQIM服務器和網(wǎng)站系統(tǒng)是健壯無故障的,且兩路EQIM速報數(shù)據(jù)的獲取不會同時中斷,如若同時中斷,則因無數(shù)據(jù)可對比導致功能將失效,實際工作中兩路同時失效的概率可以忽略。此外,將該功能與網(wǎng)絡和設備監(jiān)控軟件融合后,可以實現(xiàn)設備、服務和應用的全面監(jiān)控管理。 陳曉輝、侯建民、劉瑞豐,2009.全國地震速報信息共享與服務系統(tǒng).地震地磁觀測與研究,30(3):132—135. 陳志勇,陳三三,張華等,2009.IRIS數(shù)據(jù)流的接收及在福建地震臺網(wǎng)中的應用.大地測量與地球動力學,29(增刊):151—154. 劉勝國,高景春,2012.EQIMProcess2.3版技術(shù)原理與實現(xiàn)方法.華北地震科學,30(4):53—56. 楊陳,黃志斌等,2009.全國地震速報信息共享服務系統(tǒng).地震地磁觀測與研究,30(5):133—138. 葉春明,吳華燈,郭德順,2013.嵌入式Linux系統(tǒng)下強震實時數(shù)據(jù)與地震流服務通信傳輸?shù)膶崿F(xiàn).地震地磁觀測與研究,34(3/4):151—154. Design and Implementation of the Earthquake Quick-reporting Message Synchronizing System for China Seismic Information Website Zhao Guofeng, Li Xin, Li Li, Li Yonghong, Huang Zuchao 1)China Earthquake Networks Center, Beijing 100045, Beijing, China; 2)Earthquake Administration of Shandong province, Jinan 250014, Shandong, China Combined with the release of Earthquake Quick-reporting Message for China Seismic Information Website, the source and receiving modes of EQ messages and the problems of the system are discussed in this paper. A new technical scheme, by comparing the data from different receivers, is proposed. The upgrade system is designed and developed, which not only improves the reliability of the website, but is effective in raising working efficiency and saving the time for people on duty. China Seismic Information website; EQIM; Message 地震科技星火計劃“基于地震信息網(wǎng)的移動互聯(lián)網(wǎng)服務(XH12059)”和中國地震臺網(wǎng)中心青年基金“基于MemCache的地震速報數(shù)據(jù)動態(tài)展示應用研究(QNJJPZ-XXWL-1319)”聯(lián)合資助 2013-11-23 趙國峰,男,生于1983年。工程師。主要從事地震信息網(wǎng)絡技術(shù)系統(tǒng)運行管理和應用技術(shù)研究。E-mail: zhaogf@seis.ac.cn 趙國峰,李鑫,李麗,李永紅,黃祖超,2014.中國地震信息網(wǎng)速報信息實時同步設計與實現(xiàn). 震災防御技術(shù),9(2):310—316.3 結(jié)論