气象大数据云平台DPC子系统配置文件查看器的设计与实现

2023-09-28 02:30
中国新技术新产品 2023年16期
关键词:配置文件入库结构化

陶 鑫 杜 宇 关 虹

(1.内蒙古自治区气象数据中心,内蒙古 呼和浩特 010010;2.内蒙古电力(集团)有限责任公司信息通信分公司,内蒙古 呼和浩特 010000)

气象大数据云平台(天擎)于2020年7月完成了国省部署运行,形成1+31的业务布局,成为了全国各省级核心气象业务系统。天擎1.0具备海量数据存储、全业务贯通和数据应用高效的能力,足够开放,可直接支撑天气、气候、探测、公服以及人影等各类气象应用的云化融入[1]。到2022年完成天擎2.0建设,全面支撑气象“云+端”的应用生态。其中数据处理中心子系统DPC(Data Processing Center)是天擎的重要环节,所有的数据由数据收集与分发子系统CTS(CMA domestic Telecommunication System)收集分发后,经过DPC系统的解码处理并入库。因此DPC是保障数据及时处理并入库的核心系统,稳定运行非常重要。

天擎DPC系统负责解码入库的资料分为结构化资料、非结构化资料、半结构化资料、雷达流资料和消息体等。不同资料对应的解码程序框架也有区别,即结构化资料需要处理解析文件内容并入库,非结构化资料仅入文件索引,实体文件存储在NAS存储;半结构化资料则需夭对其存储的格点场进行多场多要素拆分存储;消息体数据则采用strom框架完成解码存储。

根据资料类别DPC系统分别部署在18台服务器,每类资料都有特定的消息转发配置、解码程序配置和入库策略配置等各不相同的配置文件,当程序僵死或出现异常,运维非常复杂,因此天擎DPC子系统配置文件查看器的开发具有实际意义,可以提高运维效率。

1 总体架构

天擎DPC子系统配置文件查看器总体设计包括数据层、交互层、存储层及应用层4部分,总体架构如图1所示。

图1 总体架构

1.1 数据层

DPC子系统数据解码服务器共15台服务器,结构化资料包括地面、高空、海洋、辐射、酸雨以及农气等数据的处理;非结构化和半结构化资料包括雷达、卫星、数据模式和其他服务产品等数据处理;消息拆分与转发处理服务器负责实时监听通知消息到达,把打包消息拆分为单条消息,然后根据文件的重命名策略进行重命名后保存到数据存储目录,发向数据处理的RabbitMQ转发消息[2]。所有的配置文件和解码程序均存储在制定的服务器,交互层通过信息采集模块读取数据层的配置信息。

1.2 交互层

应用层向交互层发送配置文件信息获取请求,交互层信息采集模块接收到指令后主动连接数据层对应服务器,然后搜索配置文件,进行解析,提取用户请求的配置信息。采集的消息转发配置信息包括服务器IP、配置文件名称、存储路径、资料的名称、资料的CTS四级编码及资料对应的消息对列名称等;采集的解码程序配置信息包括服务器IP、资料入库脚本名称、资料配置文件、资料使用端口号等;采集的资料入库策略配置信息包括服务器IP、配置文件名称、资料的名称、资料的CTS四级编码和SOD四级编码、存储方式、入库的表名及是否发送DI状态等。最后将读取到的配置文件信息存储至内存数据库中,为应用层提供数据支撑。

1.3 应用层

围绕运维人员查看需求,以轻计算、重连接,前台操作、后台分析为要求,实现天擎DPC子系统配置文件查看需求。初次使用,运维人员需要先对DPC集群的节点、数据库连接信息进行配置,然后将消息转发配置、解码程序配置和入库策略配置获取请求提交至交互层即可查看。

2 关键技术

天擎DPC子系统配置文件查看器采用采用的是B/S的架构,浏览器端程序采用JavaScript语言开发,服务器端程序采用Java和python混合方式开发;开发工具使Eclipse 4.8.0;Web服务器使用Apache-tomcat-8.0.33 Web Server。

2.1 Maven仓库和Nutz框架

天擎DPC子系统配置文件查看器是基于Maven仓库和Nutz开源框架搭建的。Maven是一个项目管理和综合工具,Maven项目的结构和内容在一个XML文件(pom.xml)中声明,搭建一个Web项目非常便捷。Nutz框架具有轻、全、活、整等特点,整个jar文件共910kB,提供了Dao、Ioc、Aop、Mvc和Json解析等必要功能,开发人员只需把精力集中在核心算法开发即可。

2.2 Java和Python混合开发

Java是一种完全独立的语言,可在任何平台上运行,拥有大量的第三方库和框架,如Spring、Nutz、Hibernate和Apache Kafka等,可以满足各种开发需求,Web应用开发具有明显的优势。Python是一种解释型语言,语法简单明了、功能类库丰富,程序写好后无须编译即可运行。系统总体框架用Java搭建,其中信息采集模块核心算法采用Python语言开发。Ganymed SSH-2 for Java是用纯Java实现SSH-2协议包,通过该包可以远程登录到远程服务器执行Python程序请求的算法实现信息采集,完成天擎DPC子系统配置文件查看器的设计和功能实现。

2.3 内存数据库

数据库主要包括传统的数据库和内存数据库,传统的数据库是将数据库存储到磁盘上,而内存数据库则是将整个数据库放进内存中。内存数据库和传统数据库相比数据部署便捷、维护简单且处理速度更快,非常适用于库表结构简单,数据量小的应用场景[3]。常用的内存数据有SQLite、Altibase、H2、Derby和HSQLDB等。系统选用的是H2内存数据库,是Thomas Mueller提供的一个开源的、纯Java实现的关系数据库,支持JDBC和ODBC API,支持SQL,并支持提供基于浏览器的管理控制台[4]。

2.4 bootstrap-table表格

Bootstrap-table表格插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示以及合并列等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、移动列位置等一些特殊的功能[5]。将数据显示到表格的方式有客户端(client)和服务器(server)2种模式。客户端模式是指在服务器中把要显示到表格的数据转换成JSON格式一次性加载显示的界面中,该模式适合数据量较少的场景。数据量很大时,为了节省资源,则用服务器模式,根据设定的每页记录数和当前要显示的页码,发送数据到服务器进行查询,然后再显示到界面中。系统选用的是客户端模式显示数据。

3 设计与实现

基于Nutz-MVC的DPC子系统配置文件查看器包括服务器信息配置模块、配置文件信息采集模块、配置文件信息存储模块和配置文件信息查看模块,其中配置文件信息采集模块采用Python语言开发,各模块设计实现如下。

3.1 DPC服务器信息配置模块

该模块主要用来配置DPC各节点的基本信息和服务类型,信息采集模块通过读取配置信息远程连接到服务器调用对应程序接口。DPC服务器信息设置模板格式:DPC节点IP,SSH用户,SSH密码,SSH端口,节点服务类型。节点服务类型可以为一个或多个,多个类型用(;)分割,格式如下。

10.*.*.25,usr,pwd,port,DecoderConf_Frename;

FrenameTables

10.*.*.26,,usr,pwd,port,DecoderConf_Frename;

FrenameTables

10.*.*.27,,usr,pwd,port,DecoderConf_Grib;GribTables

10.*.*.28,,usr,pwd,port,DecoderConf_Grib;GribTables

10.*.*.31,,usr,pwd,port,DataRouteConf

10.*.*.34,,usr,pwd,port,DataRouteConf

10.*.*.35,,usr,pwd,port,DecoderConf_Decode

10.*.*.36,,usr,pwd,port,DecoderConf_Decode

其中,DecoderConf_Frename表示非结构化资料解码程序配置信息获取,FrenameTables表示非结构化资料入库策略配置信息获取,DecoderConf_Grib半结构化资料解码程序配置信息获取,GribTables表示半结构化资料入库策略配置信息获取,DataRouteConf表示消息转发配置信息获取,DecoderConf_Decode表示结构化资料解码程序配置信息获取,将该信息存储至service.csv文件中。

3.2 DPC服务器信息采集模块

配置文件信息采集模块是由Python语言开发并封装的算法包,Java主程序读取service.csv文件,获取各个服务器的ssh登录信息及各节点服务类型,通过使用Ganymed SSH-2 for Java工具包,完成远程服务器的连接,并将Pyhton程序名和服务类型传递至接口execPythonScript实现Java-Python的跨语言调用,主要代码如下。

3.3 DPC服务器信息存储模块

配置文件信息存储模块采用的是Nutz框架的dao接口,创建实体类和实体表,主要包括DataRouteConf.java、DecoderConf.java、FrenameTables.java、GribTables.java共4个实体类,对应的表名是datarouteconf、decoderConf、frenameTables和gribTables,分别存储消息转发配置信息、解码程序配置文件信息、非结构化资料入库策略和半结构化资料入库策略等信息。Nutz.dao的使用节省了insert语句的编写,只需一条语句即可完成数据的存储,主要代码如下。

db-driver=org.h2.Driver

db-url=jdbc:h2:file:~/.data/overviewerdb;MODE=MYSQL;D ATABASE_TO_UPPER=

db-username=db-username

db-password=db-password

db-validationQuery=select 1

private Dao dao = Mvcs.getIoc().get(Dao.class,"dao");

result = JSONObject.parseArray(str,DataRouteConf.class);

dao.insert(result);

3.4 DPC服务器信息查看模块

信息查看模块以标签页的方式综合展示天擎DPC子系统配置文件,当有信息变更时点击“重新获取”按钮更新。运维人员在页面发起请求后,通过ajax方式将请求提交至后台获取数据,然后利用Bootstrap-table插件在页面显示。

4 应用效果

4.1 初始化

天擎DPC子系统配置文件查看器部署方便,只需要程序包overviewer.jar上传至能访问DPC服务器的任意台机器,执行nohup java -jar overviewer.jar &,即可完成部署。部署完成后需要访问网站进行DPC节点和数据库连接初始化设置。

4.2 应用效果

自2021年系统上线以来,已经在实际业务中开展应用,应用效果总结如下:1)功能性方面,从运维人员运维角度出发,提供了多个维度的配置文件检索功能,业务人员可以很快获取到有效信息,满足业务求。2)稳定性方面,自运行以来,每个功能和模块都运行稳定可靠,未出现任何故障。3)安全性方面,软件包部署在DPC集群服务器,读取解码入库程序的核心算法只能在DPC集群访问,网页端只提供查看功能,保证了系统的安全性,符合相关网络安全的要求和规范[6]。4)系统扩展性方面,扩展性是系统应对业务变更的能力,扩展性优良可以减少系统开发运维的成本,系统相关参数可通过页面配置修改,核心算法包采用python脚本,修改后项目无须部署即可实现迭代更新。

5 结语

为保障“天擎”实时业务系统稳定运行,为各业务单位提供强有力的数据支撑,设计了天擎DPC子系统配置文件查看器,实现了对DPC集群各服务器的解码入库程序配置文件快速查找,保障了“天擎”数据环境的数据稳定、及时。系统投入业务运行之后,运维人员遇到故障后,能非常高效地查找到对应进程所在,显著地提高了运维能力,对气象信息化高质量可持续发展具有重要的保障意义,改系统迁移方便,仅需要修改对应省份的服务器IP即可完成本地化部署应用,后续将继续根据实际业务需要扩充、完善系统功能。

猜你喜欢
配置文件入库结构化
重磅!广东省“三旧”改造标图入库标准正式发布!
促进知识结构化的主题式复习初探
中国食品品牌库入库企业信息公示①
结构化面试方法在研究生复试中的应用
忘记ESXi主机root密码怎么办
打印机设置
身临其境探究竟 主动思考完任务——《仓储与配送实务》入库作业之“入库订单处理”教学案例
基于图模型的通用半结构化数据检索
批量地籍图入库程序设计方法
基于软信息的结构化转换