一种高并发平台服务器的数据处理的方法

文档序号:10552669阅读:383来源:国知局
一种高并发平台服务器的数据处理的方法
【专利摘要】本发明涉及对物联网后台服务器的数据的高并发处理。本发明将接收到字节型数据通过JNI接口发送给服务器内置的动态连接库的收发单元,由其将当前数据存入空闲数据缓冲区当填满后,将其标记为饱和并空闲处理单元发送处理通知;对应处理单元读取数据并将当前数据缓冲区锁定,以及将自身状态标记为忙;然后调用并行指令进行数据处理并将处理结果存入结果缓冲区,处理完毕后,将当前数据缓冲区标记为空闲,以及将自身状态标记为空闲;收发单元读取处理结果,并通过JNI接口将其发送给服务器的物理量数据库。本发明能显著提高SSH架构的物联网后台服务器的数据处理能力,既使用了java语言的良好网络能力,又利用了服务器CPU本身的处理能力。
【专利说明】
一种高并发平台服务器的数据处理的方法
技术领域
[0001] 本发明涉及物联网技术领域,具体涉及对物联网后台服务器的数据的高并发处 理。
【背景技术】
[0002] 目前,对于物联网设备,人们普遍关心的是终端的采集和发送功能,由于终端的微 控制器处理能力比较弱,一般只做些简单分析,后台服务器由于有大量终端进行通信,它也 只是对数据进行处理后进行存储,并以适当方式向用户显示。
[0003] 对于物联网后台服务器的架构,一般采用SSH(struts2+spring+hibernate)架构, 即利用java语言良好的网络性能,实现对大量的连接进行高并发处理,即通过java语言所 编写的网络数据接口接收物联网采集端发送的数据后,通过调动java语言的JVM( java虚拟 机)的相关函数对接收的字节型数据进行高并发处理并存入物联网后台服务器的预设物理 量数据库中,得到能用于用户显示的处理结果。而物联网采集端的数据一般的特点是采用 单字节,双字节或整型数表示物理量,当SSH架构的物联网后台服务器通过网络数据接口接 收到物联网采集端发送的数据后,需要将收到的字节型数据转换成浮点数,然后做浮点数 的系数乘法,最后基于偏移量的加法操作等数据处理才能变成真正的物理量(可直接用于 向用户显示),以双字节为例,基于java语言实现对接收数据进行数据处理时,通过调动 java语言的JVM的相关函数实现转换、系数相乘和偏移量处理得到物理量,即:
[0004] 物理量
*系数+偏移量
[0005] 对于java语言,它的优势在于跨平台和网络性能,但数据处理,尤其高并发数据处 理是其弱项,当涉及高并发数据,大数据量到来时,其数据的处理更是系统的瓶颈。

【发明内容】

[0006] 本发明的发明目的在于:为了克服采用SSH架构的物联网后台服务器在基于java 语言对接收数据进行数据处理,得到对应的真实物理量时,java语言的处理能力不足的技 术问题,提供一种高并发平台服务器的数据处理的方法,既能使用java语言的良好网络能 力,又能提高平台服务器的处理能力。
[0007] 本发明的一种高并发平台服务器的数据处理的方法,包括下列步骤:
[0008] 当SSH架构的物联网后台服务器通过网络数据接口(由java语言编程实现)接收到 物联网采集端发送的数据后,将表示物理量的字节型数据通过JNI接口(Java Native Interface,java本地接口)发送给物联网后台服务器内置的动态连接库,优选的,动态连接 库基于C语言编程实现;其中,动态链接库包括收发单元、数据缓冲区、处理单元和结果缓冲 区,且处理单元和数据缓冲区的初始状态为空闲;
[0009] 收发单元通过JNI接口接收字节型数据,并选择状态为空闲的数据缓冲区存入接 收的字节型数据,同时将当前访问的数据缓冲区锁定,当数据填满后,收发单元将当前访问 的缓冲区标记为饱和,并向状态为空闲的处理单元发送数据处理通知;
[0010] 收到数据处理通知的处理单元从状态为饱和的数据缓冲区读出数据,并将当前访 问的数据缓冲区锁定,以及将自身状态标记为忙;处理单元调用并行指令进行数据处理并 将处理结果存入结果缓冲区;数据处理完毕后,将当前访问的数据缓冲区标记为空闲,以及 将自身状态标记为空闲;收发单元读取结果缓冲区的处理结果,并通过JNI接口将处理结果 发送给物联网后台服务器的物理量数据库。
[0011] 本发明的主要思想是把数据由单个处理变为成批处理,将采用SSH架构的物联网 后台服务器的数据处理通过调用并行指令进行数据处理(如将字节型数据转换成浮点数, 对浮点数的系数相乘,基于偏移量的加法操作等),例如调用SIMD(汇编中的单指令多数据) 指令对接收的字节型数据进行数据处理。X86或X64架构是一款功能强大的处理器,Intel或 AMD的主流处理器都支持SSE(Streaming S頂D Extension,流式SHTO扩展)的指令集,因此 可以采用SSE指令完成对字节型数据的数据处理,从而显著提高物联网后台服务器的数据 处理能力。以SSE指令为例,其涉及的数据处理的并行指令序列如下表所示:
[0013] 综上所述,由于采用了上述技术方案,本发明的有益效果是:显著提高SSH架构的 物联网后台服务器的数据处理能力,既使用了 java语言的良好网络能力,又利用了服务器 CHJ本身的处理能力。
【具体实施方式】
[0014] 为使本发明的目的、技术方案和优点更加清楚,下面结合实施方式,对本发明作进 一步地详细描述。
[0015]首先,在采用SSH架构的物联网后台服务器(服务器使用X86或X64的平台,能够将 大量的物联网数据(字节型数据)存入数据缓冲区)中内置由C语言编程实现的动态连接库。 该动态连接库包括1个收发单元、n个数据缓冲区(可基于当前处理对象实时调整数据缓冲 区的个数)、m个处理单元(可以根据处理器个数调整)和1个结果缓冲区(队列的形式,对处 理结果实行先进先出),且n>m>l。具体实现时,收发单元、处理单元以线程的方式实现,为 了便于后续描述,将收发单元、处理单元用收发线程、处理线程来表述,其初始状态均置为 空闲。
[0016]本发明中,网络数据接口(基于java编程实现)收到字节型数据后,并不直接处理, 而是通过JNI接口发给动态连接库的收发线程,收发线程在状态为空闲的数据缓冲区中随 机选择一个作为当前访问数据缓冲区,将当前接收的字节型数据存入当前访问数据缓冲区 直到被饱和,此时将当前访问数据缓冲区的状态标记为饱和,同时向空闲状态的处理线程 发送数据处理通知消息。在收发线程访问一个数据缓冲区时,需将其锁定,即除当前操作的 线程外,限制其他线程对当前访问数据缓冲区的访问。
[0017] 收到数据处理通知消息的处理线程,则首先对饱和状态的数据缓冲区加锁,禁止 其它线程访问,然后调用并行指令处理,对于X86或X64平台的服务器,可以使用MMX或SSE指 令来并行进行数据处理,数据处理完成后,将处理结果存入结果缓冲区,并给当前数据缓冲 区解锁,同时标记其状态为空闲。
[0018] 最后,由收发线程将结果缓冲区的数据基于先进先出的读取顺序读出并通过JNI 接口存入物联网后台服务器的物理量数据库。
[0019] 在使用X86或64位平台(物联网后台服务器)的SSE指令进行数据处理时,由于java 的跨平台特性,SSH高并发架构可以是windows平台也可以是linux平台,而C语言编写的动 态连接库在windows下是dll格式,在linux下是so格式,其均能通过JNI接口供java层调用。 SSE指令可以是独立的汇编文件也可以嵌入到C语言之中。指令的格式可以是intel格式也 可以是AT&T格式,取决于所使用的系统和编译器。
[0020] 实施例
[0021] 以linux平台为例,选用是64位Ubuntu,版本为12.04,开发工具为eclipse 4.3,C 语言编译器用的是gCC(linux下的C编译器),版本为4.8.4。数据处理对象以车联网的CAN (Controller Area Network)总线为例,车载0BD终端(以下简称终端)将原始的CAN报文信 息发到物联网后台服务器(以下简称服务器),报文内容符合SAE J1939-71协议,下表给出 了以发动机温度和油压两条报文示例。
[0024] 在以上两个报文中,每个报文有8个字节,第一个报文中字节1和2分别为冷却剂温 度和燃料温度,都为单字节表示的物理量,字节3和4为双字节表示的发动机温度。第二个报 文都是单字节表示的油压。这两个报文有8个字节需要处理。
[0025] 首先java中的minaServer( java中常用的网络通信框架)通过NioSocketAcceptor ()方法创建一个非阻塞的物联网后台服务器端的socket,并调用bindO方法监听8011端口 接收车载终端的socket请求。
[0026]在Socket连接建立后,服务器的业务逻辑线程(服务器的现有处理线程)将接收到 的报文保存到阻塞队列BlockingQueue〈Byte>中。
[0027] 服务器中的数据处理线程池中的消费者线程INFODeal(服务器的现有处理线程) 的实例获取阻塞队列中的报文数据并通过JNI接口调用动态链接库进行数据解析。JNI模块 中的交互类Datalnteract中的4个本地方法:
[0028] (1)数据传递:将数组buf (用于存放表示物理量的字节型数据)传递给底层c语言 处理,即将字节型数据传递给基于C语言编程实现的动态链接库;
[0029] (2)初始化:根据终端连接数(size)返回buffer长度,buffer的长度可调;
[0030] (3)结果读取:从结果缓冲区读取处理结果;
[0031] (4)退出:服务器关闭时释放底层分配的缓冲区空间。
[0032] 本实施例中,动态链接库设置8个数据缓冲区,6个处理线程,每个数据缓冲区有8 个单元队列,每个单元队列对应CAN报文中对应的字节,各单元队列的长度可自适应确定, 本实施例中将单元队列的长度设置为4096,即各单元队列中的数据由4096个字节组成,每 个字节所对应的终端记录在预设数组中。通过JNI接口,对服务器通过网络数据接口传过来 的字节型数据,由动态连接库的接收线程将其依次存入各个对应的单元队列中,当单元数 据达到4096时,接收线程标记该数据缓冲区的状态为饱和,同时加锁后通知状态为空闲的 处理线程来处理。以处理发动机油温的字节为例,将报文1的第3和4字节对应的单元队列 (分别称为canEE_3和canEE_4队列)依次读入SSE指令的XMM寄存器中,系数和偏移量也读到 XMM寄存器中,然后启动SSE指令进行数据处理。数据处理过程中,将canEE_3和canEF_4的4 个字节分别读入寄存器单元xmmO和xmml中,然后用punpcklbw指令将其拼接成4个短整型 数,再用punpcklwd指令将其扩展成4个整型数,接着由cvtdq2ps指令转换成浮点数,最后进 行浮点数乘法和加法操作。
[0033] 完成一次4个字节型数据的数据处理后,可循环向xmmO和xmml中读入,直到单元队 列中的字节型数据处理完毕。
[0034]对于单字节物理量,可以将xmml清空,然后操作方式同上述方式一致;对于整型数 物理量,须将高16位数据按照上述方式拼接后,再使用punpcklwd指令与低16位拼接,其余 操作都是一样。
[0035]数据处理后的处理结果存放在结果缓冲区,等待java函数来取,即通过JNI接口将 处理结果读取到物理数据库中。
[0036]性能比较:
[0037] 服务器配置为:CPU(AMD Athon 4核)、内存(8G)、操作系统(Ubuntu 12.04)、应用 软件(t〇mcat7.0)。在进行数据处理时,共选取15-20条CAN报文,平均每个终端每秒发送132 个字节的数据,在模拟多个终端测试时,性能对比如下:
[0039] 从上表可知,当终端数超过2000以后,使用纯java方式的CPU的使用率维持在20% 左右,但此时丢包严重,很多数据没有来的及处理。因此若只采用java方式处理,则当终端 数超过2000个时,系统就开始出现丢包情况,但CPU的利用率却只停留在20 %左右,这是因 为java中的浮点数运算要通过java虚拟机来做,要调用大量其它资源,造成CPU的较长时间 的等待,而且多核的功能没有发挥出来。而发明的方案中,java只负责网络接收,数据处理 由C+SSE指令完成,同时设置有多个数据缓冲区,并分配了多处理线程来执行对字节型数据 的数据处理,可以充分使用CPU的功能,即使终端数目达到10000,系统依然能够处理。同时, 本发明的方案还有较强的扩展能力,如果终端太多处理不过来,则可以增加 CHJ的核数或个 数,增大数据缓冲区来完成,可以根据核数分配多个处理线程进行数据处理,充分利用系统 的性能。
[0040] 以上所述,仅为本发明的【具体实施方式】,本说明书中所公开的任一特征,除非特别 叙述,均可被其他等效或具有类似目的的替代特征加以替换;所公开的所有特征、或所有方 法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以任何方式组合。
【主权项】
1. 一种高并发平台服务器的数据处理的方法,其特征在于,包括下列步骤: 当SSH架构的物联网后台服务器通过网络数据接口接收到物联网采集端发送的数据 后,将表示物理量的字节型数据通过JNI接口发送给物联网后台服务器内置的动态连接库; 所述动态链接库包括:收发单元、数据缓冲区、处理单元和结果缓冲区;其中,处理单元 和数据缓冲区的初始状态为空闲; 收发单元通过JNI接口接收字节型数据,并选择状态为空闲的数据缓冲区存入接收的 字节型数据,同时将当前访问的数据缓冲区锁定,当数据填满后,收发单元将当前访问的缓 冲区标记为饱和,并向状态为空闲的处理单元发送数据处理通知; 收到数据处理通知的处理单元从状态为饱和的数据缓冲区读出数据,并将当前访问的 数据缓冲区锁定,以及将自身状态标记为忙;处理单元调用并行指令进行数据处理并将处 理结果存入结果缓冲区;数据处理完毕后,将当前访问的数据缓冲区标记为空闲,以及将自 身状态标记为空闲; 收发单元读取结果缓冲区的处理结果,并通过JNI接口将处理结果发送给物联网后台 服务器的物理量数据库。2. 如权利要求1所述的方法,其特征在于,所述动态连接库基于C语言编程实现。3. 如权利要求1或2所述的方法,其特征在于,动态连接库的处理单元通过调用汇编中 的单指令多数据S頂D指令执行数据处理。
【文档编号】G06F9/38GK105912306SQ201610225491
【公开日】2016年8月31日
【申请日】2016年4月12日
【发明人】鲁晓军
【申请人】电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1