赵国峰 李丽 马秀丹
中国地震台网中心,北京 100045
震后(尤其是大震后)向地震应急人员及时提供地震速报和震情信息等,是震后开展地震应急工作的基础。手机短信因其快捷、经济等特点,仍然是地震部门信息服务的主要手段之一(廖诗荣等,2004;缪发军等,2009;朱凤梅等,2015)。12322是防震减灾公益服务平台,于2009年开通,2012年12322地震速报短信息服务系统(平台)开始投入运行,服务用户近1500人(赵国峰等,2014a)。随着平台的应用推广,其承载业务和服务覆盖用户越来越多,震后不时出现短信拥塞和振荡现象(图1),尤其是大震后,业务短信量增多,短信发送速率不变但发送成功率降低,大量短信滞留堆积在平台与网关出口处,应急人员长时间收不到短信,影响了后续地震应急工作。
图1 2015—2016年国内部分地震震后1h短信服务延时分布情况
短信拥塞和振荡现象主要出现在地震后1h内,通过跟踪分析震后短信合成、流转和调度过程,其主要原因涉及:①地震行业业务短信特点,平时业务短信少,震后短信量剧增,导致发送速率远小于短信合成速度,短信在平台与各运营商网关衔接处积压;②网关短信速率涉及并发数和流控,其中并发数指允许与网关通信的最大进程数量,超出后网关拒绝接受连接;流控为网关允许在一秒内的收发短信流量,超出后短信发送不成功,且在一段时间内限制发送。震后如果匹配不当,则导致短信无法发送,进而导致短信越积越多;③发送短信按短信时间依次发送,发送排队机制简单,未充分考虑重要业务和特定人员的迫切需求。
本文针对上述问题,提出并设计了复合优先级策略、多线程控制模式,解决大震后短信剧增的情况下重要业务、重点用户优先服务保障问题,同时设计了自助式交换服务框架,方便用户自助进行业务短信订阅和取消,减轻平台运行管理压力。
优先级是排队问题的一种重要解决方案。12322速报短信服务平台是国家级单位、省级单位等多单位共用的一个综合短信服务平台,承载了包括地震速报、震情通告、应急启动、OA通知等短信业务。本文综合考虑业务特点,提出复合优先级,即优先级取决于短信应用机构、业务和用户(手机号)优先级值及权重,具体表达为
PMessage[i,j,k]=D[i]×Wd+T[j]×Wt+R[k]×Wr
(1)
其中,PMessage[i,j,k]表示一条短信的优先级,该短信源于机构i(D[i]为对应机构优先级值)和业务j(T[j]为对应业务优先级值),接收人员为k(R[k]为对应人员优先级值),其优先级值取决于:①短信所属机构/部门的优先级值;②短信所属的业务优先级值;③短信接收人员号码的优先级值;④上述三者对应的权重。其信息除人员号码优先级R外,均为系统配置。Wd、Wt、Wr为机构、业务、接收人员对应的权值,Wd+Wt+Wr=1。优先级与优先级值关系见图2、图3。
图2 业务优先级值示意
注:在Wd=50%,Wt=20%,Wr=30%条件下,业务优先级值为2(速报)、4(震情)、6(历史地震)、8(通知);机构优先级值为1(应急单位)、2(一般单位);人员优先级值1(应急处置)、3(应急)、5(重要)、7(较重要)、9(普通)
通过图3 可看出,通过对机构、业务和人员配置不同的优先级值及权重,可以保障重要业务人员及特定人员的短信优先级高,优先发送该类短信。在大震后业务短信剧增下,速报、震情等业务中应急人员的服务时效性明显优于非应急人员短信服务,日常因为短信量不大,服务时效性偏差可以忽略。
多线程并发控制主要用于解决速率性能弹性扩充问题,经技术验证,在采用单进程模式与网关通信时,发送速率达到一定值后会出现上限瓶颈,达不到运营商提供网关流控的最大速率。多线程并发模块通过配置多线程(线程数量不高于并发数,见图4)和单线程流控,各线程的流控之和不超过网关流控,可最大程度利用网关的短信发送效率。
图4 多线程控制示意图
以下为网关通信的部分代码:
int threadnum=Integer.parseInt(conf.getParams(“threadnum”).trim());#获取进程配置数量
CClient client[]=new CClient[threadnum];#进程数量
ReadThread readthread[]=new ReadThread[threadnum];#接收线程数量
WriteThread writethread[]=new WriteThread[threadnum];#发送线程数量
FlowCtrlThread ctrl[]=new FlowCtrlThread[threadnum];#流控线程数量
#启动流控
FlowCtrlThread ctrl[]=new FlowCtrlThread[threadnum];
for(int i=0;i { ctrl[i]=new FlowCtrlThread(i); ctrl[i].start(); } #启动收发进程 for(int t=0;t { client[t]=new CClient(t,serverip,serverport); while(true) { if(!client[t].isLogon()) {#登录 CMPPConnect connect=new CMPPConnect();client[t].getWriter().write(connect.getByteArray()); client[t].getWriter().flush(); } } while(true) { if(client[t].getReader().available()>0) { client[t].ReadMessage(respbuf); CMPPConnectResp connectresp=new CMPPConnectResp(respbuf); if(connectresp.getStatus()==0)#状态返回码0代表发送短信成功 { CMyLog.InfoLog(“[”+t+“]login success”); }else { client[t].setLogon(false);#未登录状态 Thread.sleep(5000); } break;#中断并跳出本次循环 } } }else {break;} } Thread.sleep(1000); writethread[t]=new WriteThread(client[t],t,threadnum); writethread[t].start();#启动发送线程 readthread[t]=new ReadThread(client[t],t); readthread[t].start();#启动接收线程 }//end of for thread … } 多线程并发控制模块对每个运营商网关设置了单独配置并发数和线程的流控参数,在实际部署前需向运营商申请。在手机号码与运营商网关匹配方面,平台通过手机号前3位或4位来判别短信所属的运营商(1)移动号码段所属运营商参考工信部信息通信管理局批复;虚拟运营商号码段分别由移动、电信和联通公司提供;目前平台无法单独识别携号转网的手机号码。,并将短信推送至对应的网关(表1)。目前平台支持向移动用户、电信用户、联通用户和虚拟运营商用户发送短信。 表1 12322短信支持的手机号段 综合短信服务平台提供包括地震速报、非天然地震和震情等短信服务业务,提供包括优先级计算、调度、短信收发等功能,同时提供便捷的接口服务,方便个性化业务短信系统接入,系统框架见图5。 图5 系统功能框架 速报短信的信息源为地震速报信息交换与共享服务的软件系统EQIM(Earthquake Instant Message),即全国地震速报信息共享服务系统(陈晓辉等,2009;杨陈等,2009),可采用两种方式从EQIM中获取速报信息:Netseis/IP协议方式(刘胜国等,2012;叶春明等,2013;李鸿庭,2019)和数据库方式(赵国峰等,2014b),平台由原来的数据库方式优化为采用NetSeis/IP协议进行实时数据接收,并对速报类型、地震震源深度、震中经度、震中纬度、震中位置和地震类型等预处理,按模板合成短信内容(表2)。 表2 地震速报信息类型 非天然地震信息源于速报短信系统正式速报,信息类型涉及了CD、CC和CA,地震震源深度为0,且其震中位置中包含非天然地震类型信息(表3),对于爆炸类,还需通过震级换算出TNT当量,然后按照非天然地震模板,合成非天然地震信息。 表3 非天然地震分类 部分处理代码为: location_cname=format(location_cname); #通过震中位置中信息和震源深度判断是否非天然地震 IF(is_ftr_eq(location_cname,depth)) { #提取非天然地震关键字 temp_ftr_type=get_ftr_eq_type(location_cname); #格式化o_time,lat,lon,depth,m参数 … IF(is_taxian_ftr_eq(temp_ftr_type)>0) { ——按模板合成塌陷类非天然地震短信内容 temp_msg=taxian_msg(o_time,location_cn_name,lat,lon,m,temp_ftr_type); } ELSE { ##按模板合成爆炸类非天然地震短信内容 temp_msg=baozha_msg(o_time,location_cn_name,lat,lon,m,temp_ftr_type); } } 配置管理模块包括优先级权重配置、正式速报与自动速报匹配参数、手机号段映射配置、黑名单配置等。其中优先级权重配置主要对单位机构、业务和人员优先级权重进行配置;正式速报与自动速报匹配参数包括经度差、纬度差、发震时刻差、震级差,来判断正式速报是否与自动速报为同一地震。 目前平台管理的用户已近4.5万人,每年因工作调整、退休等原因调整或取消业务短信,占用了管理员大量时间和精力。自主短信交互设计主要是为了解决平台日常地震速报接收人员信息或接收条件频繁变更或取消业务的一种方案,流程见图6。 图6 自助交互流程 用户向目标号码12322XXXX发送业务交互指令,平台接收短信后,对接收的短信进行规则匹配,匹配主要基于接收号码、短信内容及时效性,转到对应业务模块进行处理,并将结果告知用户。以地震短信订阅/取消为例,业务流程见图7。 图7 地震短信订阅/取消自助交互业务 短信服务是一种点对点服务,具有经济便捷、安全可控等优点,但存在发送速率受限问题。地震短信显著的特点为无震时短信量少,业务对短信时效性要求不高;地震(尤其是大震)发生后,围绕地震的短信量剧增,受运营网关流控限制,短信可能出现拥塞现象,且一旦流控异常,会导致在一定时间内短信发不出去的现象,从而加剧拥塞。上述现象的频发严重制约了平台的应用和发展。针对该情况,本文分析并定位了现象的根本原因,通过复合优先级策略和多线程并发控制,解决了该问题。 本文针对目前12322地震短信平台业务模式,即国、省单位共用,速报、震情等多业务共用,应急人员和普通人员共用,涉及多单位、多业务、多人员,提出了复合优先级设计和多线程调度等设计模式,最大程度上适配网关流控,在短信速率的限制下,可保障震后速报等重要业务的应急人员短信优先发送,解决了平台在多业务、不同人员的短信服务应用场景问题,为平台的广泛应用和推广奠定基础,截至目前,平台已在20余家单位推广应用,承载了包括速报、震情、非天然地震等10余项业务短信,服务覆盖用户已超过4.5万人,平台网关出口速率(中国移动、中国联通和中国电信提供给12322短信网关的流控之和)提升到了800条/秒,年短信量突破1300余万条(图8)。 图8 12322速报短信服务平台年服务情况 当然,随着移动互联网和自媒体的发展,微博和微信等也成为了当前速报信息服务的重要方式,尤其在对公众提供地震服务方面。但就目前来看,在未来一段时间内,短信仍是地震部门内部速报和震情信息服务的重要手段,主要在于:①具有个性化特征,地震发生后,按预设条件可发送至特定人员,而非每个地震信息都发送所有人;②对通信和手机平台的依赖性低,手机处于开机状态且有信号时即可收到短信,不论是否为智能手机,是否打开应用APP等;③安全可靠,信息传输期间难以被篡改,来源权威可靠。3 综合短信服务平台设计
3.1 地震速报短信服务
3.2 非天然地震短信服务
3.3 配置管理
4 自助短信交互
5 问题与探讨