基于消息通讯的数值预报业务系统运行监视和分析技术研发

目录

本技术报告于 2021 年 1 月撰写,并获 2020 年数值预报中心优秀技术报告二等奖

题目:基于消息通讯的数值预报业务系统运行监视和分析技术研发

主要撰写人:王大鹏

中国气象局数值预报中心,北京,100081

摘要

为了向数值预报业务系统产品制作模块提供有效的数据生成通知机制,同时实现对任务运行状态变化信息的实时保存,本文基于消息中间件技术,研发数值预报业务系统运行监视和分析技术,结合国家气象中心统一监控平台,设计并实现NWPC消息平台系统,设计适合数值预报业务系统的产品消息和运行状态变化消息,实现适合不同应用需求的消息发送和存储检索技术,实时发送GRAPES模式业务系统的GRIB2产品生成消息,实现标准时间和运行状态分析等统计分析算法,通过实时检索和实时绘图等技术实现可视化面板。NWPC消息平台系统已在中国气象局数值预报中心的GRAPES数值预报模式业务系统中得到应用,为业务系统维护人员提供直观的系统运行情况和统计信息,为保障数值预报业务系统稳定运行提供参考数据。

关键字:数值预报业务系统;消息中间件;运行监视;统计分析;GRAPES

引言

近年来,中国气象局数值预报中心已通过自主研发建立GRAPES数值天气预报业务体系,实现从区域3-10km到全球25-50km分辨率的确定性和集合预报系统[1]。数值天气预报业务系统通常由多个步骤构成,一般分为资料前处理、模式计算和产品后处理等三个步骤[2]。数值预报中心大部分业务系统都由两个子系统构成,其中模式积分子系统包括资料前处理和模式计算两个步骤,而产品制作步骤在单独的产品后处理系统中。随着气象大数据云平台“天擎”投入业务试运行[3],数值预报中心正在将部分产品制作任务迁移到气象大数据云平台的加工流水线上,但缺乏有效的数据驱动手段。目前正在开发的世界气象中心网站产品制作系统使用基于文件的方式判断模式产品生成情况,数据检测模块需要不断扫描文件目录,判断某个时效的文件是否生成,存在很多不足。模式系统生成的数据文件产品数量较多,文件名缺乏统一规范,编写数据检测模块程序的工作量大,容易出错,不便于扩展。同时,不同系统间无法共享模式产品生成信息。所以,需要一种有效的产品生成通知机制,为产品后处理系统提供新的数据驱动手段。

气象领域已广泛使用工作流软件对数值预报业务系统进行调度监控,包括欧洲中期数值预报中心开发的SMS[4, 5]和ecFlow[6, 7],以及新西兰气象局、英国气象局联合开发的Cylc[8]。数值预报中心已于2017年建立基于SMS的数值预报业务移动监控平台[9],并在2018年随着业务调度软件升级为ecFlow,将平台升级为数值预报业务系统运行监视平台[10]。该平台定时获取ecFlow中所有任务的运行状态,并在发现异常时发送微信报警。但该平台仅能发现运行出错类型的故障,尚未支持其他类型的故障,比如任务运行超时等。实现更复杂故障的自动报警,需要结合历史运行数据,根据当前时次任务状态的时间序列数据进行分析,这就要求保留所有任务运行状态信息。当前使用ecFlow调度的业务系统共有将近10万个任务,如果保存定时获取的所有运行状态,会带来海量的日志数据,不方便存储和分析。绝大部分情况下,数值预报业务系统的任务在同一天中只会运行一次,如果使用任务运行状态变化数据代替任务运行状态数据,会显著减少需要存储的数据量,也使得分析历史数据成为可以实时运行的任务。数值预报中心已研发SMS日志分析工具,获取任务的历史运行状态信息[11]。ecFlow是SMS的升级版,有相似的日志结构。该研究只针对离线数据统计,适合从日志文件中批量读取日志条目进行分析。如果想要实时发现故障,需要及时保存任务状态变化信息并提供实时查询能力。

消息中间件是一种用于数据通讯的中间件技术,可以用来实现不同组件之间的高效消息数据传递,已在气象领域获得广泛应用[12-18]。本文基于消息中间件技术,研究数值预报业务系统运行监视和分析技术,结合国家气象中心统一监控平台,研发数值预报中心消息平台系统,设计适合数值预报业务系统的产品消息和运行状态变化消息,实时发送GRAPES模式业务系统的GRIB2产品生成消息,为产品后处理系统提供消息驱动。研发面向消息数据的发送、存储、统计分析和可视化展示技术,为业务系统维护人员提供直观的系统运行情况和统计信息,为保障数值预报业务系统稳定运行提供参考数据。

1 总体设计

1.1 系统架构

NWPC消息平台系统采用分层结构设计,分为持久层,服务层和应用层,如图 1-1 所示。 持久层保存消息数据和统计分析算法得到的分析数据,采用Elasticsearch数据库保存JSON格式文档。

服务层是系统的核心部分。任务脚本直接或通过代理服务组件向消息中间件发送消息数据;消息中间件组件包含NWPC消息平台使用的RabbitMQ和国家气象中心监控平台使用的Kafka;消息存储组件从消息中间件中读取数据并批量发送给数据库;统计分析组件包含标准时间算法和运行状态分析算法,从数据库中读取消息,并将结果保存到数据库中;可视化服务组件实时从数据库中检索数据,并为可视化面板提供实时绘图服务。

应用层为用户提供可视化和报警功能。NWPC消息平台可视化面板实时展示产品生成时间,同时也提供对历史数据的统计分析功能;NWPC消息平台对接气象中心综合业务感知平台,关键业务信息监视页面展示GRAPES模式产品生成情况,在产品生成延迟时会发送报警短信。

图 1-1 NWPC消息平台系统架构,其中虚线框组件是平台对接的外部系统

1.2 系统功能

NWPC消息平台系统功能主要分为消息发送、消息存储、统计分析、可视化展示和监控报警等五个部分。具体功能如下:

  1. 消息发送:在数值预报业务系统脚本中,按照消息数据的用途,使用命令行程序通过多种方式向消息中间件发送消息数据。对于运行在HPC内部网络的任务,通过代理服务向气象局内网中的消息中间件发送消息。

  2. 消息存储:从多种消息中间件中接收消息数据,并进行预处理,按照不同的索引规则,保存到Elasticsearch数据库中。

  3. 统计分析:使用自助法求置信区间等技术,对存储在数据库中的产品消息数据进行分析,得到产品生成的标准时间段,结果以JSON格式文档形式保存到数据库中;利用确定有限状态自动机等技术,对运行状态序列数据进行分析,得到任务运行的起止时间和运行时长。

  4. 可视化展示:实时展示GRAPES系列模式各个时次逐时效产品的生成时间,支持对历史生成时间的查询,根据用户操作在线展示多种统计图形。

  5. 监控报警:对接国家气象中心的综合业务感知平台,实时发送GRAPES模式GRIB2产品生成消息,为各个时次的产品生成时间设置阈值,当产品生成晚于阈值时间时,向值班人员发送产品生成延迟报警短信。

1.3 消息设计

为了保证整个平台的统一性,NWPC消息平台中的所有消息都表示某种与数值预报业务系统运行相关的事件,并基于JSON格式设计事件消息规范。本研究使用两种消息规范类型:符合国家气象中心统一业务监控平台规范的数值预报产品消息,以及一种适用性更强的通用消息规范。

1.3.1 气象中心消息

国家气象中心已建立统一业务监控平台,基于消息中间件Kafka实现消息系统,制定消息数据规范《国家气象中心消息体设计方案V1.4》。本文根据该规范设计数值预报产品消息格式,表示GRAPES模式原始分辨率GRIB2产品已生成。消息示例如图 1-2 所示。

图 1-2 适用于国家气象中心监控平台的数值预报产品消息格式,表示GRAPES GFS系统2020年12月30日00时次的210时效GRIB2产品在北京时间2020-12-30 13:35:07生成。

其中source字段表示生成产品的模式系统,resultDesc字段由两个字段构成,startTime表示起报时间,forecastTime表示预报时效。

1.3.2 通用消息规范

本研究基于JSON格式设计一种通用的事件消息规范,具有极强的灵活性,可以根据不同的监控需求进行扩展。

通用事件消息包含三个固定字段和一个可变的复合字段。其中app表示发出事件的应用名,type表示事件类型,time表示事件发出时的时间戳,data是键值对形式的数据字段,记录与事件相关的数据。为了保持消息的一致性,每种类型的消息都需要预先定义数据字段。但每个事件消息不一定包含该类型消息所有的数据字段,可以从备选字段中选择需要的字段。也就是说,每类消息还可能有子类型。

图 1-3 通用事件消息结构

事件消息数据字段的一个重要组成部分就是事件的状态。本研究借鉴ecFlow的节点运行状态,为所有事件消息定义统一的事件状态,包含7种状态,如表 1所示。

表 1 事件状态表

状态名说明
unknown未知状态,默认值
complete完成
queued排队
aborted出错
submitted提交
active运行
suspended挂起

基于上述通用事件消息规范,本研究设计两类事件消息:产品消息和运行状态变化消息。

图 1-4 事件消息示例。(a) GRAPES全球预报系统原始分辨率GRIB 2产品完成上传二级存储的消息;(b)世界气象中心网站图片制作系统FTP上传任务开始运行的消息

产品消息

产品消息用于记录与产品制作、分发等步骤相关的事件,由三部分构成:产品信息(Production Info)定义事件描述的是何种产品,比如GRIB2数据产品或图片产品等;产品属性(Production Properties)描述在某产品系列中某个特定产品的属性,比如预报时次和预报时效等,不同产品可能包含不同的产品属性,比如集合预报模式产品会包含代表集合成员序号的属性;产品事件(Production Event)包含事件状态和事件类型,比如产品已生成、产品已完成上传等。

运行状态变化消息

运行状态变化消息用于记录基于ecFlow构建的业务系统中每个作业的运行情况,比如任务开始运行、运行结束、运行出错等。该类消息主要用于记录作业脚本与ecFlow服务之间的通讯,也就是对ecflow_client命令的调用。消息数据字段包括执行的子命令,子命令参数列表,以ecf开头的一组与命令执行相关的变量,比如表示作业节点路径的ecf_name,表示作业ID号的ecf_rid,表示业务系统当前日期的ecf_date等。另外,为了保持扩展性,数据字段中还包括附加的环境变量列表。

1.4 存储设计

本研究使用数据库Elasticsearch存储消息数据。Elasticsearch支持JSON文档。数值预报产品消息中部分字段不适合统计分析,部分字段不参与统计分析,所以平台的消息存储组件对该消息进行重组,删除不需要的字段,将新生成的JSON数据保存到数据库中。通用消息面向统计分析需求设计,直接保存到数据库中。平台为不同类型的消息设计不同的索引定义规则,按消息生成时间字段(datetime或time)将数据保存到不同的索引中。产品消息因单个时次数据量较小,逐月保存;运行状态变化消息数据量较大,逐日保存。

2 关键技术实现

2.1 消息发送

消息发送既要考虑时效,也要考虑降低对业务系统流程的影响。本研究针对不同的事件消息场景设计并实现不同的消息发送方式。

2.1.1 产品消息

数值预报业务系统产品制作一般分为三个步骤。(1)监视输出:检测模式积分任务是否输出计算结果,使用单一任务循环检查文件是否存在,一般运行在HPC的登录节点;(2)生成产品:根据模式输出结果制作产品,一般运行在HPC的串行和并行计算节点中;(3)分发产品:使用文件拷贝或FTP传输,需要与HPC外部通讯,一般运行在HPC的串行节点或登录节点。NWPC消息平台目前使用两种产品事件消息,对应于上述不同步骤:表示GRIB 2产品已生成的消息对应步骤(2);表示GRIB 2产品已上传到二级存储的消息对应步骤(3)。本研究根据产品消息的应用场景,使用不同方式发送以上两种产品事件消息。

图 2-1 GRAPES 模式业务系统中产品事件消息发送的两种方式:(1) 在现有脚本中集成(NMC Message);(2) 使用单独的消息发送任务(NWPC Message)。

脚本集成

将事件消息发送命令加入到已有任务脚本中,是最简单的集成方式,无需对现有系统的结构进行修改。GRIB 2产品生成消息目前使用这种方式。该消息用于统计产品生成的时间,需要在产品生成后尽快发送。最直观的方法就是将消息发送命令放到产品制作任务脚本的最后。但实践中我们往往将产品生成与分发拆分为两个相关联的任务:产品制作任务只负责产品生成,不与系统外部进行交互;产品分发任务由产品制作任务驱动,与外部进行通讯。产品制作任务可能运行在无法与外界进行通讯的计算节点上。所以NWPC消息平台将产品生成消息发送命令放到分发任务脚本的开头,既符合将产品生成与分发相分离的要求,也能在第一时间发送消息,不受后续分发操作的影响。

这种方式存在一定的弊端:(1) 如果产品分发任务执行失败并重新运行,对于同一个产品文件,会产生多条消息记录,需要后端应用对重复消息进行额外处理;(2) 业务系统为了保证分发任务执行稳定,会限制同时运行的任务数。分发任务可能会因作业数限制而延迟启动,影响产品生成消息按时发送。另外,某些极端情况下,部分上传任务持续处于运行状态,其他上传任务无法运行,导致产品生成消息无法发送。

消息发送任务

为产品事件创建单独的发送任务可以解决消息重复发送的问题。GRIB 2产品完成上传二级存储的消息目前使用这种方式。该消息计划用于驱动部署在气象大数据云平台加工流水线上的产品制作任务,使后续系统无需重复监视二级存储中文件的到达情况。产品上传任务一般运行在HPC的串行计算节点或其它专用传输节点上,受队列节点数限制。而消息上传任务运行时间通常在2秒以内,资源消耗较少,所以可以直接在ecFlow服务运行节点(即HPC登录节点)上运行,不占用计算节点,不会因作业排队而带来额外的时间延迟。

这种方式也存在一定的弊端:(1) 额外创建任务需要重新设计现有ecFlow系统,不方便进行集成;(2) 如果为发送消息增加大量任务,可能会给整个ecFlow系统带来额外负担,包括处理依赖关系、生成作业脚本等,同时也不利于系统维护。

2.1.2 运行状态变化消息

NWPC消息平台对任务脚本使用的ecflow_client命令进行封装,向消息平台发送运行状态变化消息,作为任务运行状态变化的数据。后端应用可以从消息队列中获取该数据,从而对业务系统的运行状况进行实时监控。对ecflow_client命令的封装需要满足以下原则:(1)不影响任务正常运行,包括与ecFlow服务的通讯;(2) 对现有业务流程影响最小,仅需要少量修改即可启用或关闭;(3) 以附加组件的形式存在,各个系统间互不影响。根据以上原则,本文设计封装ecflow_client发送运行状态变化消息的方案,如图 2-2 所示。通过配置环境变量PATH,将任务脚本中ecflow_client路径指向封装后的工具脚本,在该工具脚本中调用实际ecflow_client命令,并额外向NWPC消息平台发送消息。业务系统仅需在所有任务都会加载的头文件(例如head.h)中调用修改环境变量的集成脚本,即可启用或关闭消息发送功能,无需修改其他脚本。为了不影响业务系统的正常运行,对消息发送命令中与消息中间件通讯的关键耗时环节添加时间限制,超过时限会强制终止消息发送,保证增加的消息发送步骤不影响后续脚本的正常运行。目前时间限制是2秒。

图 2-2 封装ecflow_client命令发送运行状态变化消息示意图

2.1.3 消息代理

数值预报中心目前使用的高性能计算机系统CMA-PI由三种节点组成:计算节点、前后处理节点和管理登录节点。CMA-PI内部使用高速计算网络连接,与外界网络隔离,仅有前后处理节点和管理登录节点与中国气象局局域网相连。计算节点属于CMA-PI作业调度系统Slurm中的并行队列,前后处理节点属于串行队列。数值预报业务系统的ecFlow服务程序运行在管理登录节点上,大部分任务会被提交到调度系统的并行队列和串行队列。NWPC消息平台使用的消息中间件运行在与CMA局域网相连的气象大数据平台中,无法与CMA-PI的高速计算网络进行通讯,需要有效的方式解决并行任务与消息中间件的通讯问题。本文设计并实现一种消息代理服务,通过转发消息解决CMA-PI并行计算节点与CMA局域网无法通讯的问题。

设计

管理登录节点同时与HPC高速计算网络和气象局局域网连接,本文在HPC的管理登录节点上运行后台服务程序,提供消息代理转发服务。该服务接收从HPC计算节点通过高速计算网络发送的事件消息,并通过CMA局域网转发给消息中间件。消息代理服务的数据流如图 2-3 所示。代理服务运行在CMA-PI的登录节点上,并在高速计算网络上开放端口用于接收消息。计算节点上运行的作业脚本调用消息发送客户端程序,通过端口向代理服务发送消息,代理服务接收消息后会通过CMA局域网将消息转发给消息队列。

图 2-3 消息代理服务数据流图,代理服务部署在HPC登录节点中

消息代理服务的数据接口由两部分组成:事件消息以及消息中间件的连接信息。本文为不同的消息中间件开发不同的数据接口,每种数据接口都包含相同格式的表示事件消息的字节流字段(Message),并针对不同中间件的需求定义不同的连接目标字段(Target)。目前已为RabbitMQ和Kafka开发数据接口,如图 2-4 所示。

图 2-4 消息代理服务数据接口,左图是RabbitMQ消息接口,右图是Kafka消息接口,其中Kafka接口支持多个Broker地址。

消息通讯

基于远程过程调用技术(RPC)构建消息代理服务的数据接口,使用gRPC实现网络通讯服务,使用protobuf实现消息的序列化。Protobuf全称 Protocol Buffer,是Google开发的序列化开源库,支持多种编程语言,具有良好的扩展能力[19]。gRPC也是由Google开发的远程过程调用开源库,提供多种编程接口。消息代理服务基于gRPC的GOLANG接口开发,使用协程处理每个请求。协程是一种可以被挂起和恢复的子程序,可以在单个线程中同时执行多个协程,不需要进程切换和锁机制,执行效率更高,资源占用更小,因此使用协程实现代理服务可以有效提高服务的吞吐量,保证消息转发步骤的高并发。

超时与重连机制

为了保证消息代理稳定运行,对转发消息到消息中间件的步骤进行时间限制,超过时限的发送过程会被强制终止。同时,为进一步提高消息发送成功率,代理服务使用消息重新发送机制。重新连接消息中间件的时间限制会被逐步放宽,目前使用的时间限制策略是发送次数乘以2秒,最多发送2次。在超时和重连机制的配合下,消息代理服务既能最大程度保障消息转发,又不会因为消息发送延迟,积压大量客户端连接协程,导致代理服务占用过多资源。

高可用:服务监控

消息代理服务部署在CMA-PI的登录节点上。为了保证服务持续稳定运行,本文基于ecFlow构建HPC登录节点后台服务监控系统,定时检查服务程序是否正常,在检测到异常时自动重启服务。服务监控系统的运行流程如图 2-5 所示。

图 2-5 基于ecFlow的后台服务监控系统运行流程示意图

2.2 消息存储和检索

本研究使用Elasticsearch数据库存储发送到消息队列中的消息数据。逐条向Elasticsearch发送数据的效率太低,NWPC消息平台使用Elasticsearch的Bulk API批量发送数据。发送数据既要考虑采用批量发送减少请求次数,也要考虑到消息的时效性。本研究的数据存储组件采用如下策略:(1) 接收消息,保存到暂存数组中;(2) 如果消息数目超过发送阈值,发送消息;(3) 等待超过一定时间阈值,将暂存数组中的消息全部发送;(4) 如果发送失败,保留暂存数组数据;(5) 如果暂存数组大小超过发送阈值的一定倍数,程序直接退出。消息存储组件向Elasticsearch批量发送数据的流程图如图 2-6 所示。

图 2-6 从消息队列Kafka接收消息并存储到ElasticSearch的流程示意图

消息存储组件在一个Goroutine (Reader Goroutine)中从Kafka队列读取消息,并将消息发送到消息通道(message channel)中。主Goroutine (Main Goroutine)的核心是一个无限循环,循环中使用select语句等待两个事件:(1) receive:从message channel中接收一个消息;(2) timeout:等待超过一定的时间阈值。接收消息后,会将消息保存到暂存数组(Message Bag)。如果缓存数量超过发送阈值(bulk size),会将全部缓存数据发送到Elasticsearch中。发送成功后,会清空暂存数组。发送失败,则直接进入下一次循环。超时事件发生后,会将暂存数组中所有的数据都发送给Elasticsearch中。图中省略了对暂存数组超过阈值一定倍数则程序出错的步骤。

Elasticsearch默认检索数据量为10000,为了使用单个检索获取统计分析需要的全部数据,本研究使用Elasticsearch的Scroll API批量检索数据,并将检索结果封装到Python生成器中,提供方便使用的集成接口。

2.3 统计分析

本研究面向NWPC消息平台中的消息数据设计两种统计分析算法,计算产品生成的标准时间和系统任务运行的情况。

2.3.1 标准时间算法

数值预报业务系统的前处理步骤需要从多种来源获取观测数据,包括HPC共享存储、CIMISS、FTP等,并对这些资料进行处理,转为模式系统可以识别的输入数据。受HPC文件系统I/O速度、网络传输速率、数据接口响应时间等因素影响,每个时次的资料前处理步骤运行时长会有一定的浮动。模式同化和模式积分等计算任务需要使用大量计算节点,不同时次模式计算步骤的运行时长有一定的浮动。产品后处理涉及大量文件系统I/O操作,运行时间也会有一定的浮动。综上所述,数值预报业务系统各个时次的运行时间段常常不够稳定,模式产品的生成时间通常会在一定的区间范围内浮动。所以,需要一种有效的方法计算模式产品的标准生成时间段。

本研究实现一种计算标准时间段的方法。使用NWPC消息平台产品事件消息类型中的原始分辨率GRIB 2产品完成上传二级存储的消息作为产品生成的时间数据。因为产品生成时间的波动性,使用单一时间(例如平均值)不能很好地代表产品生成的普遍情况。本研究将产品标准时间表示为一个时间段,使用置信区间的上下界作为时间段的两个端点。对于某个特定时效的产品,一天只有一个数据,计算置信区间的数据量太少,容易受到离群值的影响。本研究使用自助法计算置信区间,对数据进行多次重采样并求均值,得到均值数据,再计算均值的分位数,得到置信区间的上下界,计算方法如图 2-7 所示。

图 2-7 自助法计算95%置信区间作为标准时间的上下界

2.3.2 运行状态分析算法

NWPC 的数值预报业务系统使用工作流软件ecFlow搭建,每个业务系统由大量有依赖关系的任务组成。NWPC消息平台为ecFlow系统设计运行状态变化消息,记录业务系统中每个任务的运行状态变化信息。每天滚动循环中,每个任务会产生多条状态变化消息记录,形成一个状态变化序列。值班人员更关心某个时次某个任务的运行情况,比如运行的起止时间,运行持续时间等具体信息。虽然可以从状态变化序列中人工计算得到,ecFlow UI中也提供类似的统计功能,但这两种方式仅适合对有限任务进行少量分析。为了实现对长时间序列的批量分析,需要设计一种自动分析运行状态的方法。

本研究使用 NWPC 消息平台的运行状态变化状态消息作为输入数据,设计并实现一种基于确定有限状态自动机的业务系统运行状态分析算法,可以计算任意任务的运行情况。

确定有限状态自动机(deterministic finite automaton, DFA)是由一组状态的有限集合和每一个状态的转移函数构成,对于一个给定输入符号,它都能根据事先给定的转移函数转移到下一个状态[20]。本研究基于DFA设计统计业务系统任务运行情况的算法,用于计算正常情况下任务的运行起止时间以及运行时长。算法示意图如图 2-8 所示。DFA包括6种状态:initial(初始状态),submit(任务已提交),activate(任务已运行),complete(任务已完成),error(任务出错),unknown(未知状态)。其中 complete,error和unknown是终止状态,算法仅在终止状态是complete时计算运行起止时间和时长。DFA包含4类事件,对应任务运行状态变化数据:submit(任务提交),init(任务运行),complete(任务完成),abort(任务出错)。正常情况下,DFA起始状态是initial,接收submit事件变为submit状态,接收init事件变为activate状态,接收complete事件变为complete状态。算法根据上面三个事件发生的时间计算任务运行的起止时刻和运行时长。

图 2-8 计算任务运行状态的DFA示意图,包括6种状态和4类事件

2.4 可视化展示

本研究基于Web技术开发在线可视化面板(Dashboard),为业务系统维护人员提供直观的系统运行情况和统计信息。可视化面板采用前后端分离的架构,后端服务基于Flask框架实现,前端页面使用Vue.js框架和Vuetify界面库。统计图形的可视化使用Bokeh库实现。Bokeh是面向现代浏览器的交互可视化库,支持使用Python生成Web图形。可视化面板在线生成图形的流程如图 2 9所示。前端网页通过前端框架Vue.js向后端服务的API接口发送请求。后端服务接收绘图请求后,从Elasticsearch数据库中检索需要的数据,使用Bokeh库绘制图形,生成表示图形的JSON数据块,返回给前端框架。前端框架调用Bokeh的JavaScript组件BokehJS库在页面上渲染图形。

图 2-9 可视化面板在线生成统计图形流程示意图

3 应用

基于消息通讯的数值预报业务系统运行监视和分析技术研发的NWPC消息平台,已在中国气象局数值预报中心的GRAPES数值预报模式业务系统中得到应用。

3.1 气象中心监控平台

GRAPES系列模式的产品消息已集成到国家气象中心综合业务感知平台中,包括GRAPES GFS,GRAPES MESO 10KM和GRAPES MESO 3KM三个模式系统。当数据产品没有按时生成时,国家气象中心运控平台会发送报警短信。图 3-2 是2020年11月12日中午发送的报警短信,提醒GRAPES GFS 00时的产品没有按时生成。

图 3-1 国家气象中心关键业务信息监视页面展示GRAPES模式产品的完成情况

图 3-2 国家气象中心运控平台发送的报警短信,报警发送时GRAPES GFS 00时产品生成时间阈值是13:30

3.2 标准时间算法

使用标准时间算法统计GRAPES GFS,GRAPES MESO 10KM,GRAPES MESO 3KM和GRAPES TYM四个模式所有时次的产品生成情况。使用2020年9月1日至11月30日共61天的数据,重采样10000次,每次选择20个样本,计算95%置信区间。产品生成标准时间段计算结果如下表所示,阴影区域表示 95% 置信区间。

GRAPES GFS 全球预报系统每天运行4次,其中00和12时次生成240小时预报产品,06和18时次生成120小时预报产品。结果显示,四个时次标准时间的区间都在20-30分钟之间。

GRAPES MESO 10KM区域预报系统每天运行2次,每次生成84小时预报产品。结果显示,两个时次的标准时间的区间在10-20分钟之间,12时次比00时次更稳定。

GRAPES MESO 3KM区域高分辨率预报系统每天运行8次,每次生成36小时预报产品。结果显示,标准时间的区间在20-60分钟之间。03和15时次中间时效有明显的突起现象,表明该算法尚需进一步改进。

GRAPES TYM区域台风预报系统每天运行4次,每次生成120小时预报产品。结果显示,标准时间的区间在15-30分钟之间。00和18时次中间时效有明显的突起现象,同样说明该算法尚需进一步改进。

表 2 GRAPES系列模式产品生成时间段 (GRAPES GFS,GRAPES MESO 10KM,GRAPES TYM)

表 3 GRAPES系列模式产品生成时间段 (GRAPES MESO 3KM)

根据以上标准时间统计结果,本研究为GRAPES GFS和GRAPES MESO 3KM系统设置国家气象中心统一监控平台产品延迟的报警时间阈值,如表 4所示。

表 4 GRAPES模式产品延迟报警时间阈值

系统时次报警时间阈值(北京时间)
GRAPES GFS0014:00
0619:30
1202:00
1807:30
GRAPES MESO 3KM0014:40
0316:20
0619:00
0922:00
1202:40
1504:20
1807:00
2110:00

3.3 运行状态分析算法

运行状态变化消息已在世界气象中心网站图形制作系统(globalchartos)中进行实时测试。图 3-3是使用运行状态分析算法计算globalchartos系统2020年12年26日00时次某任务的运行情况,该任务于05:08:24 UTC开始运行,到05:12:10 UTC运行结束,共运行3分42秒。

{
  "situation": "complete",
  "time_periods": [
    {
      "start_time": "2020-12-26 05:08:24+00:00",
      "end_time": "2020-12-26 05:12:10+00:00",
      "period_type": "in_all"
    },
    {
      "start_time": "2020-12-26 05:08:24+00:00",
      "end_time": "2020-12-26 05:08:24+00:00",
      "period_type": "in_submitted"
    },
    {
      "start_time": "2020-12-26 05:08:24+00:00",
      "end_time": "2020-12-26 05:12:10+00:00",
      "period_type": "in_activate"
    }
  ],
  "time_points": [
    {
      "status": "submit",
      "time": "2020-12-26 05:08:24+00:00" 
    },
    {
      "status": "init",
      "time": "2020-12-26 05:08:24+00:00" 
    },
    {
      "status": "complete",
      "time": "2020-12-26 05:12:10+00:00" 
    }
  ]
}

图 3-3 运行状态分析算法计算得到的globalchartos某任务运行情况

运行状态分析算法支持批量统计任务的运行状态。下图是globalchartos系统/globalchartos/00/initial任务在2020年12月的运行情况。该任务定时检测GRAPES GFS系统的GRIB 2产品是否生成。第一张图是任务运行持续时间,第二张图是任务起止时间段,可以看到12月28日00时的GRIB 2产品生成较晚。

图 3-4 globalchartos系统数据检查任务2020年12月运行情况,使用Bokeh绘制。上图是任务运行时长,下图是任务开始运行时间(蓝线)和运行结束时间(绿线)。

3.4 可视化面板

NWPC消息平台基于标准时间开发可视化面板,可以逐时效查看产品的生成时间,红色表示该时效产品生成时间已超过标准时间上界,支持实时数据和历史数据,如图 3-5 所示。

图 3-5 NWPC消息平台可视化面板。红色表示该时效产品生成时间晚于标准时间段上界。

可视化面板还支持对历史数据的统计分析显示。图 3-6 中第一行两张图是 MESO 3KM 模式 12 时次全时效产品生成时间折线图,蓝色线是产品实际生成时间,绿色区域表示标准时间的上下界。正常情况下,蓝线始终在绿色区域内,但图(b)显示的异常时次中,蓝线都在绿色区域外部。第二行两张图是单个时效的历史生成时间图,可以看到模式产品的生成时间不够稳定。

图 3-6 可视化面板的统计图形。(a)GRAPES MESO 3KM 12时次产品生成正常;(b)GRAPES MESO 3KM 12时次产品生成延迟;(c)GRAPES GFS 00时次240h时效;(d)GRAPES MESO 3KM 00时次36h时效

4 结论

本研究基于消息通讯技术,研究数值预报业务系统运行监视和分析技术,设计并实现NWPC消息平台系统。

  1. 设计适合数值预报业务系统的产品消息,具有很强的扩展性,为数值预报业务系统提供一种有效的数据生成消息通知机制。

  2. 设计运行状态变化消息,采用代理服务解决网络通讯问题,实现对任务运行状态变化信息的实时保存。

  3. 实现标准时间和运行状态分析等面向消息数据的统计分析算法,通过可视化展示等技术实现基于Web的可视化面板,为业务系统维护人员提供直观的系统运行情况和历史统计信息。

  4. 实现与国家气象中心统一监控平台对接,实时发送GRAPES模式业务系统的GRIB2产品生成消息,在产品生成延迟时发送报警短信。

NWPC消息平台系统已在中国气象局数值预报中心的GRAPES数值预报模式业务系统中得到应用,为保障数值预报业务系统稳定运行提供参考数据。但本研究仍存在不足,比如代理服务仍可能发生单点故障,消息发送程序需要支持连接多个代理服务;标准时间计算方法有待改进,需要研究如何处理离群点。

未来将进一步完善NWPC消息平台系统,在产品生成消息和状态变化消息基础上增加更多的消息类型,例如观测资料数据缺失、背景场数据缺失、系统自动处理等通知类型的消息,在尽量保障业务系统流程不中断的前提下自动记录系统运行相关信息。同时将结合本研究进一步开展异常自动报警等方面的研究,提高数值预报业务系统自动化运维水平。

参考文献

[1] 沈学顺, 王建捷, 李泽椿, 等. 中国数值天气预报的自主创新发展 [J]. 气象学报, 2020, 78(3): 451-476.

[2] 佟华, 胡江林, 张玉涛. GRAPES模式后处理技术改进应用研究 [J]. 气象科技, 2020, 48(4): 511-517.

[3] 中国气象局. 气象大数据云平台1.0版本将业务试运行[EB/OL] (2021.1.12)[http://www.cma.gov.cn/2011xwzx/2011xqxxw/2011xqxyw/202012/t20201201_567603.html.

[4] 胡江凯, 王雨, 王毅涛. 国家气象中心T213L31数值预报运行监控方案及预报效果评估 [J]. 应用气象学报, 2005, 16(2): 249-259.

[5] 赖安伟, 王明欢, 陈晓霞, 等. 基于SMS的华中区域中尺度数值天气预报系统设计和实现 [J]. 气象科技, 2017, 45(1): 52-58.

[6] 张志远, 孙立尹, 何锡玉, 等. 海洋环境数值预报业务综合运维平台设计与实现 [J]. 海洋预报, 2019, 36(3): 63-70.

[7] 杜牧云, 赖安伟, 李俊, 等. 基于ECFLOW实现华中区域快速更新同化预报业务流程 [J]. 气象科技, 2019, 47(1): 179-185.

[8] OLIVER H, SHIN M, MATTHEWS D, et al. Workflow Automation for Cycling Systems [J]. Computing in Science & Engineering, 2019, 21(4): 7-21.

[9] 王大鹏, 崔应杰, 胡江凯. 数值预报业务系统移动监控平台的设计与实现 [J]. 气象科技, 2018, 46(5): 892-898.

[10] 王大鹏. 派-曙光数值预报业务监控系统的设计与实现 [R]. 北京: 中国气象局数值预报中心, 2019.

[11] 王大鹏. 基于SMS的数值预报运行日志分析系统; 第34届中国气象学会年会 [C]. 中国河南郑州, 2017.

[12] 鲍婷婷, 陈鹏, 李玉涛. 基于消息中间件技术的分布式气象数据同步系统设计和实现 [J]. 气象科技, 2018, 46(6): 1124-1129.

[13] 王慕华, 唐卫, 丰德恩, 等. 基于消息驱动的气象图形产品加工系统 [J]. 气象科技, 2018, 44(5): 692-698.

[14] 孙超, 霍庆, 任芝花, 等. 地面气象资料统计处理系统设计与实现 [J]. 应用气象学报, 2018, 29(5): 630-640.

[15] 胡争光, 魏丽, 薛峰, 等. 世界气象中心(北京)全球预报服务共享平台设计与实现 [J]. 气象科技, 2019, 47(4): 581-591.

[16] 胡英楣, 王甫棣, 谭小华, 等. 有状态消息队列在国内气象通信系统的应用 [J]. 计算机系统应用, 2020, 29(3): 121-126.

[17] 丰德恩, 唐卫, 王慕华, 等. 基于WebGIS的气象服务产品自动加工关键技术 [J]. 气象与环境科学, 2020, 43(1): 130-136.

[18] 胡争光, 薛峰, 金荣花, 等. 智能网格预报应用分析平台设计与实现 [J]. 气象, 2020, 46(10): 1340-1350.

[19] 黄斌, 谢艳新, 唐友, 等. 数据存储信息序列化完整性及效率评估仿真 [J]. 计算机仿真, 2020, 37(4): 159-163.

[20] 陆琳琳, 田野. 基于确定有限状态自动机的改进多模式匹配算法研究 [J]. 计算机应用与软件, 2013, 30(7): 321-323,330.

参考

更多技术细节,请浏览本博客 nwpc-message 标签。