赵国峰1) 李 鑫1) 李 丽1) 李永红2) 黄祖超1)
中国地震信息网速报信息实时同步设计与实现
赵国峰李 鑫李 丽李永红黄祖超
1)中国地震台网中心,北京 100045 2)山东省地震局,济南250014
结合中国地震信息网地震速报信息实时发布需求、速报信息源及接收方式,针对现同步系统存在的问题,提出了“双路接收、对比监控”的技术思路,并进行了功能设计与主要功能的实现。新系统不仅提升了网站速报信息服务的可靠性,而且将其与短信功能结合,能自动发现异常状况,便于及时处置故障。
中国地震信息网 EQIM 短信
中国地震信息网(CSI,即www.csi.ac.cn)是一个面向社会公众宣传地震科普和预防等知识的综合性行业网站,同时提供地震监测、震灾预防、地震应急及震后救灾等信息,并自动准实时发布国家台网测定的速报信息,是地震信息服务的重要窗口。2008年“5.12”汶川大地震时,因访问量突增,造成网站系统拥堵瘫痪。之后,公众对地震信息关注巨增,为了提升网站的抗点击能力,满足用户访问高并发的需求,对网站系统进行了升级和改版,同时研制了速报数据同步软件,解决了网站速报数据及时获取问题。但在系统运行中,因软件设计、设备和系统维护等原因导致地震速报数据多次同步失效,系统可靠性难以保障,且只能在被动发现问题后,人工发布地震速报信息,影响了网站速报信息服务质量。
本文通过对中国地震信息网速报数据的接收、同步策略分析,并结合近年来网站速报信息自动发布失效原因,提出了“双路接收、对比监控”的技术思路,并优化设计了同步软件,新增短信告警功能。一方面可以增强网站速报信息发布的可靠性,另一方面可以主动发现异常,及时处置故障,增强系统运维保障能力。
1.1 速报信息源及接收方式
中国地震信息网的速报数据源为地震速报信息共享服务系统EQIM(Earthquake Instant Message)。EQIM是地震系统内部速报信息快速通报、汇集与共享服务的软件系统(陈晓辉等,2009;杨陈等,2009),系统总体结构为树形结构,由根服务器和节点服务器构成,根服务器与节点服务器通过网络互连,通过上报和分发等实现各节点间信息的通报与共享。从EQIM中获取速报信息的方式(表1)有两种,即NetSeis/IP协议方式(陈志勇等,2009;刘胜国等,2012;叶春明等,2013)和数据库方式。中国地震信息网采用数据库方式获取EQIM中速报数据,即通过部署一个节点服务器,从国家台网根服务器中接收速报数据,然后准实时同步至网站系统中。
表1 获取EQIM速报数据方式
1.2 网站地震速报同步现状及问题
中国地震信息网的速报信息服务最初是直接访问国家地震科学数据共享中心网站(http://data.earthquake.cn/index.html)的数据库,在汶川地震时,因访问量过大,致使系统拥塞瘫痪。之后,公众对地震信息关注度剧增,直接访问数据库方式无法支撑用户访问需求,为应对大量用户高并发访问需求,中国地震台网中心对网站系统进行了改造,引入了网站CMS(Content Management System,即内容管理系统)和静态化引擎,网站的速报信息展现也由查询数据库动态方式转变为采用HTML静态页面发布(图1)。与此同时,研制了网站速报同步软件,将接收EQIM服务器的速报数据准实时地同步至网站系统中。
该同步软件以地震的发震时间为参考,使用了守护进程,每间隔一段时间(1—2s)对网站CMS库中最近一次地震与EQIM库中最近一次地震的发震时间进行比较,若早于,则EQIM中有新速报数据待同步,将数据同步至网站系统CMS库中。该系统在当时解决了网站速报信息源和获取时效性的问题,但在投入运行后,多次出现速报数据同步失效或丢数的异常或故障情况。其导致的原因主要包括同步策略缺陷、系统故障和系统维护,其中,因同步策略缺陷导致的异常占一半以上。同步策略缺陷在于采用地震的发震时间为同步判断条件,在以地震的发震时间作为同步判定依据时,因受台网密度、数据的传输等影响,国家台网测定不同地区的地震所需时间不同,在相续发生两个地震时,可能会出现先发生地震的测定时间迟于后发生地震的测定时间,造成先发生地震数据同步失效,即丢数。
此外,系统硬件或软件维护期间,速报数据接收服务会停止,期间转发的地震速报信息会丢失,无法同步至网站,且每次出现此类情况时,均是被动发现和处置故障。为改变这种情况,结合工作实际,本文提出了“双路接收,对比监控”的优化解决方案。
2.1 技术思路
部署2台同步服务器,同时接收EQIM的速报数据,准实时同步至网站CMS系统中,并对网站CMS系统中同步的速报数据进行监控;同步时每台同步服务器的应用携带唯一标识IP,用于区分不同的同步服务器;由于速报数据来源相同,因此每条速报数据记录的同步来源中,应包含2台同步服务器的应用标识IP,若只含一个同步标识时则说明存在异常(图2)。通过应包含和实际包含的标识的对比,可以确定异常同步服务器的标识,结合短信模板生成告警短信,并将短信推送至短信系统,实现对异常的同步应用的自动告警,为值班人员及时发现和处置故障提供帮助。
同步服务器上部署EQIM系统软件和速报数据同步比对监控软件。其中,EQIM系统软件用于接收并存储国家中心EQIM根服务器转发的速报数据;速报数据同步比对监控软件负责将EQIM接收到的数据准实时同步至网站CMS数据库,并监控网站CMS数据库中的数据同步状况,发现异常时,向值班人员发送告警短信。速报数据同步比对监控功能软件从功能上主要分为同步处理和对比监控两个功能模块。
2.2 同步处理功能模块
该模块负责将速报参数信息由同步服务器中EQIM系统数据库中catalog数据表中同步至网站CMS库中,速报信息发布由网站系统负责。为便于识别新增数据,在不影响EQIM软件运行的前提下,对EQIM的catalog表增加一个stat整数型字段,用于标识数据是否同步,其默认值为0,表示该记录数据为待同步状态,同步后由同步模块将其变为1(图3)。
该功能模块由守护进程进行调度管理,进程启动后,先检查系统是否有stat值为0记录。若无则进程进入休眠状态;若有则检查网站库中该记录是否存在(ID相同的记录)。若存在,则对网站库相同ID的数据记录进行更新,即将记录的来源标识信息中追加本机标识信息,同时来源量值加1;若不存在,则将新增数据记录,新增记录的来源标识信息设为本机IP,来源量为1。完成数据处理后将EQIM中对应记录的stat字段值变为1,之后进程进入休眠状态。休眠时间作为参数可灵活配置,根据同步时效要求,一般设置为1000—2000毫秒。
其部分代码如下:
//从EQIM库中获取待同步数据
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);
// 存在待同步的数据记录
for (int i = 0; i < newcatalist.size(); i++)
{ // 获取并逐条处理新记录
Map temp = (Map) newcatalist.get(i);
String cata_id = (String) temp.get("Cata_id");
// 从网站库中中获取相同ID(cata_id)的记录
String[] p1 = { cata_id };
List l = (List) WZ_CMS_DS.query (sql_checkCatalog InOracle, p1,
new MapListHandler());
if (l.size() == 1)
{
// 待同步数据已在网站库中存在,更新来源标识,其中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)
{ //网站库中不存在该记录,插入新记录
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 比对监控功能模块
该模块负责网站CMS中速报数据的同步状态监控,通过应到同步服务器标识与实到同步服务器标识的对比来确定异常,根据短信模板,将异常信息加工成短信,并推送至短信系统。其处理流程为:进程启动后,将获取网站库中的异常速报记录,异常记录的属性值为:count值小于2、IS_CHECK为0且SAVE_TIME早于当前系统前5分钟,即在5分钟中内该数据记录未被更新,5分钟可作参数配置。若异常记录数存在,则表示某一速报数据接收或同步存在异常,即某一路的数据未在规定的时间内到达,否则,表示正常,进程进入休眠状态。当存在异常时,处理异常数据记录,从应到的同步来源标识中剔除已到的来源标识(记录中的来源标识)后即为异常的标识,然后加工告警短信,即按照模板组合告警短信,并将短信推送至短信系统,最后更新网站库中该异常记录的状态值,将其由0变成1。完成后,进程进入休眠状态,休眠时间为参数,可灵活配置,建议监控间隔设置为2—3分钟(为120—180s)(图4)。
处理的部分代码如下:
//从网站库中获取异常记录信息
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(); //处理异常,并生成短信,并发送至MSG_DS //eqim_ips应到同步服务器的全部标识,剔除已到源标识后即为异常标识IP String noeqimips=removeString(eqim_ips.split(","),source_ip.split(":")); String msg="EQIM源告警:未收到EQIM["+noeqimips+"]"+"转发记录(id:"+cata_id+")"; //发送信息至短信网关数据库,有短信网关负责告警短信的发送 String[] param={phones,msg}; MSG_DS.update(sql_sendmsg, param); //更新网站库中数据记录的状态,由0便为1 result=WZ_CMS_DS.update(sql_updateCatalogCheckStatus,{cata_id}); } } “双路接收,对比监控”技术思路是针对中国地震信息网的速报信息同步的问题,不仅解决了原系统的BUG,又可确保在某一同步服务器系统或设备等出现故障时,网站速报信息服务正常。且在速报同步出现异常时,能自动向运维人员发送故障短信,便于及时处理故障,故障处置变被动为主动。本技术方案的前提是假设EQIM服务器和网站系统是健壮无故障的,且两路EQIM速报数据的获取不会同时中断,如若同时中断,则因无数据可对比导致功能将失效,实际工作中两路同时失效的概率可以忽略。此外,将该功能与网络和设备监控软件融合后,可以实现设备、服务和应用的全面监控管理。 陈晓辉、侯建民、刘瑞丰,2009.全国地震速报信息共享与服务系统.地震地磁观测与研究,30(3):132—135. 陈志勇,陈三三,张华等,2009.IRIS数据流的接收及在福建地震台网中的应用.大地测量与地球动力学,29(增刊):151—154. 刘胜国,高景春,2012.EQIMProcess2.3版技术原理与实现方法.华北地震科学,30(4):53—56. 杨陈,黄志斌等,2009.全国地震速报信息共享服务系统.地震地磁观测与研究,30(5):133—138. 叶春明,吴华灯,郭德顺,2013.嵌入式Linux系统下强震实时数据与地震流服务通信传输的实现.地震地磁观测与研究,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 地震科技星火计划“基于地震信息网的移动互联网服务(XH12059)”和中国地震台网中心青年基金“基于MemCache的地震速报数据动态展示应用研究(QNJJPZ-XXWL-1319)”联合资助 2013-11-23 赵国峰,男,生于1983年。工程师。主要从事地震信息网络技术系统运行管理和应用技术研究。E-mail: zhaogf@seis.ac.cn 赵国峰,李鑫,李丽,李永红,黄祖超,2014.中国地震信息网速报信息实时同步设计与实现. 震灾防御技术,9(2):310—316.3 结论