李显风 , 邓卫华 , 袁正国 , 胡丽丽 , 周雪莹
江西省气象信息中心, 江西 南昌 330096
多普勒天气雷达能够提供较高时空分辨率探测资料,是中小尺度天气监测的重要手段,对灾害性天气预报预警、精细化气象服务具有重要意义(赵文斌等,2010;薛谌彬等,2015)。自20世纪90年代中期我国开始建设新一代天气雷达观测网,截至2016年底已经完成了全国233部新一代天气雷达建设(谷军霞等,2018),在我国气象业务中发挥了重要作用。为了提高对区域尺度灾害性天气监测以及预警能力,发挥多部雷达在联合监测天气中的作用,需要把多部雷达进行组网拼图,解决单部雷达探测范围有限、数据不确定等局限性问题,以完整地反映多种尺度天气系统的移动和演变过程,在更大范围发挥天气雷达监测灾害性天气的作用。此外,拼图结果还可以为中尺度数值天气模式中雷达资料同化等提供数据基础。
针对雷达拼图产品的实际需求,国内气象学者开展了不同空间尺度的二维和三维雷达组网拼图技术研究与系统建设(肖艳姣和刘黎平,2006;王志斌等,2013;林红等,2019)。由于雷达探测资料时空分辨率高,对资料的数据解码和组网拼图处理耗时长。为实现在一次体扫时间内完成对大量雷达资料的组网处理,现有研究中主要采用多线程或多进程方式实现程序并行化来提高数据处理效率。随着气象业务精细化程度越来越高,这对资料的时效性要求也越来越高。传统方法是通过多核处理器的并行运行方式提高雷达组网拼图处理效率,但此方式的业务逻辑主要以同步方式运行,产品滞后时间较长,不能完全满足精细化气象业务的需求。因此,如何进一步提高雷达拼图产品时效是迫切需要解决的问题。
随着计算机技术发展,高性能计算朝着GPU计算、分布式集群计算等方向发展。而消息中间件是分布式集群系统中实现数据交换的关键组件,其可以在不同的计算机之间异步传递数据消息,能有效满足数据传输的可靠性、安全性和异步性等业务需求(李建峰等,2008)。目前市场上有很多主流消息中间件,如ActiveMQ、RabbitMQ、Kafka、RocketMQ等。消息中间件通过消息队列为分布式应用提供了一种可靠的消息交换机制,采用异步机制提高了并发的效率,目前该技术已广泛应用于气象数据传输和数据处理业务(宋瑛瑛等,2016;鲍婷婷等,2018;王恩文,2018)。
文中应用RabbitMQ消息中间件技术,设计基于分布式、并行的雷达组网拼图处理系统,实现基于探测资料实时生成江西省天气雷达拼图产品,旨在进一步提高天气雷达组网拼图处理效率,以满足精细化气象业务对高时效雷达拼图产品的服务需求。
目前江西省共有南昌、九江、上饶、抚州、宜春、吉安、赣州和景德镇等8部多普勒天气雷达(图1)。雷达采用VCP21体扫模式对9个具体仰角(0.5°、1.5°、2.4°、3.3°、4.5°、6.0°、10.0°、15.0°、20.0°)进行扫描,探测范围约460 km,探测频次为6 min一次,探测数据包括反射率因子、径向速度和速度谱宽三类数据。各站点探测数据通过流传输方式实时传输至江西省气象信息中心,生成统一标准格式的逐仰角和全体扫基数据文件后写入江西省综合气象信息共享平台(CIMISS),从而实现数据共享服务。
图1 江西省雷达站点分布
由于全体扫基数据文件需要等待所有仰角数据到达后才能生成,对全体扫文件进行逐仰角解析,其时效显著滞后于采用逐仰角文件方式。文中采用单站逐仰角反射率因子数据进行雷达组网拼图处理,以提高拼图产品生成时效,实时生成覆盖江西省的逐6 min反射率因子拼图产品。
RabbitMQ是一种开源消息中间件,具有高并发、高可靠和高传输效率等优势,因此文中采用此消息中间件技术实现雷达组网拼图的实时调度处理,流程如图2所示。首先采用数据接口方式实时从综合气象信息共享平台获取最新时次的单站逐仰角雷达数据文件,并对数据文件进行解码处理以提取反射率因子数据,同时将解码后数据消息发送到RabbitMQ消息队列。雷达处理客户端接收到消息后,开始依次进行数据质量控制、网格化处理和数据缓存等消息消费处理并进行消费确认,得到网格化的单站逐仰角反射率因子数据。然后,采用多进程并行方式对单站逐仰角数据进行组网拼接处理,最后对拼接后数据进行图形绘制,得到研究区的雷达拼图产品。
图2 基于消息调度的雷达组网拼图处理流程
3.1.1 RabbitMQ
消息中间件是一种由消息传送机制或消息队列模式组成的中间件技术,通过高可靠的传递机制进行与平台无关的数据交换(徐晶和许炜,2005)。为了使客户端与消息中间件的消息传递不受中间件产品、开发语言等限制,提出了一种面向消息中间件应用层协议开放标准的高级消息队列协议(AMQP)。AMQP规范了众多消息中间件的实现标准,具有高可靠性和安全性的特点。RabbitMQ是遵循AMQP协议标准的一种开源消息中间件,可以运行于Windows、Linux等不同操作系统,同时支持多种开发语言客户端,非常适用于分布式系统中消息的存储转发。RabbitMQ消息队列采用Socket传输协议,服务端支持消息队列的持久性,可以有效保障各个环节流程中数据的完整性。同时,RabbitMQ提供灵活的路由控制转发功能,符合分布式数据处理的业务需求。
RabbitMQ结构由服务端和客户端组成(图3),其中服务端主要由交换主题(Exchange)和队列(Queue)组成,客户端通常有消息发布者(Producer)和消息消费者(Consumer)两种类型。RabbitMQ提供了多种交换主题满足不同业务应用场景需求,包括Direct、Topic、Fanout和Headers四种类型,每种类型为消息的路由提供了不同的路由策略。交换主题负责接收消息,然后根据路由键值(Routing-Key)信息将消息分配给消息队列。RabbitMQ通过交换机制有效降低了消息发布和消息消费的耦合度,其传输模式如图3所示。消息发布者P向主题X发送带有路由键值R的消息,在服务端根据消息路由值将消息转发到对应的队列中,消费者C从队列Q中获取相应消息进行消费处理。
图3 RabbitMQ结构与传输模式
3.1.2 消息调度设计
基于RabbitMQ消息中间件技术的雷达拼图处理服务端Exchange采用Topic主题模式,Topic模式支持路由键值的模糊匹配,通过模糊匹配将队列与Exchange进行绑定,实现一个消息发布到多个消息队列并行处理。为了实现每个单站逐仰角文件实时同步处理,提高雷达数据处理效率,文中按雷达站、仰角类型设计消息队列,建立8(雷达站)×9(仰角)共72个消息队列,每个消息队列负责一个逐仰角雷达基数据处理。消息处理客户端包含雷达数据下载客户端和雷达数据处理客户端两部分。雷达数据下载客户端负责从综合气象信息共享平台实时下载最新时次的雷达基数据文件并进行数据解码处理,按照消息头和消息体的结构进行消息数据封装,将封装后消息发送至对应的消息队列。其中,消息头主要存放文件属性信息,消息体则为解码后实体数据信息。雷达数据处理客户端负责从消息队列实时读取消息体数据,并进行数据质控、数据网格化和数据缓存等消费处理,处理完成后通过ACK机制进行消费确认,并实时监听消息队列更新情况实现消息实时调度处理。
江西地形复杂,雷达探测受地形、建筑物遮挡严重,文中采用回波纹理变化(TDBZ)(Kessinger et al,2003)方法对雷达反射率数据进行质控处理,识别地物等异常回波并加以剔除。具体步骤:
1) 回波孤立点剔除。
为减少孤立点噪声影响,对雷达反射率进行孤立点去除。孤立点计算式为
(1)
式中,N代表以计算点为中心的5个方位角和5个距离库像素内的所有反射率为非缺省值个数;Ntotal(=25)代表所有像素个数。
如果Px小于75%,则将此点标记为孤立点而予以剔除。图4a、b分别为2021年2月1日08:42南昌雷达0.5°仰角反射率因子孤立点剔除前后的分布。对比分析发现,原始反射率数据中的孤立异常回波得到有效剔除。
图4 2021年2月1日08:42南昌雷达反射率因子及其质量控制处理结果(a.原始值,b.孤立点剔除后,c.雷达TDBZ值,d.纹理变化处理后)Fig. 4 Radar reflectivity of Nanchang,and its quality control processing results at 08:42 BT on February 1, 2021 (a.raw reflectivity; b.reflectivity after isolated reflectivity checked; c.radar TDBZ value; d.reflectivity after TDBZ processed)
2) 回波纹理变化处理。
通过计算像素点与同一锥面上7×7像素点反射率因子方差的均值来描述反射率因子水平纹理变化特征。其计算公式为
(2)
式中,TDBZ为雷达反射率因子的TDBZ,单位:dBz;Z为反射率因子,单位:dBz;i、j分别为在不同方位角和距离库方向上像素点的位置;Nbeam、Ngate分别为方位角和距离库个数,均设置为7。
如果TDBZ值大于25.0 dBz,判定该像素点上雷达反射率因子在水平上存在严重不连续,将此点标记为地物回波而予以剔除。图4c给出了2021年2月1日08:42南昌雷达0.5°仰角反射率因子的TDBZ值分布。分析发现,TDBZ高值主要分布在雷达站附近区域,因为在低仰角雷达站附近区域探测回波容易被建筑物和地物遮挡,造成回波不连续。结合图4b分析图4d发现,经回波纹理变化处理后该区域回波不连续点得到明显剔除。
反射率因子数据在雷达基数据文件中采用极坐标方式存储,即以方位、仰角和距离来表示反射率因子相对于雷达的位置。为了方便拼接处理,需要将雷达数据由极坐标格式转化为等经纬度的网格数据。对于每个仰角的雷达数据,采用双线性插值方法将极坐标转换为直角坐标。具体思路是,首先根据直角坐标网格点的经纬度坐标,计算其相对雷达位置的距离和方位角;然后根据距离和方位角坐标找到其相邻的四个极坐标数据点;最后采用双线性插值方法将这四点数据进行插值,得到直角坐标网格点的反射率值。具体计算公式详见文献(王庆东等,2002)。
雷达探测频次为6 min一次,但由于每部雷达体扫启动时间或传输时效不同,往往会导致同一时次的雷达探测数据不能在同一时间点生成。为提高雷达拼图处理效率,避免组网拼图时对单站雷达数据的重复处理,需要将不同时刻生成的单站雷达网格化数据进行缓存处理,等待全部雷达数据处理完毕,直接从缓存中读取数据进行拼图处理。文中采用基于内存运行的Redis缓存技术进行数据缓存处理。Redis采用键值对(Key-Value)存储结构(曾超宇和李金香,2013),通过键值对数据进行存取操作,并可以设置数据缓存期限实现内存空间的动态释放,满足数据实时动态缓存需求。为了便于拼图处理时查找同一时次探测数据,需要对数据缓存时间进行标准化处理。根据逐6 min处理频次,即每小时包括00、06、12、18、24、30、36、42、48、54分钟等10个时次,通过每部雷达实际探测时间以最邻近方法进行时间标准化处理。例如雷达探测时间为08:10,根据上述标准化处理规则数据缓存时间为08:12。在时间标准化处理基础上,遵循Key值唯一性原则,以“雷达站号_仰角_探测标准化时间”格式设计缓存数据的Key值,Value值为质量控制后的网格化反射率因子数据。
雷达组网拼图处理是将单站雷达经过网格化处理后的反射率格点场进行拼接。在拼图网格范围内有很多区域存在来自多部雷达的多个反射率值。对于重叠区域的处理,主要有最大值、平均值和最小距离三种处理方法。为了突出和不遗漏强对流天气,文中采用最大值方法,即取重叠位置多个反射率因子的最大值。由于每部雷达网格场范围不同,传统的拼图处理需要实时计算相邻雷达的重叠区域,该方法操作复杂且处理耗时长。为此,提出一种简便快速的组网拼图方法。具体思路是:首先,根据研究区范围生成一个拼图网格初始场(如1 000×1 000网格点),根据雷达站坐标和体扫网格场计算每个数据点所在的拼图网格点,利用单站反射率因子更新拼图网格初始场,得到每部雷达在相同网格场下的反射率数据。之后,将拼图网格场分成若干个子区域(如100×1 000网格点),分区并行计算每个子区域内网格点的最大反射率值。最后,将每个子区域最大反射率网格场进行拼接得到最终的雷达拼图结果。该方法可以避免对重叠区域的重复计算,还通过分区处理减少了网格点的遍历次数,从而显著提高拼图处理效率。
基于分布式并行设计思想,采用3台服务器搭建雷达拼图分布式处理环境,其中1台服务器用于部署RabbitMQ和Redis服务,2台服务器用于部署RabbitMQ客户端程序,服务器具体配置参数如表1所示。采用Python语言进行程序设计,实现消息调度、数据缓存和组网拼图处理。利用Python pika模块进行RabbitMQ消息通信、消息发布和消息消费等操作,实现单站雷达反射率数据实时处理和数据缓存。利用multiprocessing Pool进程池实现单站雷达反射率多进程并行拼图处理。利用matplotlib、cartopy模块对叠加地图的拼图数据进行可视化显示,实时生成江西省雷达拼图产品。通过消息调度和并行处理技术,显著提升了雷达拼图处理时效,处理总耗时40 s左右,其中数据解码、质控处理、网格化处理和组网拼图所用时长分别为0.6、3.4、9.6、4.0、16.3 s。当然处理耗时还取决于服务器硬件配置与性能指标,本研究使用的服务器均为虚拟服务器,与物理服务器相比,其硬件资源、计算能力有限,如果采用更高性能的服务器还可以进一步提高雷达拼图处理效率。拼图产品空间范围为(112°—120°E,23°—31°N),空间分辨率为0.01°,时间分辨率为6 min。拼图产品包括全部仰角(0.5°、1.5°、2.4°、3.3°、4.5°、6.0°、10.0°、15.0°、20.0°)组合反射率以及逐仰角反射率因子。图5给出了2021年2月10日14:12雷达组合反射率以及0.5°、1.5°、2.4°反射率因子拼图产品。
表1 服务器配置参数
图5 2021年2月10日14:12雷达拼图产品(a.组合反射率,b.0.5°反射率,c.1.5°反射率,d.2.4°反射率)Fig. 5 The radar mosaic products at 14:12 on February 10, 2021 (a.combined reflectivity; b.base reflectivity at 0.5°; c.base reflectivity at 1.5°; d.base reflectivity at 2.4°)
文中设计了一种基于消息中间件技术的雷达组网拼图处理方法,构建基于分布式、并行处理的业务系统,并对拼图处理流程以及消息调度设计、质量控制、网格化处理、数据缓存、组网拼图等关键技术进行了详细阐述。
1) 利用RabbitMQ消息中间件技术,实现了异步数据交互和实时调度处理,较传统多线程同步处理方式,显著提高了雷达资料处理效率。
2) 采用孤立噪声监测和回波纹理变化方法,对雷达反射率因子数据进行质控处理,有效地消除了孤立回波和地物遮挡等异常回波,进一步提高了雷达拼图数据质量。
3) 利用Redis内存缓存技术,实现对质量控制、网格化处理后的反射率因子数据实时在线缓存,消除雷达组网拼图时因时间不同步等带来的影响。
4) 基于重叠区域最大值法的简便快速组网拼图方法,避免对多部雷达重叠区域的重复计算,还通过分区处理减少了网格点的遍历次数,显著提高了大量雷达组网拼接处理效率。
5) 搭建分布式、并行运行环境,实现准实时制作江西省时空分辨率分别为6 min和1 km的雷达拼图产品,能够满足当前精细化气象业务服务需求。
基于消息中间件技术的雷达拼图处理技术能够提高数据处理能力的同时,保障了数据处理的连续性和稳定性,解决了雷达拼图产品时效问题。研制的雷达拼图产品供全省气象业务部门使用,为精细化业务提供了可靠的数据支撑。