一种基于数据流转发的电力系统实时数据交换系统的制作方法

文档序号:13534237阅读:278来源:国知局

本发明涉及一种实时数据交换系统,特别是一种基于数据流转发的电力系统实时数据交换系统。

技术背景

随着电网的技术进步与业务发展,智能电网支撑系统不断细化,涉及的内容越来越多,随之而来的是信息系统“信息孤岛”、“大数据交换”现象渐渐浮现。电力信息化系统分布于发电、输电、配电、用电各个环节,系统分布性强,纵向跨越多个分级机构,提高了系统间数据集成的技术复杂度。通信技术作为智能电网的重要技术组成,在应用层建设统一的数据交换系统,跨越多级机构在广域网范围组建高效的数据传输通道需求越发强烈。

现有技术方案支持将数据写入硬盘,但这大大降低了中转速度;而且现有技术对大文件转发支持不足,难以满足电网体系下数据量大、交互次数多、复杂度高的信息传递要求。



技术实现要素:

本发明针对智能电网数据交换特征,并根据队列缓冲、数据流转发、分布式路由思想,设计实现了基于数据流转发的准实时数据交换中间件,解决了智能电网应用系统地理分布广、数据集成规模大、及时性要求高、集成技术不统一、无法统一管理的难题。该技术能够应用于多级部门的业务应用间数据集成,适合作为电力企业应用集成的底层数据交换总线使用,能够显著提高部门间大批量的信息交流传递的速度,有效提高工作效率。

api:applicationprogramminginterface,应用程序接口

fifo:first-infirst-out,先入先出

首部:指的是消息传递中该消息的头部分数据,这块数据中包含着这个消息的一些基本信息,如消息的来源、流向与功能等。

技术方案:

本发明一种基于数据流转发的电力系统实时数据交换系统,包括发送端(producer生产者)、代理节点(broker)、接收端(consumer消费者)三个系统模块组成。

首先,发送端(producer生产者)以api形式存在,实现基于fifo先进先出队列的异步消息发送机制以及大文件同步发送机制,第三方系统调用发送接口将消息或文件交由producer进行调度发送,第三方系统无需知道目标接收方的物理位置,只需指明接收端(consumer消费者)逻辑名称即可将数据交由代理节点(broker节点)进行自动路由转发,且可以实现一对多的数据分发。

其次,broker数据路由服务以服务程序形式存在,实现基于数据流的路由转发机制,其无需等待所有数据到达即对数据流进行实时转发提高数据的转发效率,broker可以分布式部署在不同服务器上形成网络代理节点对数据流进行多节点自动路由转发,最终将数据推送到目标consumer供第三方系统消费。broker可同时对多个producer提供数据路由服务,从而使得其可以充当多个业务系统间统一的数据交换总线。

最后,consumer客户端以api形式存在,consumer收到broker推送的数据后对数据进行识别,如果是消息型数据则创建fifo队列进行缓存,并立即通过监听器调用第三方系统进行业务处理,数据接受部门根据接收到的数据进行相应地操作。

附图说明:图1一种基于数据流转发的电力系统实时数据交换系统具体流程

具体实施方法:

本发明一种基于数据流转发的电力系统实时数据交换系统,结合附图进行以下说明:

1.基于fifo队列的消息缓存机制

当producer发送内容为文件时,系统使用同步发送方式,即上一文件发送完成才可以进行下一文件的发送,发送文件时api阻塞直到收到consumer的确认信号(acknowledgmentsignal,ack),如果发送中断或超时api执行断点续传,系统所使用的流式数据传输协议对数据大小无限制。

发送内容为消息时,提供异步和同步两种发送方式。当使用同步方式时,发送过程同文件的发送过程。当使用异步发送方式时,producer为发送的消息创建fifo队列,对不同的consumer目标创建不同队列,相同目标的消息将按产生顺序缓存入同一队列,与此同时发送线程轮询各队列运行情况,当发现某个队列中有待发送消息时将其一次性打包发送,发送线程设计为贪婪的,总是尽可能快的将消息发出哪怕只有一条消息,发送后移动ack游标到最新发送位置等待确认,在数据发送过程中产生的消息不受影响继续入列等待下一次发送。收到ack确认报文后删除ack游标之前的消息,此机制既可以保障消息发送的可靠性又不会阻塞消息的持续产生。

异步发送消息情况下,当消息产生速度小于发送速度时系统表现为发送一条消息ack确认一条,当消息产生速度大于发送速度时系统表现为发送一批消息ack确认一批。批量ack确认减少通信交互次数,提高消息发送效率。当消息产生速度持续高于发送速度或高于consumer消费速度时,消息队列中消息将累积,累积达到系统配置的队列最大值时producer阻塞,直到更多的消息发出,产生多余的队列空间。由于使用fifo异步队列缓存机制,通过本系统发出的消息是保序的;第三方系统调用接口将消息交由producer,由producer异步完成消息的发送,不会发生阻塞等待,从而提高第三方系统整体通信性能;批量确认机制即保证了消息的可靠通信又提高了消息的确认效率。consumer针对消息型数据的接收采用类似的fifo接收队列,与发送队列不同的是其没有ack游标,consumer接收到消息后放入相应的队列,并通过第三方系统注册的监听器调用业务程序进行消费,监听器的调用每次只消费一条消息,系统整体上表现为发送方系统逐条发送消息,接收方系统逐条消费消息。针对文件数据,consumer接收生成临时文件,接收完直接通过监听器调用第三方系统进行业务消费。

本系统数据传输过程不区分消息与文件,基于socket实现。在producer客户端发送数据前,consumer客户端需先建立连接注册到broker服务器上,broker对所有注册的客户端进行管理,并定时发送心跳以保持与客户端的长连接,心跳包含三种信息,其中0表示正常心跳,1表示需要consumer主动与broker创建更多通信连接,-1表示broker即将主动断开连接,任意一方超时则断开连接。consumer注册到broker后监听控制信息的到来。

2.流式数据传输协议与路由机制

当producer客户端开始发送数据,首先发送控制报文建立通信链路,控制报文中携带了数据目标端名称、是否是断点续传、数据描述等信息,broker收到控制报文后读取目标端名称并查询路由表与相邻节点信息表,路由表、相邻节点信息表以xml配置文件的形式存在,在broker启动时加载到内存,格式如下:

//路由表

<?xmlversion="1.0"encoding="utf-8"standalone="no"?>

<properties>

<entrykey="targetname_1">adjacentname_1</entry>

<entrykey="targetname_2">adjacentname_1</entry>

<entrykey="targetname_3">adjacentname_2</entry>

</properties>

//相邻节点信息表

<?xmlversion="1.0"encoding="utf-8"standalone="no"?>

<properties>

<entrykey="adjacentname_1">10.102.12.8:9810</entry>

<entrykey="adjacentname_2">10.102.12.9:9810</entry>

</properties>

如果目标不可达,则分情况主动断开连接或反馈携带目标不可达标识的ack控制报文,并结束通信,否则broker依据路由表查到的下一节点信息建立与其的连接,将控制报文转发到下一节点,经过多次转发到达consumer。

当consumer收到控制报文,意味着当前通信连接被独占,consumer启动新的线程建立更多与broker通信连接以支持请求的并发到来,互不影响。consumer读取收到的控制报文判断此后的数据是首次发送还是断点续传,如果判断为首次发生consumer进一步读取控制报文中待发送的数据信息并立即进入接收数据状态。如果判断为断点续传,意味着本次数据传输前曾传输中断过,consumer将从控制报文中读取数据描述信息,检查历史临时数据中对应数据的中断位置,将中断位置写入ack控制信息中并原路反馈到producer客户端,如未查到历史数据,则中断位置设为0表示数据重新发送。

producer客户端具有断点续传的控制权,当数据发送异常中断时尝试数次断点续传请求,重发时控制报文中设置断点续传属性,否则数据为第一次发送不设断点续传属性,不产生交互过程。如数据为首次发送,当控制报文发出后立即进行主体数据的发送。如果为断点续传,当控制报文发出后进入ack报文的读取等待状态,收到ack报文后根据其中的断点续传位置,跳过已发数据进行续传位置后的数据的发送。

producer客户端对主体数据的发送是以流的形式进行的,producer每次读取与tcp/ip包大小等量(此量的值设为系统参数,一般设置4kb)的数据包发出,broker接收到数据包后,立刻调用之前转发控制报文的连接将数据包转发到下一节点broker,最终转发到

consumer,重复以上步骤将所有数据传输到consumer端。

当consumer根据控制报文描述的数据大小循环接收到所有数据后,全部数据接收完毕,此时原路反馈ack控制信息,以通知producer数据接收情况,至此一次数据传输过程结束。如果producer长时间未收到ack报文,则主动断开连接,broker将产生socket通信异常并层层关闭broker间的连接,producer端异常,触发断点续传,尝试3次后如仍未成功,producer报错停止传输。

在传输的整个过程中,正常情况下对于producer发送一次数据,仅需与consumer进行一个来回的通信,一是控制报文与主体数据的连续发送,二是来自consumer的接收ack确认。当触发断点续传时需要经过两个来回的通信,在控制报文的发送与主体数据的发送之间,多了续传位置ack控制报文的交互过程。一个通信来回将数据发出是可靠发送的最低通信次数,系统通信设计上除了采用流式数据传输与路由机制外,将首次发送数据与断点续传发送数据的协议区分对待,而不是统一采用两次来回的通信方式,减少了整体通信往返次数,提高了交换效率。

有益效果:本系统数据缓存设置在producer端与consumer端,避免在大规模数据交换场景下broker资源紧张影响交换效率。

broker只负责维护传输通道的连接以及数据流的路由转发,其无需将所有数据接收完就向下一节点转发数据流。数据交换过程中,数据在producer、broker、consumer间以连续的流的形式源源不断流到接收端。fifo缓存队列使得第三方系统可以进行异步消息发送,消息被临时存放在队列中发送接口调用立即返回,第三方系统程序可以继续执行其它业务操作,具体的传输交互交由本系统调度完成,从而提高第三方系统的整体性能,降低第三方系统的数据交换复杂度。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1