基于ZeroMQ&JSON的分布式测控系统消息通信架构设计

更新时间:2024-04-14 作者:用户投稿原创标记本站原创 点赞:6983 浏览:20630

摘 要: 为了提高异构环境下的分布式测控系统内部网络的通信效率,采用消息中间件技术和一种轻量级的数据交换格式,设计了一种有效的分布式测控网络消息通信架构.该架构用在智能楼宇监控实验中,提高了数据的传输效率.该架构解决了异构系统集成的困难以及其数据交换格式的选择问题,经过实践的检验,该框架切实可行,可以胜任不断变化的环境和任务要求,具有广泛的适用性和良好的应用性.

关 键 词 : 消息中间件; ZeroMQ; 消息管道; 消息通信架构

中图分类号: TN91134; TP273.5 文献标识码: A 文章编号: 1004373X(2014)02010505

0 引 言

分布式测控系统通常由多个测控部件及其接口电路构成.各功能相对独立的测控部件及其电路被称为系统节点功能模块,构成相对独立的数据采集系统.每个节点只需完成系统的部分功能,而所有节点协同工作则可完成测控系统预期的全部功能.

目前的测控系统,大多采用基于单片机的传感器无线组网或者采用工业现场总线的有线组网形式,受限于单片机的处理能力、所处环境的电磁兼容性以及总线组网通信能力的约束,网络阻塞、数据的传输过程中丢失数据以及实时性问题尤为突出.

由于测控任务和测控环境在不断的向复杂化、大型化方向发展,测控系统的监控对象越来越复杂,越来越分散,信号采集终端呈现分布式趋势.在整个系统中,由于各台仪器与设备种类繁多,硬件平台各异,软件环境也各不一致,所需要的控制命令、数据报文的格式也不统一,使得系统的灵活性很差,一旦对设备重新部署,就会大范围改动软件通信中的报文格式,导致系统可靠性较差,维护困难.

随着大量带有嵌入式操作系统的控制设备的应用和工业以太网络环境的不断完善,集成WSN和多种现场总线的网关的大量应用,整个系统对数据的处理能力和通信能力得到很大的提高,为消息中间件技术应用提供了良好的硬件平台,该技术是一种由消息传送机制或者消息队列模式组成的中间件技术,利用该技术可以进行平台无关的数据通信,并利用数据通信对各个设备进行分布式系统集成,而且在嵌入式多任务操作系统的支持下,可以扩展为进程间的数据通信.

以往的系统中,为了避免数据在通信中丢失,数据的发送方需要专门等待已发送的消息的回复,不利于多任务的并发.而消息中间件技术具有异步工作的特性,发送方可以发送数据到消息中间件后,无需等待,直接处理其他任务,由消息中间件来确保数据被接收方完整接收,对于系统中设备之间工作速率不同步,不会影响系统数据传输的稳定性和可靠性.消息中间件实现了整个系统的互联,确保系统安全、可靠、实时的工作.

目前消息中间件主要采用两种消息处理模型:点对点模型和发布/订阅模型[1]:

点对点模型是一种基于连接的模型.消息发送方(生产者)和消息接收方(消费者)在进行通信时必须维持一条数据链路的连接,生产者将消息发送到消息队列(生产),该消息将一直保留到被消费者从队列中提取(消费)或者消息过期为止.这种模型既支持异步消息传送模式,也支持同步请求/应答模式.

发布/订阅模型是一种基于推送的模型.消息发送方(发布者)和消息接收方(订阅者)采用透明的形式进行通信,发布者和多个订阅者都会被注册到消息通道上,消息通道一旦接收到消息,会主动地调用注册在通道中的订阅者,进而完成对消息内容的消费.这种模型既支持广播机制,可以将一条消息传递给多个订阅者,也支持抢占机制,同一时间只能有一个消费者处理该消息.

由于发布/订阅模型的消息主动推送特点,使得它成为现代分布式计算环境的理想选择.

1.ZeroMQ&JSON的特点

分布式计算环境需要处理大量的网络通信,分布式测控系统中需要解析大量的控制命令、数据报文.

1.1 ZeroMQ

在分布式系统通信网络中,进程间的交互所使用的API实际上是封装了TCP/IP协议的Berkeley套接字(BSD)SOCKET,在基于Socket API开发TCP通信程序时,需要处理很多网络异常(比如连接异常中断以及重连),为了提高通信性能,往往进行异步(非阻塞)、缓冲区、多线程之类的优化,这些都极大地增加了通信程序的开发难度.

为了适应系统中的各个节点分散在分布式系统间,ZeroMQ被设计成网络协议栈中的一个可伸缩层,不仅仅是一个点对点交互,还定义了适应于分布式系统的全局拓扑以便于在多个线程、内核和主机盒之间弹性伸缩[2].

ZeroMQ是一个开源的、跨平台、高性能、精简灵活的网络消息中间件,将操作系统的异步、消息缓冲区和多线程处理机制封装在内,对各种套接字类型(如进程内通信、IPC、TCP和UDP)、网络连接建立、数据打包成帧、路由选择等底层网络通信行为进行了抽象,ZeroMQ可以自动感知路由和网络拓扑,灵活地支持多种通信环境[3].

ZeroMQ主要支持 4 类通信模式:请求应答模式、发布/订阅模式、管道模式以及信号模式, 其中前3种模式使用较多,信号模式使用较少,主要是用来支持传统的TCP Socket 点对点模型.

相对于同类中间件MQ、ActiveMQ和RabbitMQ在部署时需要专门的一个怎么写作器,ZeroMQ只需要让应用程序引用ZeroMQ程序库,就可以在多个进程间进行消息发送,使得部署起来非常简单.

ZeroMQ采用 C/C++ 开发,并且协议格式定义得很简洁,所以性能远远高于其他的消息中间件,如图1所示[4].缺点是ZeroMQ被设计成侧重于消息传输的轻量级消息中间件,缺少消息怎么写作器来存储和转发消息,所以不支持消息持久化及崩溃恢复.

图1 MQ、ActiveMQ、RabbitMQ和ZeroMQ的消息传输性能对比 根据ZeroMQ给出的测试报告,对于一个长度为120 B的消息,在1 Gb Ether网环境下,消息的传输可达到900 Mb/s,完全满足系统的实时性要求.

1.2 JSON

由于各种测控节点平台的异构性,需要一个格式统一、跨平台的数据交换格式以方便对系统中的命令、数据报文进行解析.JSON和XML是目前网络中最常用的两大数据传输格式.XML是一种标记语言,用于结构性标记电子文件,可以用来标记数据、定义数据类型,允许用户自定义标签,用于传输和存储数据.DOM是对XML文档进行应用开发、编程的应用程序接口,把XML文档作为树结构来查看,能够通过DOM树来访问所有元素(节点),可以修改或删除节点的内容,并创建新的节点,因此,可以把XML看成是一种数据结构或者是一种虚拟数据库.

XML文件中存在很多用于解析的附加信息,由于XML最初是用于在WEB中传输大数据,解析信息在整个文件中所占比例较小.然而分布式测控系统中,需要解析的命令、数据报文都是一些小数据,使得XML文件变的很臃肿,因此XML在小数据上的传输、存储的效率上存在一定问题.JSON也是基于纯文本的数据格式,旨在传送基于文本的数据,支持的数据结构为:名称/值对集合,其对象格式如图2所示.

图2 JSON对象包装格式

以一个命令的JSON和XML格式作为对比,例如一条移动显示组件窗口的命令.

如表1所示,相对于复杂的XML数据格式,JSON格式简单,易于读写,用于解析的信息格式压缩,内存占用小,传输速度快,对JSON的解析效率高.在存取速度上,JSON是XML的2.3倍左右,而JSON文件的大小则为XML文件的[12]左右[56].

表1 JSON与XML格式对比

2.系统的总体结构

对于多数分布式测控系统而言,基于ZeroMQ和JSON的测控技术更加容易实现系统功能的集成.下面以一个具有普遍意义的分布式测控系统为例,介绍这种系统集成方法的应用.

整个测控系统体系结构如图3所示,根据功能分成4个层次:

(1) 物理设备层:负责现场数据(模拟量、数字量、图像)采集以及预处理、接受控制指令输出控制量(模拟量、开关量等),主要包括数据采集器、

传感器节点、控制器节点、接口板和摄像头组成,由支持嵌入式操作系统的嵌入式CPU、存储单元、网络通信单元、传感器和相关总线接口组成.

(2) 操作系统层:在裁剪并移植操作系统的基础上,利用其提供的多进/线程机制、网络通信协议栈,通过移植相关的嵌入式数据库、ZeroMQ和JSON等开源软件库,完成相关监控软件的开发,包括:数据采集与处理、数据存储、控制量输出和远程数据/指令传输.

(3) 分布式平台的中间件层:基于ZeroMQ和JSON机制,由消息管理模块、链路搜索模块和群组管理模块组成,构成一个分布式的通信网络的通信接入怎么写作器.该怎么写作器作为TCP/IP通信的怎么写作器端,通过ZeroMQ的发布/订阅模型,与物理设备层模块、基础组件层模块通信,负责接收、分发和应答这两层中模块的消息,为了在不同平台之间进行数据交换,通过JSON机制对命令、数据报文进行封装.

图3 分布式测控系统结构示意图

(4) 基础设施组件层:用户应用平台,由各种显示组件、输入/输出、控制策略、Web组件和数据库组件构成,以图形化界面实现与分布式测控系统的交互.

如图4所示,每一层由实体(物理硬件或软件)组成并进行封装和抽象,上层能够接受下层提供的怎么写作,并通过封装能向上层提供增值怎么写作[7].

图4 基于ZeroMQ和JSON集成的分布式测控系统模块

3.系统的通信模型实现

在分布式测控系统中,由于参与测控的各个物理设备分布在不同的节点中,需要建立一条从一个信号源端点到一个或多个控制节点的、虚拟的、逻辑的、非物理电路连接的数据传输通道,可以抽象的认为是一条信息管道.分布式测控系统的信息集成就是根据测控系统的功能要求,用若干条虚拟的信息管道将系统各节点中的相关信息端点在逻辑上连接起来,从而实现分布式测控系统的信息集成[8].通信怎么写作是整个分布式测控系统的信息入口,消息中间件是分布式消息系统的核心.借助“异步处理”、“保存并转发”及“保证传送”机制,消息中间件为通信怎么写作稳定高效的运行提供了有力的支持.

3.1 基于ZeroMQ分布式消息怎么写作

ZeroMQ的实现就是提供一个运行在写作技巧怎么写作器上的通知怎么写作以及一组支持客户端应用开发与运行的接口库.面向对象中间件能够屏蔽底层分布环境的复杂性和异构性,实现异构网络环境下的分布应用软件之间的互连、互通和互操作,提高系统的可移植性.分布式消息系统怎么写作采用ZeroMQ提供的REQREP模式、PUBSUB模式来支持不同的消息传输方式:

REQREP模式:由请求端(REQ)发起请求,并等待回应端(REP)响应请求,该模式是一个同步的双向通信,应用于数据采集、控制输出等实时性要求高的通信上.

PUBSUB模式:发布端(PUB)是单向发送消息,订阅端(SUB)则只负责接收消息,中间不能反馈,PUB和SUB可以是1∶N,如图5所示.如果订阅端连接成功,ZeroMQ会确保发布端发布的信息不会丢失.该模式是一个异步的通信,应用于命令发布,数据显示等一般性的通信上.

使用PUBSUB模式,消息的生产者和消费者之间没有耦合,订阅者和发布者可以在运行时动态添加,不干扰各子系统正常运行.由于指令具有强制执行性,需要确保指令的接收者能够接收到数据,这就需要用到REQREP的消息队列模式.

图5 ZeroMQ提供的PUBSUB模式和REQREP模式

3.2 分布式测控系统通信架构

一个完整的消息系统可以称为一个“消息网”,网内包含不同的节点,这些节点分布在不同主机的不同进程中.通信架构图如图6所示.

在整个系统的消息通信架构中,最重要的就是消息管理,该模块负责和节点端系统通信,作为TCP/IP通信的怎么写作器端.

负责接收各种节点端的消息,并利用信号源管理模块中的信号源节点和显示组件节点、控制节点之间的对应关系,分送客户端消息到PC架构子系统,分布式子系统,和总线式子系统中去.具体功能包括:

(1) TCP通信怎么写作器:利用ZeroMQ提供的发布/订阅模式负责和客户机通信,具有灵活的可扩展机制;

(2) JSON协议适配器:负责将节点端过来的JSON指令解析成各种调用,并将结果数据JSON传送给TCP怎么写作器分发给节点端;

(3) 消息分发处理:根据消息类型经适配器转换后,对群组信息进行搜索得到最短路径,向其他各种组件分发的控制指令/数据.

在分布式测控系统中一次典型的消息通信过程如下:首先,客户端组、数据库组件、控制台组、信号源组、控制组、控制器组合显示组订阅到消息系统中;其次,由客户端“发布”建立一条从信号源——控制策略——输入/输出——到控制节点链路的指令,各群组组件“订阅”到这个指令后,创建各自的线程,在线程中根据传入的IP地址和端口号建立相应的通信连接;最后,控制台组件根据从信号源“订阅”到的传感器监测数据,依据设定的控制策略,与控制节点进行“请求/响应”通信,控制节点按照指令进行有效的控制.

为了测试整个消息系统的性能,在1 Gb Ether网络环境下,通过怎么写作器连续“发布”JSON封装的、长度为100个字节的“命令”指令1 000 000条,各群组组件全部成功的“订阅”,没有发生“命令”丢失现象,平均延时<10 μs,满足系统的实时性要求;在摄像头采集、传送和显示组件显示一帧D1图像(702×576),平均延时大约<20 ms,满足视频实时传输显示要求,全部的测试结果验证了消息系统的高效性.

4.结 论

本研究结合传感器网络、嵌入式计算、分布式信息处理、网络通信等先进技术,本文创新之处在于提出了一种基于消息中间件的测控网络中的消息通信架构,提高了通信系统的消息传递能力、系统的稳定性和数据的安全性.

通过在各节点之间建立虚拟信息管道,实现具体物理连接链路节点信息集成,采用该消息通信架构的分布式测控网络具有智能化、适应不同环境要求、可靠性好、效率高和易于扩展等特点, 可满足多种不同环境的工业测控任务要求,具有良好的应用前景.