APP下载

CTS2.0消息封装及交换控制策略设计及实践

2018-04-02张来恩王鹏韩鑫强

关键词:键值台站队列

■ 张来恩 王鹏 韩鑫强

国内气象通信软件系统第二版(CTS2.0)在国内通信系统现有能力的基础上增加了消息和流两种通信传输模式,提升了实时气象数据高时效传输能力,为统一国家级、省级及省以下通信传输技术体制,提升对气象综合观测系统、气象预报预测系统和气象公共气象服务系统的通信传输支撑和保障能力提供了有效的技术保障。

国内气象通信系统是承担国内气象资料和产品收集、以及国内外气象资料和产品的国内分发的业务系统。随着现代气象业务快速发展,气象数据的种类、数量日益增加,关键业务资料观测、更新频次达到分钟级,传输时效要求达到秒级。现有国内气象通信系统(CTS1.0)仅支持国家级和省级间基于文件的数据传输,难以满足未来统一省以下通信传输技术体制,支持多种类、高频次、大容量实时气象资料的高时效传输。国内气象通信软件系统第二版(CTS2.0)在国内通信系统现有能力的基础上增加了消息和流两种通信传输模式,提升了实时气象数据高时效传输能力,为统一国家级、省级及省以下通信传输技术体制,提升对气象综合观测系统、气象预报预测系统和气象公共气象服务系统的通信传输支撑和保障能力提供了有效的技术保障。

本文针对CTS2.0系统中消息通信传输模式进行说明,并对气象数据如何使用消息中间件进行传输、消息中间件技术选型、消息中间件工作模式选择、以及观测数据消息封装、消息中间件交换控制策略等内容做出较为详细的介绍。

1 气象观测数据

随着科技的发展气象要素观测逐渐由人工观测转变为自动观测,观测数据产生的频次也大幅提升,表1为国家级地面自动站观测数据类型和频次。

表1 地面自动站观测数据类型

可以看出,目前国家级地面自动站至少每分钟会产生三条报文,分别是地面分钟观测数据、气象辐射分钟观测数据和地面自动站运行状态设备信息。在每小时00分会产生两条报文,分别是地面小时观测数据和气象辐射小时观测数据,同时还会不定时产生酸雨数据和台站元数据;这些观测数据的大小都在1KB左右。使用消息中间件技术进行观测数据的传输,在保证传输可靠性的同时,还能较大提高观测数据从观测台站到国家级的传输时效,而且整个过程均不需落盘形成文件,减少了磁盘I/O等中间环节。

2 消息中间件与RabbitMQ

1)消息中间件

消息中间件是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。消息中间件适用于需要可靠的数据传送的分布式环境,能在不同平台之间通信,可用来屏蔽掉各种平台及协议之间的特性,实现应用程序之间的协同,其优点在于能够在客户和服务器之间提供同步和异步的连接,并且在任何时刻都可以将消息进行传送或者存储转发。

2)RabbitMQ

高级消息队列协议(Advanced Message Queuing Protocol,AMQP),是应用层协议的一个开放标准,为面向消息的中间件设计。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Java、JMS、C等。在分布式系统中存储转发消息的场景,其易用性、扩展性、高可用性等方面表现不俗。RabbitMQ采用TCP Socket传输协议,服务端支持消息队列持久化能有效保证数据在各个环节的完整性,同时RabbitMQ提供灵活的路由控制转发功能符合气象数据传输的业务需求。

RabbitMQ 服务端主要由主题(Exchange)和队列(Queue)组成,客户端通常有发布者(Producer)和消费者(Consumer)两种类型。服务端主题负责接收消息和路由信息,然后将消息按照某种策略分配给队列。队列是一个缓冲区,消息队列可以代表消费者应用程序保存信息,应用程序在其权限范围之内可以自由创建、共享、使用和消费消息队列。消息队列提供有限制的先进先出机制,服务端会将从某一个发布者发出的同等优先级的消息按照它们进入队列的顺序传送给某一个消费者。主题和队列可以进行配置,实现不同的工作模式,消息队列也可以选择是否进行持久化、设置消息队列长度等配置。发布者P向主题X发送带有标识(RoutingKey)的消息,在服务端根据消息标识将消息转发到对应的队列中,消费者从队列中获取消息,传输模式如下图1所示。

图1 RabbitMQ消息传输模式

3 观测数据消息封装

结合国家级地面自动站观测数据的特点和消息中间件RabbitMQ技术特点,利用消息中间件进行观测数据的传输,需要制定数据在传输过程中的格式。好比传统文件传输,需要制定数据的文件名命名规范一样,消息传输需要设计消息的封装格式。

RabbitMQ传输格式包括消息头和消息体,消息头中可用Key-Value键值对的形式存放信息,根据这一技术特点,在CTS2.0中将观测数据的传输属性放入消息头中,报文信息放入消息体。传输环节中无需对报文进行解码,而仅需通过读取消息头中的属性信息即可完成站号、观测时间等监视信息的提取,减少在传输环节的处理成本。

消息属性信息采用键值对的模式放入到消息头(Message Header)中,在设计消息属性时,遵循以下几个原则:(1)属性内有唯一标识,可以进行唯一性区分,用于排查重复客户端的重复报,唯一标识采用随机编码方式(UUID);(2)可根据消息属性进行路由转发,通过读取属性就能知道消息来自哪里,可根据业务需求进行转发;(3)可根据消息属性完成监视信息读取,属性中包含站号IIiii、资料类型type、观测时间OBSTime等监视信息;(4)可根据消息属性完成传输过程中的部分统计工作,属性中包含观测时间OBSTime,接口调用时间SendTime,消息发送时间MQ_SendTime等,可以根据属性信息进行传输时效统计,数据完整性统计等,详细设计如表2。

表2 消息属性封装设计

报文正文以字符串的形式放入到消息体(Message Body)中,一条消息由消息头和消息体封装完成,即可发送到消息中间件中了。

4 消息交换控制策略

RabbitMQ 核心组件是主题和队列,发布者将消息发布到某主题之后,服务端通过消息中含有的路由键值(RoutingKey)信息对主题中的消息进行交换控制,将路由键值中包含某些特定标识的消息绑定到某个队列之中,消费者从对应的队列中接收消息。

根据气象资料传输的业务特性,制定了传输相关的交换控制的三个基本原则:(1)发送采用主题方式,主题名以“X.”开头,每个主题对应一类接入对象,比如目前国家级地面自动站标准格式试点的台站都将消息发送到本省X.OBS;(2)接收采用队列方式,队列名以“Q.”开头,队列名需要明确接收者,如国家级CIMISS数据环境接收台站数据的队列为Q.OBS.BABJ.CIMISS;(3)主题到队列的转发过程使用路由键值来进行控制,路由键值名称以“R.”开头,路由键值大类在前小类在后,R.OBS.CCCC.N/P.IIiii.TYPE,CCCC表示消息发送者所在省份的省级代码,N/P表示消息发送者的级别N代表国家站,P代表区域站,TYPE表示为CIMISS四级编码。国家级地面自动站数据上行策略如图2所示。

图2 国家级地面自动站数据上行策略

探测中心综合观测一体化平台下行设备控制指令的模型,发送时带的路由键值为R.OBS_CTL.CCCC.N.IIiii.TYPE,发送主题为X.OBS_CTL,通过路由键值将不同省份的控制消息放入各省的下行队列中,下行队列推送到省级消息服务器,省级消息服务器再按照路由键值将控制指令推送到个台站的接收队列。国家级控制指令下行策略如图3所示。

图3 国家级控制指令下行策略

5 业务应用情况

根据本文介绍的消息封装和交换控制策略设计研发的CTS2.0系统消息传输模型,目前已在12个省的253个台站进行了试点试验。在试点台站部署了消息传输客户端,试点省份部署了消息传输服务端,自动站观测数据从台站经省级消息服务器到达国家级消息服务器。

对2016年12月、2017年1月和2017年2月的传输情况进行了统计,数据自台站输出和到达国家级的时间均集中在观测后20~25 s,其中,台站大多在20 s之后开始输出消息数据,90%的数据消息在25 s以内能够生成并传输到国家级。台站输出率与国家级到报率非常接近,通信系统在2 s之内就能将消息从台站传输到国家级,数据平均传输用时在1 s以内。

从应用情况可以看出,使用该模型能高效的完成国家级地面自动站数据从台站到省到国家的传输,数据从台站经省级到达国家级的平均传输用时在1s以内。通过从消息属性中提取传输环节所需的监视和路由信息,减少了传输环节解码开销,优化了传输流程,提高了传输效率。同时采用该种交换控制策略能实现观测数据可配置定制化收集分发,比如在国家级对不同资料类型(地面/辐射)、不同数据来源(湖北/上海)的数据进行分类转发等。

试点过程中也存在一些问题,后续将在服务器端集群架构设计、节点自动运维管理等方面继续进行探索。

深入阅读

王力, 韩笑, 刘培宁, 等, 2015. 基于MQ的气象数据采集与监控系统设计. 气象科技, 43(3): 451-457.

熊安元, 赵芳, 王颖, 等, 2015. 全国综合气象信息共享系统的设计与实现. 应用气象学报, 26(4):500-512.

鱼朝伟, 詹舒波, 2016. 基于RabbitMQ的异步全双工消息总线的实现. 软件, (2): 139-146.

张煜, 姜虎, 2016. 基于消息的遗留资源服务化适配与集成. 计算机工程与设计, 37(10): 2844-2850.

猜你喜欢

键值台站队列
基于ETL技术的台站信息同步应用研究
地震台站基础信息完善及应用分析
一种适用于高铁沿线的多台站快速地震预警方法
队列队形体育教案
非请勿进 为注册表的重要键值上把“锁”
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
一种具备干扰台站剔除的多台站定位方法
一键直达 Windows 10注册表编辑高招