林红 华韵子
摘 要:针对预报服务产品一键式发布的迫切需求,通过对Redis内存数据库的应用研究,基于Spring框架搭建了上海中心气象台数据分发管理系统,实现数据产品分发和分发配置管理功能,发送方式包括FTP、短信、邮件、传真、语音。系统运行稳定可靠,发布效率提升90%。
关键词:数据分发;Redis;传真;短信
中图分类号:TP399 文献标识码:A
Abstract:Aiming at the urgent need of one-click publishing of forecast service products,through the application research of Redis in-memory database,the data distribution management system of Shanghai Central Meteorological Observatory is built based on the Spring framework,realizing data product distribution and distribution configuration management.The means of distribution include FTP,SMS,email,fax and voice message.The system runs stably and reliably,increasing the distribution efficiency by 90%.
Keywords:data distribution;Redis;fax;SMS
1 引言(Introduction)
隨着上海社会经济的发展,政府部门、公众、媒体、专业用户等对气象保障服务在精细化程度、预报时效、需求范围等方面的要求不断提高。当前上海中心气象台每天发送数据文件数量在25000个左右,数据量达到30GB。预报服务产品发布数量的激增和高时效要求,使得目前单一的FTP发送、人工发送传真和逐一打电话通知相关部门的现状已经不能满足业务需求。本文从实际分发需求出发,基于Redis内存数据库的高性能优势,借鉴其在多个领域中的应用经验[1-3],设计研发了集FTP、短信、邮件、传真、语音电话于一体的数据分发管理系统,将预报员从繁杂的事务性工作中解脱出来,有更多的时间专注于预报过程的分析,进而提高预报质量。
2 系统架构及关键技术(System framework and key technology)
2.1 系统架构设计
系统采用B/S架构设计,系统由存储层、数据层、服务层、业务功能层组成。各层设计及主要功能:
存储层:存储业务层、采集、发送过程中产生的所有数据。本层主要使用Redis数据库和MySql为主,以Redis缓存数据库作为任务队列进行任务控制,并缓存一段时间内的数据信息。
数据层:数据层是采集和发送数据的核心模块,自动管理服务连接、采集、发送、存储、上报等任务。数据层的所有数据来源与任务队列和业务层产生的数据。数据层控制流量主要是依赖于缓存队列。数据层主要功能包括任务监控、任务控制、任务队列、连接池、数据传输、信息上报、数据存储等。
服务层:为业务层提供对应的服务支撑,包含FTP发送、传真发送、邮件发送、短信发送、语音呼叫、告警信息推送等接口。服务层主要是连接业务层和存储层的中间桥梁,处理业务层的逻辑和数据操作,通过连接数据库,对服务器配置、分发策略配置、数据存储等进行查询和存储,查询任务、告警等信息。
业务功能层:是以Web页面的方式供用户操作,功能主要包括配置中心(服务器配置、分发策略配置、发送用户管理、发送用户组管理、产品管理)、任务监控(分发统计、数据下载、告警信息)、系统管理(用户管理、数据字典)、权限管理四大功能。
2.2 关键技术
(1) 内存数据库技术
在本项目中,待分发的数据文件数量、数据量和用户数量众多,多产品多用户的并发需求,以及用户对时效性的需求,特别是预警产品的超高时效性要求,所有的操作都针对关系型数据库[4](Database,DB)是不现实的,DB虽然提供了数据的访问,但每一次的数据访问都是一次I/O(Input/Output)操作,频繁的I/O操作对系统性能来讲是一种灾难[5,6],传统关系型数据库方案已不能满足海量数据发送的需求。系统选型在分布式内存数据库上[7],通过理论分析及试验分析,最终确定了实时处理能力更强的Redis内存数据库作为数据层支撑。
Redis是开源的、高性能的、键值(key-value)对存储数据的NOSQL数据库,适合被用于数据库、缓存和消息中间件[8]。作为一个内存数据库,Redis读写数据的时候不会受到硬盘
I/O速度的限制,读取速度可以达到110000次/秒,写入速度达到81000次/秒,远远优于常规DB数据库的读取速度,具有对数据高并发读写和高效率存储访问的性能[9]。与同样是内存数据库的Memcached相比,Redis支持更多的数据类型,除支持字符串类型之外,还支持hash、链表、集合及有序集合等数据结构[10],可以方便地添加和删除元素[11]。并且Redis支持数据的持久化,可以周期性地将内存中的数据保存到磁盘中,重启的时候可以再次加载到内存中使用,数据可以从主服务器向任意数量的从服务器上同步,而从服务器又可以作为主服务器关联其他的从服务器,以此实现主从同步的数据备份[12]。
在本项目系统数据存储的设计中,DB数据库采用开源的MySql数据库,而Redis作为DB与业务应用之间的桥梁,整个内存库的设计除了缓存分发用户的配置信息外,一段时间内的数据信息也保存在缓存中,避免同一文件每发送一个用户就进行一次I/O读取,大幅度提高分发效率。如图2所示,Redis作为挡在其前的一道快速读取数据的屏障,有效缓解了MySql数据库压力,对提高整个系统性能起到了关键作用。
(2)传真服务
传真是为上海市政府、防汛部门传送气象服务产品的重要渠道,目前是手动发送,效率低下。本项目中部署了一部传真服务器FS(Fax Server),搭载四路的Modem卡。建立基于WSDL的传真接口协议FWI(Fax WebService Interface),其利用WebService进行通信,数据分发模块通过调用FWI向传真服务器发送请求,FWI直接返回需要的数据,并提供状态信息。
整个传真服务流程为:数据分发模块根据用户名/密码调用SignIn登录FS;如果登录成功,获取令牌TokenID,将令牌TokenID作为参数调用发送传真,获取传真状态的服务;操作完成,调用SignOut退出登录。流程图如图3所示。
待发送的文件传送到传真服务器后,通过文件格式转换的功能,将文本或WORD等格式的文件转成TIFF格式的文件后经过base64加密封装,调用传真接口自动发送。
(3)短信服务
预报服务产品的短信发送是为公众、领导决策服务的主要手段之一,而短信发送涉及中国移动、中国电信、中国联通三大运营商的网关,为此与移动、联通、电信建立合作渠道。短信服务器内部集成统一的数据库接口、API接口,与上海中心气象台业务系统融合,其服务器部署在上海市气象局内网DMZ区,短信服务通过固定公网IP连接至中国移动、中国联通、中国电信三大运营商的行业短信网关,数据分发模块通过内网直接调用短信服务器数据库接口,实现全网手机用户的短信发送、接收、查询、统计等功能,支持移动、联通、电信的子账号功能,满足中心台多业务、多维度的业务需求。如图4所示。
(4)语音电话服务
语音分发是指向指定号码拨打电话,目前是通过预报员人工操作完成的。通过调研选定了阿里语音服务。通过调用阿里云语音呼叫的API,从运营商网络向指定号码发起一通呼叫,呼叫被应答后,播放一段指定的音频,支持将一个音频文件同时拨打给多个用户。支持两种形式的音频调用:①播放的音频为固定内容的音频文件(mp3/wav),可以直接外呼。②播放的音频为带有变量的文本模板,每次调用时先根据变量替换值从文本模板转化为音频文件,再进行外呼。阿里语音服务通过先进的深度学习技术,提供了语音合成功能,可以将文本转换成自然流畅的语音,同时能够根据需求调节语速、语调、音量等。
3 系统实现(System implementation)
3.1 开发环境
系统后台采用SpringBoot框架,前台基于SpringMVC框架,采用JAVA和HTML5作为开发工具。
3.2 功能模块
根据系统架构设计,气象数据分发管理系统主要包括:监控模块、分发模块、管理模块三大模块。
(1)监控模块
监控服务对指定的数据文件目录进行监控,若该目录下有文件新增,即通过socket发送文件的相关信息到收发核心模块文件采集任务队列。为避免有文件遗漏未被消费,设计了监控重发模块,每隔2分钟执行一个定时任务递归扫描文件夹下所有未消费的文件,发送相关信息至核心模块。
为防止因其他原因造成的系统停止运行,通过运行独立于整个系统的监控脚本,每10分钟检查Redis、监控模块、收发核心模块、web模块的运行情况,若停止运行自动重启。
(2)分发模块
分发模块是整个系统的核心模块,消费文件采集队列获取文件名,通过正则表达式和文件名进行匹配,若匹配成功则在数据归档根目录下按照“产品名称/年/月/日/时/”建立文件夹,对文件进行归档;归档后将该条信息加入Redis发送任务队列,发送队列的消费者根据产品内容ID,查询数据库的FTP分发配置、短信分发配置、邮箱分发配置、传真分发配置、语音分发配置。根据获取的配置信息,进行相应的分发操作。分发模块提供重发功能。
FTP分发:查询到分发的用户和配置信息,从FTP连接池中获取连接,进行文件的上传操作。
短信分发:读取文件内容后,根据分发的用户手机号组装成规定的txt文件格式,上传至短信发送服务器。
邮箱分发:查询发送用户的邮箱地址,如待发送的文件为文本文件,则将读取到文件内容作为正文发送,其余格式的文件将作为附件发送。
传真分发:文件先转换tiff格式后经过base64转换封装并调用传真接口发送。
语音分发:读取文本文件内容并查询取出相关的用户号码,阿里云语音呼叫的API接口将文字自动转换为语音,拨打电话给用户。
FTP分发、短信分发、语音分发为同步,可以立即获得分发结果;邮箱分发为异步,需等待回调的结果;传真发送后,任务监控队列消费者根据ID通过接口查询传真发送的结果。
(3)管理模块
管理模块实现发送配置、用户管理、系统发送情况查询等功能。
系统提供灵活的分发统计功能,便于用户查询不同时间段、不同产品、不同用户、不同文件名的分发统计情况,提供对每个统计情况详细信息的查看功能,提供对分发文件的下载功能。
4 结论(Conclusion)
本项目投入业务化运行后,有效减少手工操作,预报员用于产品发布的时间缩减了90%,大幅度提高工作效率。系统提供了监控发布内容的窗口,预报发布人员可以很直观地看到发布情况,如果有发布失败的产品,通过简单操作就可以进行补发。管理人员方便对发布信息进行查询、统计,便于预报产品、服务产品发布状况的管理。短消息提醒功能,使得重要路径发布失败时,相关人员可以在第一时间得到消息,便于及时处理,确保不漏发。统一的数据分发接口,其他业务系统不再需要单独开发分发功能,只需简单调用接口,或是将产品文件发送到指定目录下,就可实现一键分发功能;减少重复开发,提高发布的稳定性。语音呼叫功能,使得原来发布预警时逐一给各区气象局和上海市預警联动部门人工拨打电话变得简单易行,传真亦是如此。在以后的工作中,根据业务需求的变化进一步完善系统,提供更优质地服务。
参考文献(References)
[1] Gade AN,Larsen TS,Nissen SB,et al.REDIS:A value-based decision support tool for renovation of building portfolios[J].BUILDING AND ENVIRONMENT,2018,142(9):107-108.
[2] Sumba Xavier,Segarra Jos,Ortiz Jos,et al.REDI:A linked data-powered research networking platform[C].Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics),2018,v 11155 LNCS:121-125.
[3] Leea Taeyoung,Kim Yongsung,Hwang Eenjun.Abnormal Payment Transaction Detection Scheme Based on Scalable Architecture and Redis Cluster[C].2018 International Conference on Platform Technology and Service,2018.
[4] 華韵子,林红.华东区域自动站数据实时融合显示与多级警示技术[J].软件工程,2016,19(5):26-29.
[5] 孙超.Redis内存数据库在智慧消防系统设计中的应用[J].网络安全技术与应用,2018(8):103-105.
[6] 熊肖磊,王春伟,赵炯,等.基于Redis与SSM的大型设备数据运用系统设计[J].现代机械,2018(6):29-34.
[7] 邓万宇,刘光达,董莹莹.一种基于Scrapy-Redis的分布式微博数据采集方案[J].信息技术,2018(11):59-62.
[8] 崔梦天,吴倩.基于Redis缓存的数字化图书馆应用[J].吉林师范大学学报(自然科学版),2018(2):123-127.
[9] Paul Nicole,Lee Ji Su,Mieler Michael.et al.Improving Estimates of Earthquake-Induced Downtime in Individual Buildings Using the REDi Methodology[C].Structures Congress 2018,2018(4):77-86.
[10] Kimm Haklin,Li Zuqing,Kimm Hanke.SCADIS:Supporting Reliable Scalability in Redis Replication on Demand[C].Proceedings-2nd IEEE International Conference on Smart Cloud,2017:7-12.
[11] Josiah,L.Carlson.黄健宏,译.Redis实战[M].北京:人民邮电出版,2015.
[12] Jeremy Nelson.汪佳南,译.深入理解Redis[M].北京:电子工业出版社,2017.
作者简介:
林 红(1966-),女,硕士,高级工程师.研究领域:气象行业软件研发.
华韵子(1981-),女,硕士,高级工程师.研究领域:气象行业软件研发.