一种基于可扩展协议的负载均衡网络中间件实现方法与流程

文档序号:14504528阅读:173来源:国知局

本发明涉及一种基于可扩展协议的负载均衡网络中间件实现方法。



背景技术:

时序数据处理技术被广泛应用于广域测量系统(wams)、变电站监控、调度、直流、稳控等多个电力自动化系统中,以满足其存储海量、高频数据的需求。时序数据库主要用于处理秒级、毫秒级高频数据,每个存储周期(毫秒或是秒)会产生一批数据,因此数据量极大,对网络流量和网络中间件的读写性能要求极高,该需求不同于传统的网络中间件,需要定制开发适用于时序数据库的网络中间件,针对报文、网络和存储特点进行优化。

传统的网络中间件实现方法如下:

(1)基于远程调用的网络中间件(rpc,remoteprocedurecall)

远程调用中间件的基本通信模型是基于client/server进程间通信模型的一种同步通信形式,是过程式程序设计风范在分布式应用中的扩展。该中间件为client提供了远程服务的过程抽象,其底层消息传递操作对client是完全透明的。在rpc中,client即是请求服务的调用者(caller),而server则是执行client的请求而被调用的程序。

(2)基于分布式对象的网络中间件(orb,objectrequestbroker)

这种形式的网络中间件以dcom(分布式组件对象模型,分布式组件对象模式)和corba(commonobjectrequestbrokerarchitecture)为代表,但无论哪种标准与实现,均由以下部份组成。

a、实际完成服务和功能的远程对象,负责实际完成系统服务,接受远程请求。

b、访问客户端代理,负责从客户端接受请求,并将请求转换为远程调用发送到服务端。

c、对象请求代理orb,提供一个通信框架,透明的在异构分布式计算环境中传递对象请求,负责定位对象实现并将请求传输给对象实现后返回结果,在分布式网络中间件中处于核心地位。

(3)基于消息队列的网络中间件(message-orientedmiddleware)

基于消息的网络中间件主要用于在不同应用间投递消息,专注于异构环境的消息交换,目前最流行的面向消息的网络中间件是apache的activemq。消息可不包括语意和状态,因此面向消息的网络中间件对应用而言是最透明的选择。应用无需关心消息的来源、连接方式,而中间件无需关心消息的语意,这样可以很好的实现与应用解耦。

以上网络中间件虽然都是较为成熟的框架,但并不适用于大数据量、高性能要求的时序数据处理。首先、这些框架都是通用框架,针对时序数据的键值对特性无法优化,使得通讯协议过于庞大而造成资源浪费;其次、通用框架需要考虑过多的场景,因此中间件过于复杂,例如corba就是一个重量级框架,将会拖累整个时序数据库部署;再次、传统中间件很好的屏蔽了底层操作系统相关性,做到通用性和跨平台,但这是在损失一定的系统性能基础上,因此无法满足时序数据的大数据量和低响应时延的要求。



技术实现要素:

针对上述问题,本发明提供一种基于可扩展协议的负载均衡网络中间件实现方法,具有高性能、可扩展协议和负载均衡等优点,能有效节省网络流量和提高响应速率。

为实现上述技术目的,达到上述技术效果,本发明通过以下技术方案实现:

一种基于可扩展协议的负载均衡网络中间件实现方法,其特征在于,包括如下步骤:

步骤1、服务端接收到客户端的多帧报文,其中每一帧报文均为258个字节,每一帧报文的格式为:

1个字节的消息类型+1个字节的消息大小+消息内容:

消息类型用于读消息和写消息的判断、以及小尺寸消息和大尺寸消息的判断;

对于小尺寸消息,消息大小用于设置消息内容的有效字节位数,消息内容最大为256个字节;对于大尺寸消息,消息大小置空,消息内容用于记录实际数据的地址,消息内容最大为256个字节;

步骤2、将多帧报文解析为单帧报文后,获取消息类型;

步骤3、将读消息放入读线程池,将写消息放入写线程池,其中,小尺寸消息使用栈上分配方式,大尺寸消息采用堆上分配方式;

步骤4、读线程池和写线程池分别调用负载均衡算法选定具体的处理线程,并将消息内容放入对应的线程消息队列;

步骤5、对于写消息,写线程将数据写入磁盘文件,并返回确认消息;对于读消息,读线程则根据索引查询对应的磁盘文件,将数据读入缓存,并组装好消息返回给对应的客户端。

负载均衡算法包括权重轮询算法、随机算法、权重随机算法、响应时间优先算法、最少连接优先算法。

优选,读线程池和写线程池分别包括多个读线程和多个写线程。

优选,消息内容最小为8个字节。

本发明的有益效果是:

(1)可以通过扩展消息帧数的方式扩展通讯协议。

(2)不需要为每个客户端创建处理线程,降低了系统资源开销,支持客户端最大并发数显著提高。显著提高报文处理能力,每秒处理500万事件。

(3)降低了网络流量,服务端占用的cpu和内存也明显减少。

附图说明

图1是本发明多帧消息结构示意图;

图2是本发明栈上报文格式示意图;

图3是本发明堆上报文格式示意图;

图4是本发明负载均衡策略示意图;

图5是本发明一种基于可扩展协议的负载均衡网络中间件实现方法的流程示意图。

具体实施方式

下面结合附图和具体的实施例对本发明技术方案作进一步的详细描述,以使本领域的技术人员可以更好的理解本发明并能予以实施,但所举实施例不作为对本发明的限定。

如图1-5所示,一种基于可扩展协议的负载均衡网络中间件实现方法,包括如下步骤:

步骤1、如图1所示,服务端接收到客户端的多帧报文,其中每一帧报文均为258个字节,由常量在编译时指定,每一帧报文的格式为:

1个字节的消息类型+1个字节的消息大小+消息内容:

消息类型用于读消息和写消息的判断、以及小尺寸消息和大尺寸消息的判断,小尺寸消息和大尺寸消息是相对的,其临界值可根据实际系统调整,通过代码宏定义设置,比如,消息内容在256字节以内为小尺寸消息,超过256字节的为大尺寸消息。

对于小尺寸消息,消息大小用于设置消息内容的有效字节位数,消息内容最大为256个字节,最小为8个字节,当消息内容为256个字节时,每一帧报文的尾部均是有效消息,否则,每一帧报文的尾部会存在无效消息,通过消息大小来设置消息内容的有效字节位数,如图2所示。

对于大尺寸消息,消息大小置空,消息大小放到具体数据帧里,消息内容用于记录实际数据的地址,指向的地址空间包含数据指针、数据大小、定制化的析构函数、引用计数和数据内容等信息。同样的,消息内容最大为256个字节,最小为8个字节,如图3所示。

根据每一帧报文长度固定解析,从多帧报文中获取需要的信息,如消息头、消息类型等,该多帧消息格式可以方便的进行消息内容扩展,采用扩展消息帧的方式扩展通讯协议,而无须破坏现有结构与应用消息结构。消息头也被视为一个独立的消息帧,这样可以通过扩展消息帧数的方式扩展通讯协议。

步骤2、将多帧报文解析为单帧报文后,获取消息类型:即读写类型和大小尺寸消息类型。

步骤3、将读消息放入读线程池,将写消息放入写线程池,进行读写分离后放入对应的线程池,可以尽量减少数据共享,以降低共享的互斥开销,避免互斥量、信号量、竞争条件等同步手段。读写都有多个(默认创建8个读线程和8个写线程)线程组成线程池,共同处理事务。

其中,小尺寸消息因消息长度有限,如果使用内存堆分配、析构,会造成性能瓶颈,易造成内存碎片化,所以使用栈上分配方式性能更佳。如果单帧消息为大尺寸消息,需要防止栈溢出,同时支持引用计数以避免大内存拷贝开销,采用堆上分配方式。

步骤4、读线程池和写线程池分别调用负载均衡算法选定具体的处理线程,并将消息内容放入对应的线程消息队列。

如图4所述,负载均衡算法包括权重轮询算法、随机算法、权重随机算法、响应时间优先算法、最少连接优先算法。读写线程池依据选择的负载均衡算法,选定具体的处理线程。网络中间件默认选择的策略为权重轮询算法。每一个读写线程池根据配置预先创建一定数量线程的读线程池和写线程池,通过统一的线程管理器进行管理,通过多线程进行io读写可明显提高系统资源利用率,而采用预先创建线程可以明显减少后期频繁创建销毁线程的开销。每个线程都有自己的消息队列,从消息队列中获取处理报文。

步骤5、对于写消息,写线程将数据写入磁盘文件,并返回确认消息;对于读消息,读线程则根据索引查询对应的磁盘文件,将数据读入缓存,并组装好消息返回给对应的客户端。

综上所述,本发明的基于可扩展协议的负载均衡网络中间件实现方法,可以实现网络中间件的负载均衡和可扩展,解决传统网络中间件无法适应时间序列数据库大数据量和低响应时延的要求,使得服务节点资源得到合理利用,整体服务性能有显著提高。同时,对网络协议采用多帧可扩展协议,并将小尺寸消息在栈上创建、大尺寸消息在堆上创建,减少了内存碎片化和内存拷贝的时间,降低了网络整体流量,具有较好的可扩展性。读写分离技术减轻了各个线程间数据的耦合度,线程间不存在共享数据,减少了大量的互斥量、信号量、竞争条件等同步手段。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或者等效流程变换,或者直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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