专业气象跨平台发布系统及关键技术实现
2021-05-19徐碧裕叶朗明徐加民于东海胡丽华
徐碧裕 叶朗明* 徐加民 于东海 胡丽华
(1 广东省江门市气象局,江门 529000; 2 广东省江门市新会区气象局,新会 529100)
*通信作者,Email:ye_langming@126.com
引言
专业气象服务是在社会相关行业对气象服务具有特殊需求的前提下产生的,是气象服务组织为经济社会各行各业和用户提供的满足特定需求的专业化、精细化、个性化气象服务[1]。专业气象服务集约化发展是以先进的“互联网+”技术为依托,通过构建“云+网+端”平台,有效实现了专业气象服务的全面互联互通[2]。传统气象信息接收渠道如手机短信、传真、报纸、电视、Email等,已然不能够满足专业气象用户对于便利性的需求[3]。微信作为目前最为流行最受欢迎的免费即时通讯工具,其用户群正在日渐激增,功能也越来越强大。因为它拥有传统电话、短信等手段无法比拟的特点,可以精准、快速、主动地传播消息,方便有效的互动特性受到了无数用户和团体、机构的关注与青睐[4]。因此,近年来越来越多学者开始研究将气象信息发布融合到当下热门社交软件微信App提供的公众号或企业号平台中,这就涉及到气象信息跨平台发布问题。对于微信平台气象信息推送系统,许多学者已有研究[5-9],但前人研究的推送系统终端一般为微信服务号,对象是公众,具有普适性;每个行业气象用户具体需求不同,借助微信企业号应用,搭建满足专业气象定制化需求的系统更加有意义。本文以“江门市气象公共服务中心”企业号为例,以不同行业气象用户为对象,搭建了跨平台发布系统,实现了专业气象信息移动端自动提醒。
每个行业专业气象用户所关注的气象要素都不相同,航运及公路交通行业关注能见度、风力、降雨等;能源电力行业关注气温、湿度、降雨等。许多用户工作地点在户外,搭建能实现差异化、个性化服务的跨平台发布系统,实现气象信息的可移动性、便捷获取性成为开展专业气象服务的现实需求。
1 平台选择及系统设计
1.1 平台选择
微信企业号信息发送条数不受限制,不产生费用,最高每分钟可群发200次消息,支持保密消息,防止成员转发,支持高级接口权限,可根据需要为每个行业气象用户群组定制独立应用,能实现专业化、精细化、个性化的功能和菜单[10-11]。新浪云应用SAE在平台搭建时免架构设计、免运维,能从容应对流量爆发式增长。上述2个平台优点适应了专业气象服务特性,可以提高信息发布效率,减少专业气象服务硬件投入和人力资源成本,使系统安全性和稳定性得到保障。
1.2 系统设计
专业气象跨平台发布系统总体框架包括硬件支撑层、数据层、服务层和业务应用层4部分(图1)。
(1)硬件支撑层。为平台提供安全、稳定运行环境,提供SAE云空间,并按实际需要进行动态分配;借助边界隔离内部和外部网络,阻挡外部网络入侵。
(2)数据层。主要包含用户数据、管理数据、气象数据。气象数据是基于Spring框架、读写分离的Oracle 10g数据库,主要包含气象站点数据、图形产品和NetCDF格式的格点数据;气象临时数据则存放于KVDB高速缓存和Storage分布式存储中。
(3)服务层。服务端开发采用ThinkPHP5开发框架,它使用面向对象的开发结构和MVC(模型-视图-控制器)模式,封装了CURD和一些常用操作,在缓存机制、分布式数据库、多数据库连接和切换、认证机制及扩展性方面均有独特的表现。该框架结合微信企业号API接口和企业号JS-SDK接口,实现对气象数据的动态监控;新浪云SAE提供阈值判定和消息推送服务;IDEA(Integrated Database for Easy Access,广东省气象探测数据中心提供的历史一体化数据访问平台)提供气象基础数据服务。
(4)业务应用层。微信企业号内含多个行业应用,如“江门供电”、“广中江高速”、“川岛航线”等,每个应用中均有“气象要素阈值推送”、“气象预警信号推送”、“气象常规产品推送”、“基于WebGIS的气象要素实况查询”4大功能模块;后台管理系统则集成于新浪云服务器中,提供用户管理、权限管理、运维监控、定时任务、日志分析、代码管理等6大功能。
图1 跨平台发布系统的总体架构
2 关键技术实现
2.1 SAE与企业号多应用API对接
跨平台发布系统中,为了统一管理企业号的多个行业应用,实现微信消息转发、自定义菜单、获取成员状态等功能,开发者通过对接SAE和企业号应用API接口,开启应用回调模式。回调模式时,企业号应用URL、Token、EncodingAESKey是必须的3个参数:URL是企业号应用接收企业号推送请求的访问地址,支持HTTP或HTTPS协议;Token由企业任意填写,用于生成签名;EncodingAESKey用于消息体的加密,是AES密钥的Base64编码。
当提交以上信息时,企业号应用将发送GET请求到填写的URL上,GET请求携带4个参数msg_signature(微信加密签名)、timestamp(时间戳)、nonce(随机数)、echostr(随机字符串),企业号应用在获取时做urldecode解码处理,否则验证不成功。企业号通过参数msg_signature对请求进行校验,如果确认此次GET请求来自企业号,那么它会对echostr参数解密并原样返回echostr明文,此时接入验证生效,回调模式开启[12-13]。
2.2 基于KVDB缓存的接口访问凭证
微信企业号应用发送消息时,需要调用消息群发高级接口,为了确保接口通信安全性,微信企业号要求访问高级接口要先获取接口访问凭证(即access_token)进行权限验证。还规定了access_token有效期为7200 s,重复获取将导致上次获取的失效,同时access_token API每天的访问次数被限制为2000次。如果每次调用高级接口都去请求access_token API获取access_token,在调用频繁的情况下将很快达到access_token API每天访问限制,导致后续访问全部被微信服务器拒绝,消息无法成功发送[14]。因此,需要定期在程序中保存获取到的多个应用access_token值,以便调用消息群发高级接口。
KVDB是新浪云开发的分布式key-value数据存储服务,用来支持公有云计算平台上的海量key-value存储[15]。KVDB支持的存储容量很大,支持亿万级数据容量,远远满足跨平台发布系统的数据缓存需求。KVDB采用无状态对等的分布式架构,在任一节点发生故障时,仍然保持正常运行。KVDB提供稳定可靠的NoSQL键值数据库服务,数据保持3份冗余,支持前缀检索,读写均能达到10万QPS(Query Per Second,即每秒查询率)。
借助新浪云KVDB缓存以及定时任务,系统实现了对企业号下所有应用不同access_token值的自动更新、存储以及快速读取,提高了接口访问凭证的稳定性和调用效率,进一步提高了阈值消息发送效率。
2.3 定时任务云托管及消息异步执行
新浪云SAE中提供2种定时任务方式:①是每隔一定时间执行;②是在某个特定时间点执行。定时任务服务可以用来定期触发应用执行一些后台任务,定期获取access_token值、定期轮询阈值条件、定期推送消息等。定时任务的执行以 HTTP 方式触发,触发后真正执行的是应用中定义的 HTTP 回调函数。定时任务采用分布式架构,支持N/2节点冗余;任务执行的方式是 HTTP 调用(GET 方法),它具备以下优点:支持超长的任务执行时间,最长为1800 s;任务执行精准度高,误差小于10 s;普通应用最大可以并发执行12个定时任务。
在执行消息推送时,如果群发用户很多,使用轮询一对一发送的方式将出现极大的延迟,跨平台发布系统采用任务队列的消息异步执行方式。SAE任务队列是一种分布式队列服务,提供异步离线队列服务;提供针对HTTP方式的异步任务执行,如给500个用户同时发送预警消息,页面容易超时,而异步离线队列,能实现任务非阻塞执行,也支持失败回调。
2.4 阈值条件触发消息推送机制
跨平台发布系统的核心代码主要搭载在新浪云应用SAE的SVN代码仓中(SVN是Subversion的简称,是一个开放源代码的版本控制系统),通过新浪云服务器的定时任务功能,定期执行SVN仓代码,来获取和处理存放在Storage存储空间的气象数据,当检测到变量达到设定的阈值时,在KVDB缓存中进行变量新、旧值替换,并将新的变量存入KVDB中(避免重复推送,下一时刻再进行阈值判定),最后执行消息推送代码(图2)。
图2 跨平台发布系统的关键流程
在系统关键流程中,如果设定的阈值条件是任意气象要素值,则可以实现任意气象要素的超阈值推送;如果将预警信号发布时间作为阈值条件,并加上预警信号类型以及升、降级条件判断,则可以实现预警信号更新时的消息推送;如果将文件时间作为阈值条件,则可以实现文件更新时消息提醒功能。
以上3种不同阈值条件的消息推送,实现了气象信息发布平台与微信企业号专业气象服务产品“无缝”对接,均由跨平台发布系统完成。
3 应用成效
3.1 气象实况及超阈值推送模块
气象实况模块可以查询当前气象站点的多个气象要素:气温、降水、小时极大风等;跨平台发布系统使气象数据在多个平台间流转,可以根据用户需求设定阈值,实现气象要素超阈值自动推送提醒,实现微信企业号应用定制化服务。如“川岛航线”专业用户在出现阵风8级时将停航,设定阵风超7级时,企业号应用推送提醒消息。在文献[16]中,已详细阐述极大风超阈值推送原理在“川岛航线”气象专业服务中的应用。借助实况风力阈值推送,企业适时安排停、售票业务,生产经营得以顺利开展。在大风天气过程时,持续、加密的阈值推送也为企业争取了更多通航时间,创造了更多经济效益。
3.2 气象预警推送模块
气象预警模块主要针对跨越不同市县的专业气象用户。因气象预警是属地发布原则,为满足用户需求,跨平台发布系统实现了微信企业号中多个应用、不同属地气象预警信号同步发布。如“广中江高速”关注江门蓬江、江海和鹤山的预警信息(图3);“江门供电”关注全市各区县预警,在气象信息发布平台更新预警时,微信企业号同步更新,多个应用预警更新时差小,达到了“一次发布,多头同步”的效果。截至2020年6月,“江门供电”已有411人加入微信企业号,用户根据系统推送的气象预警,适时启动内部应急响应,安排电力检修、巡查工作。在2018年一次回访中,用户反馈在跨平台发布系统查询天气实况很方便,户外作业也能第一时间接收各地预警推送消息,对带电作业帮助很大。
3.3 气象预报服务产品推送模块
跨平台发布系统检测文件时间,当文件时间出现变化,推送更新消息。如《广中江高速气象专报》以PDF格式发布,在气象信息发布平台发布后,系统同步在微信企业号中实现自动推送(图4)。据用户反馈,微信企业号推送的《气象专报》类产品,较传统的传真、邮件方式更加及时,也方便接收。
图3 微信企业号中“广中江高速”应用的沿线预警信号消息推送: (a)预警信号升级消息,(b)预警信号降级消息,(c)预警发布及解除消息
图4 微信企业号应用《专报》更新推送及大风超阈值推送: (a)《专报》更新推送消息,(b)PDF格式的专报内容,(c)川岛航线大风超阈值推送
3.4 WebGIS实况显示模块
WebGIS是Web(World Wide Web)技术应用于GIS(Geographic Information System)开发的产物[17-18]。跨平台发布系统借助WebGIS技术及百度地图API开放接口,运用HTML5+CSS+JavaScript技术实现Web版地理信息与气象实况相叠加,实现高速沿线气象实况显示。如在“中开高速”气象服务中,可从百度地图API接口标记出项目途经点;点击列表中的站点名称,能跳转并直接在地图上显示该站点位置以及当前气象站实况信息(图5)。跨平台发布系统完成了高速公路沿线气象站实况数据的逐5 min自动更新,2019年某次局地降雨过程,另一“开春高速”6标段用户根据项目沿线点天气情况,适时调整混凝土浇筑计划,避免了损失;据该用户事后评估反馈,至少节约了6车混凝土,同时避免了雨天在山间行驶的风险。
图5 基于WebGIS的中开高速线路途经点及沿线气象站分布: (a)高速沿线附近区域站列表,(b)中开高速线路途经点标记,(c)沿线气象站实况要素显示
4 结论
本文借助新浪云服务器SAE、微信企业号优势,搭建了专业气象跨平台发布系统,给出了系统架构、发布流程和关键技术。系统减少了气象信息发布成本,解决了专业气象信息跨平台同步发布问题,实现了移动端气象信息的自动提醒。
专业气象跨平台发布系统已在“江门市气象公共服务中心”企业号中应用,给“川岛航线”、“江门供电”、“广中江高速”等专业用户带来极大便利,并创造了一定的经济效益。这将为全国各地“互联网+气象”专业气象跨平台发布提供一个良好的建设思路。