APP下载

基于“天擎”的模式产品云化技术研究与实现

2022-01-26夏正龙傅承浩朱亮吕冠儒钟艳雯

现代计算机 2021年34期
关键词:云化容器算法

夏正龙,傅承浩,朱亮,吕冠儒,钟艳雯

(1.湖南省气象信息中心,长沙 410118;2.湖南省气象防灾减灾重点实验室,长沙 410118;3.湖南省气象台,长沙 410118)

0 引言

当今,数值天气预报取得了迅速的发展,数值预报模式和物理过程参数化方案不断完善,数值预报水平在不断提高,数值天气预报已成为每天气象预报的制作不可缺少的重要基础和手段[1-2]。预报员每天面对各类数值模式产品,如何方便快捷地获取模式产品就成为预报业务人员的迫切需求。湖南省气象台技术人员通过Python等工具成功实现将ECMWF细网格、GRAPES全球、GRAPES中尺度高分辨率、GRAPES3KM、日本中分辨率、德国高分辨率、广州3KM、上海中分辨率等模式产品生成对应的图片、文本格式供网站调用显示,包括降水类、动力类、热力类、地面分析类、不稳定指数等共计40多种,每天8∶00、20∶00两个时次,每个时次共计约3.3万PNG图片文件,1.3万JSON文本文件。

气象大数据云平台(“天擎”)2020年11月通过业务验收评审,在全国投入业务试运行,各级气象部门也正逐步开展气象大数据云平台的研究[3-5],“天擎”建立以分布式关系型数据库、分布式分析型数据库、分布式表格系统、分布式文件系统等多种技术相结合的可扩展、高可用的数据存储管理系统,提供结构标准、功能丰富的数据访问服务和应用编程接口,为省、市、县各级以及云上应用提供唯一权威的数据接入服务,本文基于“天擎”所共享的数据、接口、容器三大类资源,研究省台模式产品的云化实现,为推进业务融入改造提供技术支持。

1 数据云化存储

气象数据具有大容量、高速增长、维度高、实时性高、存储时效长等特点,气象数据的类型多,具有结构化数据和非结构化数据的特征,针对不同的气象数据类型,“天擎”采用不同的分布式数据库系统存储策略,数据云化存储主要完成数据注册、数据存储管理,数据注册即分配标准、合规的四级编码[6],纳入业务全流程管理、可面向其他用户进行开发共享的数据或产品的注册;数据存储包括应用专题库、云数据库,专题库可以将自己申请和注册的数据统一分类管理,云数据库向用户提供定制化、高性能、高可靠、易用便捷的存储体系,可用于存储应用系统的元数据信息和应用中间结果。

图1 模式产品文件索引表结构

图2 数据管理工具

模式产品主要以图片、文本格式存储,属于非结构化数据,设计采用“文件+索引”存储方式,选择专题库分类管理,文件存储在NAS中,索引采用文件索引库存储。模式产品包括单模式单要素产品、多模式多要素集成产品等多种类型,因此文件索引表结构设计包含文件的基本信息(文件名、文件大小、文件格式、存储路径、资料时间、产品编码等)和模式产品的关联信息(预报时效、数据范围、时效间隔、预报时间、模式层数、模式名称、要素名称、海拔高度等)两方面内容。通过申请四级编码、填报表结构字段、文件索引数据库选择等,完成数据产品云化结构配置,并利用“天擎”数据管理工具进行文件索引数据记录的管理。

2 接口云化实现

统一、标准、丰富的数据访问服务和应用编程接口(API),为省、市、县各级应用系统提供唯一权威的数据接入服务[7],接口云化实现包括新增接口发布和接口测试,新增数据接口发布完成对注册数据进行接口发布功能,主要实现读取接口和写入接口功能云化,并通过接口测试实现对需测试的接口,填写接口参数,生成并执行接口请求,查看接口返回值,完成新增接口的测试。

新增数据接口发布,根据资料代码,设置参数,配置读取接口和写入接口,实现接口的发布功能,能提供数据的获取、回写等功能,读取接口提供共享服务,写入接口提供产品文件回写到“天擎”存储。

(1)读取接口设计,采用“产品文件”接口属性,设计查询时间跨度及相关限制条件等参数,确定需要的接口清单,实现读取接口配置,正确完成读取接口配置后,可通过对配置的接口进行测试,正确返回数据查询结果后即可共享发布,向用户提供统一、规范的数据访问编程接口。

图3 读取接口配置

图4 读取接口调用测试

(2)写入接口设计采用“产品文件写入”接口属性,设计根路径、写入资料路径等参数,确定需要的接口清单,完成写入接口云化配置。

图5 写入接口配置

完成写入接口云化配置后,可通过写入接口实现数据产品的回写,调用写入接口需要从“天擎”数据环境中获取数据或产品的应用编程开发包,根据开发语言选择相应的客户端开发包,并通过编程调用写入接口函数,按照函数调用参数要求,正确输入接口的各项参数,实现产品或数据的写入功能。

图6 客户端开发包

数据写入代码(Python语言)如下:

def SaveFilesClient(self,fullFileDir,data_ID,RYMDHM,Datetime,FILE_NAME,FORMAT,FILE_SIZE,Validtime_C,Data_Area,V_INTERVAL,Year,Mon,Day,Hour,LEVEL,V_PROD_NAME, V_MO_NAME_1, V_PROD_ELE_1,V_LEVEL_1,V_MO_NAME_2="-",V_PROD_ELE_2="-",V_LEVEL_2="-",V_MO_NAME_3="-",V_PROD_ELE_3="-",V_LEVEL_3="-",V_MO_NAME_4="-",V_PROD_ELE_4="-",V_LEVEL_4="-"):

#1.定义client对象

client=DataStoreClient()

#2.调用方法的参数定义,并赋值

#2.1用户名&密码

userId="###"

pwd="####"

#2.2接口ID(删除站点、指数等数据)

interfaceId="saveFiles"

#2.3服务节点ID

serverId="NMIC_MUSIC_CMADAAS"

#2.4接口参数,多个参数间无顺序

#必选参数(1)资料代码(2)要素字段代码(键值))。

params={‘dataCode‘:"OTHE_NAFP_PRODUCT_PIC_FILE_BECS",‘Elements‘:"DATA_ID,RYMDHM,Datetime,FILE_NAME,FORMAT,FILE_SIZE,Validtime_C,Data_Area,V_INTERVAL,Year,Mon,Day,Hour,LEVEL,V_PROD_NAME,V_MO_NAME_1,V_PROD_ELE_1,V_LEVEL_1,V_MO_NAME_2,V_PROD_ELE_2,V_LEVEL_2,V_MO_NAME_3,V_PROD_ELE_3,V_LEVEL_3,V_MO_NAME_4,V_PROD_ELE_4,V_LEVEL_4"}

#2.5要素值信息

inArray2D=[[data_ID,RYMDHM,Datetime,FILE_NAME,FORMAT,FILE_SIZE,Validtime_C,Data_Area,V_INTERVAL,Year,Mon,Day,Hour,LEVEL,V_PROD_NAME,V_MO_NAME_1,V_PROD_ELE_1,V_LEVEL_1,V_MO_NAME_2,V_PROD_ELE_2,V_LEVEL_2,V_MO_NAME_3,V_PROD_ELE_3,V_LEVEL_3,V_MO_NAME_4,V_PROD_ELE_4,V_LEVEL_4]]

ftpfiles=[fullFileDir];#3.调用接口

result=client.callAPI_to_storeFile(userId,pwd,interfa⁃ceId,params,inArray2D,ftpfiles,serverId)

#4.输出结果

if result.errorCode==0:

print("Upload Files Succeed")

else:

print("return code:",result.errorCode)

print("return message:",result.errorMessage)

3 模式产品生成算法云化

容器技术可以让开发者打包应用及依赖包到可移植容器中,发布到任意版本的Linux服务器上[8],“天擎”提供根据算法任务应用场景对算法进行加载和部署,按需选择计算框架,分配计算资源,容器功能是其中重要的一项功能[9],模式产品生成算法从Cassandra分布式数据库中获取实时模式资料,并插值成统一的分辨率,调用画图等模块实现绘图,绘图类型包括色斑图contourf、等值线图contour、风向图barb、邮票图、单站时序图等,实现了各气压层的气象要素叠加图、不同预报时效的邮票图、不同模式对比的邮票图、单站时间变化垂直剖面图,以及单站的TLOG-P图等,同时还生成单站气象要素json格式的数据文件等,需要通过anaconda工具包提供的Python环境,安装cartopy,meteva,metpy等多种模块,运行环境比较复杂,Docker容器技术提供了很好的解决方案。本文研究将模式产品生成算法所需的Python及相关组件运行环境制作成Docker镜像,部署到“天擎”平台,完成模式产品生成算法的云化。生成Docker镜像的DockerFile文件内容如下:

#Base images基础镜像

FROM python:3.7

#MAINTAINER维护者信息

MAINTAINER xzl

#ADD文件放在当前目录下,拷过去会自动解压

ADD Anaconda3-2020.11-Linux-x86_64.sh/home/py⁃thon/

WORKDIR/home/python

RUN apt-get update

RUN apt-get install sudo

RUN sudo apt update

RUN sh-c‘/bin/echo-e"yes"|sudo apt install libgl 1-mesa-glx‘

RUN sh-c‘/bin/echo-e" yes yes"|sh Anaconda3-2020.11-Linux-x86_64.sh‘

ENV PATH/root/anaconda3/bin:$PATH

WORKDIR/root/anaconda3/bin

RUN sh-c‘/bin/echo-e"yes"|conda install cartopy‘

RUN pip install meteva

WORKDIR/home/python

将生成的Docker镜像部署到“天擎”平台,利用镜像生成容器,再通过容器完成模式产品生成算法的云行。

(1)生成容器。docker run-v$PWD/model:/usr/src/model-w/usr/src/model-it nafppiccreatepy⁃thonenviorment:3.8.1(镜像名:TAG)/bin/bash

(2)启动容器。docker start 86bc8d613b9d(容器ID)

(3)容器外执行代码。docker exec-it 86bc8d-613b9d/bin/bash-c‘cd/usr/src/model&&/root/ana⁃conda3/bin/python3 Simpleplot.py(算法样例)‘

图7 算法容器运行产品样例

4 结语

模式产品为各级气象预报业务人员提供重要的参考数据,“天擎”以其结构标准、功能丰富的数据访问和编程接口,成为各级气象部门进行业务融入的关键。本文基于“天擎”所共享的数据、接口、容器三大类资源,研究如何将大量模式图片产品和json信息产品实现云化,为推进业务融入改造提供技术支持。通过对数据云化存储,接口云化实现,以及模式产品生成算法的云化技术,完成了基于“天擎”的模式产品云化技术的研究和实现,为其他业务系统进行“天擎”融入提供借鉴思路。

猜你喜欢

云化容器算法
难以置信的事情
Travellng thg World Full—time for Rree
学习算法的“三种境界”
算法框图的补全
算法初步知识盘点
IBM中国企业云化实践中心成立
社区教育平台运营策略研究
液体对容器底及容器对桌面的压力和压强
取米