数据采集系统、方法、节点设备及存储介质与流程

文档序号:19471950发布日期:2019-12-21 02:24阅读:322来源:国知局
数据采集系统、方法、节点设备及存储介质与流程

本发明涉及大数据技术领域,特别涉及一种数据采集系统、方法、节点设备及存储介质。



背景技术:

随着大数据技术的发展以及网络中海量数据的飞速增长,数据采集的挑战变得尤为突出。数据采集是指对数据源中的数据经过一系列的处理操作,最终将处理操作后的数据存储至存储源的过程。通过进行数据采集,可以帮助人们管理、分析和挖掘数据,具有巨大的经济和应用价值。

目前数据采集系统通常采用单机多线程的架构,基于同步方式进行数据采集:数据采集系统包括多个线程,每个线程用于执行一种数据处理操作,在数据采集的过程中,当数据源提供了一批数据时,第一个线程从数据源拉取这批数据,对数据进行处理后,将处理后的数据发送给第二个线程,第二个线程接收第一个线程的数据,对数据进行处理后,将处理后的数据发送给第三个线程,依次类推,最后一个线程接收数据并对数据进行处理后,会将处理后的数据存储至存储源中。之后,最后一个线程会通知数据源其提供的这批数据已经成功存储入库,数据源得到通知后,会提供下一批数据,则第一个线程会继续会从数据源拉取下一批数据,依次类推。

在实现本发明的过程中,发明人发现相关技术至少存在以下问题:

任一时刻整个数据采集系统只能针对一批数据进行处理,每个线程均要等待其他线程处理这批数据完毕后才能开始接收并处理下一批数据,数据采集的效率极低。



技术实现要素:

本发明实施例提供了一种数据采集系统、方法、节点设备及存储介质,可以解决相关技术中数据采集的效率极低的问题。所述技术方案如下:

一方面,提供了一种数据采集系统,所述数据采集系统包括多个数据处理模块;

所述数据采集系统中第一个数据处理模块用于当获取到数据源的任一批数据时,指示所述数据源提供下一批数据;

所述数据采集系统中任一个数据处理模块用于对已接收到的任一批数据执行对应的数据处理操作时,接收下一批数据;

所述数据采集系统中最后一个数据处理模块用于将处理后的数据存储至第一存储源中。

在一种可能的设计中,所述数据采集系统中任一个数据处理模块具有对应的内存空间,所述内存空间用于缓存已接收到的数据;

所述数据采集系统中任一个数据处理模块还用于对已接收到的任一批数据执行对应的数据处理操作时,将接收到的下一批数据缓存至所述任一个数据处理模块的内存空间中,当处理所述任一批数据完成后,从所述内存空间中读取所述下一批数据。

在一种可能的设计中,所述数据采集系统还包括至少一个共享内存池,每个共享内存池用于为对应的多个数据处理模块提供内存空间。

在一种可能的设计中,所述任一个数据处理模块还用于从对应的共享内存池中申请内存空间,当申请得到的内存空间使用完毕后,将所述申请得到的内存空间释放回所述共享内存池中。

在一种可能的设计中,所述数据采集系统中任一个数据处理模块的内存空间包括堆内内存;

所述任一个数据处理模块还用于将处理后的数据推送至下一个数据处理模块的堆内内存中。

在一种可能的设计中,所述数据采集系统中任一个数据处理模块的内存空间还包括堆外内存;

所述任一个数据处理模块还用于当所述任一个数据处理模块和下一个数据处理模块位于同一节点设备时,将处理后的数据推送至所述下一个数据处理模块的堆内内存中;或,

所述任一个数据处理模块还用于当所述任一个处理模块和下一个数据处理模块位于不同节点设备时,对处理后的数据进行序列化,将序列化的数据存储至所述任一个数据处理模块的堆外内存中,将所述序列化后的数据从所述堆外内存推送至下一个数据处理模块的堆内内存中。

在一种可能的设计中,所述数据采集系统还包括第二存储源,所述第二存储源用于存储所述数据采集系统当前处理的数据的快照单元,所述快照单元用于指示当前处理对应数据的数据处理模块;

任一个数据处理模块还用于当所述任一个数据处理模块宕机并重启后,基于所述第二存储源中的快照单元,恢复对宕机前处理的数据进行数据处理。

本设计中,在全异步式的数据采集系统的基础上结合了快照机制,能够实现断点续传的功能,当数据处理模块宕机并重启后,数据处理模块可以基于第二存储源的快照,恢复对宕机前处理的数据进行数据处理,避免由于宕机导致必须重新开始处理数据的情况,提高数据采集系统的鲁棒性和可靠性。

在一种可能的设计中,所述数据采集系统中第一个数据处理模块还用于在所述数据源的不同数据之间插入栏栅消息,将相邻两个栏栅消息之间的所有数据作为一个快照单元,将所述快照单元存储至所述第二存储源中,其中所述栏栅消息用于指示快照单元的起始点或结束点。

在一种可能的设计中,所述数据采集系统中任一个数据处理模块还用于在处理任一数据的过程中,向所述第二存储源中所述数据所属的快照单元添加所述数据处理模块的标识。

在一种可能的设计中,所述第一个数据处理模块还用于当所述第一个数据处理模块所在的节点设备满足预设条件时,降低从所述数据源中获取数据的速度。

在一种可能的设计中,所述数据采集系统中所述第一个数据处理模块以外的任一个数据处理模块还用于在对应的节点设备满足预设条件时,指示所述第一个数据处理模块降低从所述数据源中获取数据的速度。

基于上述设计,在全异步式的数据采集系统的基础上结合了反压机制,当数据采集系统的节点设备满足预设条件时,第一个数据处理模块会降低从数据源获取数据的速度,从而在面临流量峰值时缓解内存不足的情况,提高数据采集系统的鲁棒性和可靠性。

在一种可能的设计中,所述预设条件包括节点设备的共享内存池当前占用的内存达到第一预设阈值,所述共享内存池用于为所述节点设备的多个数据处理模块提供内存空间,所述内存空间用于缓存已接收到的数据;和/或,

所述预设条件包括节点设备的数据处理模块的当前申请内存的线程的总数量达到第二预设阈值。

在一种可能的设计中,所述数据采集系统中任一个数据处理模块还用于基于至少一个线程,对任一批数据执行对应的数据处理操作;

所述任一个数据处理模块还用于当检测到流量峰值时增加并发量,所述并发量是指数据处理模块中对数据进行处理的线程的数量。

在一种可能的设计中,所述多个数据处理模块分别位于多个节点设备中。

另一方面,提供了一种数据采集方法,所述方法应用于数据采集系统中,所述数据采集系统包括多个数据处理模块,所述方法包括:

当第一个数据处理模块获取数据源的任一批数据时,所述第一个数据处理模块指示所述数据源提供下一批数据;

当任一个数据处理模块对已接收到的任一批数据执行对应的数据处理操作时,所述任一个数据处理模块接收下一批数据;

最后一个数据处理模块将处理后的数据存储至第一存储源中。

在一种可能的设计中,所述数据采集系统中任一个数据处理模块具有对应的内存空间,所述内存空间用于缓存已接收到的数据;

所述当任一个数据处理模块对已接收到的任一批数据执行对应的数据处理操作时,所述任一个数据处理模块接收下一批数据,包括:

所述任一个数据处理模块对已接收到的任一批数据执行对应的数据处理操作时,所述任一个数据处理模块将接收到的下一批数据缓存至所述任一个数据处理模块的内存空间中;

当所述任一个数据处理模块处理所述任一批数据完成后,所述任一个数据处理模块从所述内存空间中读取所述下一批数据。

在一种可能的设计中,所述数据采集系统还包括至少一个共享内存池,每个共享内存池用于为对应的多个数据处理模块提供内存空间。

在一种可能的设计中,所述当任一个数据处理模块对已接收到的任一批数据执行对应的数据处理操作时,所述任一个数据处理模块接收下一批数据,包括:

所述任一个数据处理模块从对应的共享内存池中申请内存空间;

当申请得到的内存空间使用完毕后,所述任一个数据处理模块将所述申请得到的内存空间释放回所述共享内存池中。

在一种可能的设计中,所述数据采集系统中任一个数据处理模块的内存空间包括堆内内存;

所述第一个数据处理模块指示所述数据源提供下一批数据之后,所述方法还包括:

所述任一个数据处理模块将处理后的数据推送至下一个数据处理模块的堆内内存中。

在一种可能的设计中,所述数据采集系统中任一个数据处理模块的内存空间还包括堆外内存;

所述任一个数据处理模块将处理后的数据推送至下一个数据处理模块的堆内内存中,包括:

当所述任一个数据处理模块和下一个数据处理模块位于同一节点设备时,所述任一个数据处理模块将处理后的数据推送至所述下一个数据处理模块的堆内内存中;或,

当所述任一个处理模块和下一个数据处理模块位于不同节点设备时,所述任一个数据处理模块对处理后的数据进行序列化,将序列化的数据存储至所述任一个数据处理模块的堆外内存中,将所述序列化后的数据从所述堆外内存推送至下一个数据处理模块的堆内内存中。

在一种可能的设计中,所述数据采集系统还包括第二存储源,所述第二存储源用于存储所述数据采集系统当前处理的数据的快照单元,所述快照单元用于指示当前处理对应数据的数据处理模块;

所述方法还包括:

当任一个数据处理模块宕机并重启后,所述任一个数据处理模块基于所述第二存储源中的快照单元,恢复对宕机前处理的数据进行数据处理。

在一种可能的设计中,所述任一个数据处理模块基于所述第二存储源中的快照单元,恢复对宕机前处理的数据进行数据处理之前,所述方法还包括:

第一个数据处理模块在所述数据源的不同数据之间插入栏栅消息;

所述第一个数据处理模块将相邻两个栏栅消息之间的所有数据作为一个快照单元;

所述第一个数据处理模块将所述快照单元存储至所述第二存储源中,其中所述栏栅消息用于指示快照单元的起始点或结束点。

在一种可能的设计中,所述任一个数据处理模块基于所述第二存储源中的快照单元,恢复对宕机前处理的数据进行数据处理之前,所述方法还包括:

任一个数据处理模块在处理任一数据的过程中,所述任一个数据处理模块向所述第二存储源中所述数据所属的快照单元添加所述数据处理模块的标识。

在一种可能的设计中,所述方法还包括:

当所述第一个数据处理模块所在的节点设备满足预设条件时,所述第一个数据处理模块降低从所述数据源中获取数据的速度。

在一种可能的设计中,所述方法还包括:

当所述第一个数据处理模块以外的任一个数据处理模块对应的节点设备满足预设条件时,所述第一个数据处理模块以外的任一个数据处理模块指示所述第一个数据处理模块降低从所述数据源中获取数据的速度。

在一种可能的设计中,所述预设条件包括节点设备的共享内存池当前占用的内存达到第一预设阈值,所述共享内存池用于为所述节点设备的多个数据处理模块提供内存空间,所述内存空间用于缓存已接收到的数据;和/或,

所述预设条件包括节点设备的数据处理模块的当前申请内存的线程的总数量达到第二预设阈值。

在一种可能的设计中,所述数据采集系统中任一个数据处理模块还用于基于至少一个线程,对任一批数据执行对应的数据处理操作;

所述方法还包括:

所述任一个数据处理模块还用于当检测到流量峰值时增加并发量,所述并发量是指数据处理模块中对数据进行处理的线程的数量。

在一种可能的设计中,所述多个数据处理模块分别位于多个节点设备中。

另一方面,提供了一种节点设备,所述节点设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述数据采集方法所执行的操作。

另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述数据采集方法所执行的操作。

本发明实施例提供的技术方案带来的有益效果是:

本发明实施例提供的系统、方法、设备及计算机可读存储介质,设计了全异步式的系统架构,数据采集系统通过第一个数据处理模块指示数据源提供下一批数据,每个数据处理模块可以同时接收数据和处理数据,实现不同数据处理模块异步处理不同数据的效果,保证数据采集系统可以同时针对多批数据进行处理,避免数据处理模块要等待其他数据处理模块执行数据处理操作完成后才能开始处理数据的情况,提高了数据采集的效率,节省了数据采集的时间。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的数据采集系统的架构示意图;

图2是本发明实施例提供的分布式的数据采集系统的示意图;

图3是本发明实施例提供的数据采集系统的架构示意图;

图4是本发明实施例提供的数据采集系统的架构示意图;

图5是本发明实施例提供的数据采集系统的架构示意图;

图6是本发明实施例提供的数据采集系统的架构示意图;

图7是本发明实施例提供的数据采集系统的架构示意图;

图8是本发明实施例提供的数据采集系统的架构示意图;

图9是本发明实施例提供的第一个数据处理模块插入栏栅消息的示意图;

图10是本发明实施例提供的数据采集方法的流程图;

图11是本发明实施例提供的节点设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

数据采集(dataacquisition,daq),又称数据获取,是指从数据源自动采集数据并进行处理后存储入库的过程。随着大数据技术的不断深入,数据源非常丰富且数据类型多样,需要数据采集系统存储、分析、挖掘的数据量庞大,同时对数据采集系统的性能要求也与日俱增,往往要求数据采集系统具有高有效性、高可靠性。因此,如何构建能够高效采集海量数据的数据采集系统成为业界关心的重点问题。

本发明实施例搭建了一种全新的数据采集系统的架构,数据采集系统全异步式运行,该数据采集系统主要具有以下突出特点:第一,高效率:数据采集系统中不同数据处理模块可以异步处理不同批次的数据,每个数据处理模块处理完当前的数据即可自动处理下一批数据,无需等待其他数据处理模块处理完成。第二,分布式:数据采集系统可支持分布式采集方式,不同数据处理模块可部署于不同节点设备中,由不同节点设备执行不同的数据处理操作。第三:可扩展:数据采集系统中数据处理模块的具体处理逻辑、数据处理模块的数量、数据处理模块所处的节点设备、数据处理模块的并发量均可以根据实际业务需求进行部署,灵活性高。第四,高可靠:数据采集系统中设计了快照机制,实现断点续传功能,任一数据处理模块宕机并重启后可自动恢复对宕机前处理的数据进行处理,可靠性和鲁棒性强。第五:健壮性:数据采集系统中设计了反压机制,系统面临流量峰值时可自动降低从数据源获取数据的速度,避免节点设备负载过重,避免对节点设备的性能造成影响。

以下,对本发明实施例提供的数据采集系统的架构以及基于这种系统架构进行数据采集的方法进行具体阐述。

图1是本发明实施例提供的一种数据采集系统的架构示意图,该数据采集系统包括多个数据处理模块,可以根据实际业务需求将多种数据处理操作分配给不同的数据处理模块,由每个数据处理模块依次执行对应的数据处理操作,以完成对数据执行多种数据处理操作的功能。

数据采集系统的系统架构:数据采集系统可以看作一条采集流水线,数据采集系统中每个数据处理模块顺次级联,上一个数据处理模块输出的数据会作为下一个数据处理模块的输入的数据,其中第一个数据处理模块和数据源连接,最后一个数据处理模块和第一存储源连接。示例性地,参见图1,假设数据采集系统中包括m个数据处理模块(m为大于1的正整数),对于数据采集系统中第一个数据处理模块来说,第一个数据处理模块与数据源以及第二个数据处理模块连接,对于数据采集系统中第i个数据处理模块来说(i为大于1且小于m的正整数),第i个数据处理模块与第i-1个数据处理模块以及第i+1个数据处理模块连接,对于数据采集系统中第m个数据处理模块(即最后一个数据处理模块)来说,第m个数据处理模块与m-1个数据处理模块以及第一存储源连接。

其中,数据源是指数据的来源,数据源用于提供待处理的原始数据,数据源的物理形态可以根据实际业务场景确定,例如数据源可以为消息队列,数据可以为消息队列中的消息,又如数据源可以为socket(套接字)端口,数据可以为socket数据,又如数据源可以为客户端,数据可以为页面数据、交互数据、表单数据、会话数据等,又如数据源可以为摄像机,则数据可以为摄像机拍摄的视频,又如数据源可以为传感器,则数据可以为传感器采集的数据。第一存储源是指用于存储经过多种数据处理操作后的数据的存储源,也可以称为底层存储或存储。第一存储源与最后一个数据处理模块连接,可以接收并存储最后一个数据处理模块处理后的数据。其中,第一存储源的物理形态可以根据实际业务场景确定,例如可以为硬盘、数据库、ftp(filetransferprotocol,文件传输协议)服务器等。

本实施例中,数据处理模块执行数据处理操作实际为数据处理模块所在的节点设备执行数据处理操作,任一个节点设备可以包括一个或多个数据处理模块,从而执行对应的一种或多种数据处理操作。数据处理模块具体可以通过软件的方式实现,例如数据处理模块可以为进程、线程、对象、方法、函数、代码块、脚本文件等。进一步地,当数据处理模块为进程时,数据处理模块内部可以包括多个线程,由多个线程并发地执行数据处理操作。

可选地,数据采集系统可以支持分布式采集和/或单机式采集的架构,具体包括以下两种设计:

设计一(分布式采集):数据采集系统的多个数据处理模块分别位于多个节点设备中,那么,参见图2,数据采集系统可以看作多个节点设备的集合,每个节点设备包括一个或多个数据处理模块,用于执行这一个或多个数据处理模块对应的数据处理操作,不同节点设备之间可通过网络连接,不同节点设备可以分布于不同地点,可以具有不同功能,还可以具有不同的物理形态,本发明实施例对此不做限定。进一步地,数据采集系统可以采用集群化设计,即同一个数据处理模块也可以部署于多个节点设备中,由多个节点设备执行相同的数据处理操作。

其中,数据采集系统中的数据处理模块部署于哪个节点设备中、每个节点设备部署的数据处理模块的数量均可以根据实际业务需求确定。示例性地,参见图3,假设数据采集系统包括4个数据处理模块,可将4个数据处理处理模块分别部署于云端的3个节点设备中,每个节点设备可部署一个或多个数据处理模块。

在分布式采集的架构中,针对相邻的数据处理模块传输数据的过程,对于数据采集系统中任意两个相邻的数据处理模块,如果这两个相邻的数据处理模块分别位于两个节点设备,两个节点设备可以预先建立网络连接,这两个数据处理模块可以通过网络连接进行数据传输。可选地,任一个数据处理模块可以存储下一个数据处理模块对应的节点设备的网络地址,以便基于网络地址向下一个节点设备发送数据。另外,如果这两个相邻的数据处理模块位于同一节点设备,可以采用设备内部的通信方式进行数据传输。

可选地,为了在分布式采集的过程中控制每个节点设备,数据采集系统还可以包括资源管理器,资源管理器可以看作是控制数据采集系统的控制系统,资源管理器可以部署于数据采集系统以外的某个节点设备中,或部署于数据采集系统中的某个节点设备中,开发人员可以在资源管理器中配置数据采集系统的流程描述信息,该流程描述信息包括各个数据处理模块之间的连接关系以及各个数据处理模块的标识,资源管理器可以将已配置的流程描述信息发送给每个节点设备,每个节点设备可以接收流程描述信息,基于本机中每个数据处理模块的标识,查询该流程描述信息,从而确定本机中每个数据处理模块的下一个数据处理模块,以便本机的每个数据处理模块在采集数据的过程中向下一个数据处理模块发送数据。其中,资源管理器可以为yarn、mesos等。

设计二(单机采集式):参见图4,数据采集系统的多个数据处理模块位于同一个节点设备中,由这一个节点设备依次基于多个数据处理模块执行多种数据处理操作。其中,每个数据处理模块可以为节点设备中的某一进程、某一线程或某一方法。

综上所述,本发明实施例提供的数据采集系统支持分布式采集和/或单机式采集的架构,可以部署于一台或多台节点设备上,可以根据实际业务需求对数据处理模块任意扩展,灵活性和扩展性极高。

数据采集系统的功能:数据采集系统用于基于数据源的数据,由多个数据处理模块依次执行多种数据处理操作,并由最后一个数据处理模块将处理后的数据存储至第一存储源中。其中,每个数据处理模块用于执行一种类型的数据处理操作,通过不同数据处理模块可以分别对数据执行不同的数据处理操作。

示例性地,数据采集系统执行的多种数据处理操作可以包括对数据进行清洗、转化、筛选、变形、统计、检测等操作。结合实际业务场景,以统计某网站上某博主的最新一条微博的转发数量为例,数据源可以为该网站,第一个数据处理模块可以从网站中拉取微博页面,将微博页面转化为结构化数据,发送给第二个数据处理模块,第二个数据处理模块从结构化数据中筛选出最新一条微博的所有数据,发送给第三个数据处理模块,第三个数据处理模块从最新一条微博的所有数据中提取转发数量,将转发数量存储至第一存储源。

针对数据采集系统中数据的处理流程,第一个数据处理模块会获取数据源的数据,对数据源的数据进行处理,将处理后的数据发送给第二个数据处理模块,第二个数据处理模块接收到第一个数据处理模块处理后的数据后,会对数据进行处理,将处理后的数据发送给第三个数据处理模块,依次类推,最后一个数据处理模块接收到倒数第二个数据处理模块处理后的数据后,会对数据进行处理,将处理后的数据存储至第一存储源中,至此,实现了在第一存储源中存储多种数据处理操作后的数据的功能。

本实施例中,数据采集系统通过以下两点实现了全异步式的数据采集流程,从而极大地提高了数据采集的效率:

第一点、数据采集系统中第一个数据处理模块用于获取到数据源的任一批数据时,指示数据源提供下一批数据。

相关技术中,数据采集系统处理数据的处理逻辑为:任一批数据成功存储入库后,再处理下一批数据。基于该处理逻辑,数据采集系统会由最后一个线程负责向数据源反馈,那么,当数据源向第一个线程提供某批数据后,这批数据要依次经过每个线程的处理,直到最后一个线程处理数据完毕并将处理后的数据存储至存储源时,最后一个线程才会通知数据源提供下一批数据,而在从第一个线程得到数据到最后一个线程进行反馈的期间,数据源均不会提供下一批数据,任一个线程即使当前空闲,也得不到待处理的数据,也只能等待其他线程处理数据完毕,这就造成低效率和处理资源的浪费。

而本发明实施例提供的数据采集系统中,对数据采集系统的处理逻辑和向数据源反馈的主体均进行了改进,处理逻辑为:任一批数据已进入数据采集系统,即通知数据源提供下一批数据,而无需等待这批数据在数据采集系统内部依次处理完成。基于该处理逻辑,数据采集系统的第一个数据处理模块负责向数据源反馈,那么,当数据源向第一个数据处理模块提供某批数据后,第一个数据处理模块获取到这批数据后即会指示数据源提供下一批数据,则数据源即可向第一个数据处理模块继续提供下一批数据,以便数据采集系统可异步处理多批数据,避免出现数据处理模块要等待其他数据处理模块的情况。

其中,针对第一个数据处理模块指示数据源提供下一批数据的方式,第一个数据处理模块可以向数据源发送确认消息,确认消息用于指示数据源提供下一批数据,当数据源接收到确认消息后,即会提供下一批数据。其中,确认消息的格式可以根据数据源与第一个数据处理模块之间的通信协议确定,另外,数据源提供的任一批数据的数据量可以根据实际业务场景确定,本发明实施例对此不做限定。

示例性地,第一个数据处理模块获取数据源的数据的具体过程可以包括以下两种设计:

设计一(主动拉取):第一个数据处理模块可以从数据源中拉取(fetch)数据,从而获取数据源的数据。具体地,第一个数据处理模块可以预先存储数据源的标识,基于数据源的标识访问数据源,从而从数据源中拉取数据。其中,数据源的标识用于唯一确定对应的数据源,可以为数据源的网络地址、名称、索引号等。

以数据源为消息队列为例,第一个数据处理模块可以存储消息队列的名称和网络地址,基于消息队列的名称和网络地址,从消息队列中拉取数据。其中,消息队列是指消息的传输过程中保存消息的虚拟容器,消息队列可以为kafka、activemq、rabbitmq、zeromq、metamq等。

设计二(被动接收):数据源可以主动向第一个数据处理模块发送数据,第一个数据处理模块可以接收数据源的数据,从而获取数据源的数据。

以数据源为socket端口为例,数据源可以调用socket端口,向第一个数据处理模块发送socket数据,第一个数据处理模块可以监听socket端口,从而接收socket数据。

第二点、数据采集系统中的任一个数据处理模块还用于对已接收到的任一批数据执行对应的数据处理操作时,接收下一批数据。

相关技术中,数据采集系统中每个线程采用同步处理方式进行数据处理:任一个线程先接收一批数据,再对已接收到的数据进行处理,在此期间线程无法接收继续数据,要等待这批数据处理完毕,发送给下一个线程后,该线程才能够接收下一批数据进而进行处理,也即是,线程会交替地执行接收数据的操作和处理数据的操作,任一时刻只能执行一种操作。

而本发明实施例提供的数据采集系统中,任一个数据处理模块采用异步处理方式进行数据处理:数据处理模块可以同时执行接收数据和处理数据的操作,数据处理模块在对任一批数据执行数据处理操作的过程中,无需等待这一批数据处理完成,即可接收下一批数据。通过异步处理方式,当一批数据处理完成后数据处理模块即可自动对已接收的下一批数据进行处理,保证当前处理的数据不会阻塞下一批数据的流入,进而保证数据处理模块尽可能地始终处于工作状态。同时,数据采集系统中不同数据处理模块可以处理不同批次的数据,例如假设第三个数据处理模块还在处理第一批的数据,而第一个数据处理模块可以已经开始处理第二批的数据,如此,可以提高数据采集系统整体的采集效率。

可选地,为了能够缓存接收到的数据,数据采集系统中任一个数据处理模块可以具有对应的内存空间,该内存空间用于缓存已接收到的数据,数据采集系统中任一个数据处理模块还用于对已接收到的任一批数据执行对应的数据处理操作时,将接收到的下一批数据缓存至该任一个数据处理模块的内存空间中。那么,当处理任一批数据完成后,数据处理模块直接从该内存空间中读取该下一批数据即可,极大地提高了处理数据的效率。

示例性地,参见图5,在数据采集系统的架构中,任一个数据处理模块之前可以置有内存空间,任一批数据可以先进入数据处理模块的内存空间中,在内存空间中进行缓存,再从内存空间进入到数据处理模块中。其中,当数据进入任一个数据处理模块的内存空间时,如果数据处理模块当前空闲,则数据处理模块可直接从内存空间中读取数据并开始处理,如果数据处理模块正在处理之前的数据,可以处理完毕后再从内存空间中读取数据并开始处理。

需要说明的是,上述仅是以对任一批数据和下一批数据这两批数据的操作为例进行说明,在实施中,任一个数据处理模块对已接收到的任一批数据执行对应的数据处理操作时,可以接收之后的多批数据,还可以当处理任一批数据后,依次对已接收到的多批数据执行数据处理操作。例如假设数据处理模块处理第一批数据时,如果接收到第二批数据,则将第二批数据缓存至内存空间中,之后又接收到第三批数据,则再将第三批数据也缓存至内存空间中,当处理第一批数据后,依次处理第二批数据和第三批数据,依次类推。

结合内存空间的设计,数据采集系统中任一个数据处理模块执行数据处理操作后,可以将处理后的数据推送至下一个数据处理模块的内存空间中。示例性地,任一个数据处理模块可以存储下一个数据处理模块的通信端口的端口号,基于该端口号向下一个数据处理模块的通信端口发送处理后的数据,下一个数据处理模块预先将该通信端口与对应的通信端口进行了绑定,会自动将该任一个处理模块处理后的数据缓存至通信端口对应的内存空间中。需要说明的是,本段描述的内存空间可以指堆内内存(on-heapmemory),在jvm(java虚拟机,javavirtualmachine)的环境中,堆内内存是指由节点设备的虚拟机管理的内存,具有容易实现等优势,任一个数据处理模块可以用于将处理后的数据推送至下一个数据处理模块的堆内内存中。

可选地,结合上述分布式采集的方式,数据处理模块的内存空间还可以包括堆外内存(off-heapmemory),堆外内存是指由节点设备的操作系统管理的内存,堆外内存通常用于存储本机要发送至远端的数据。

基于堆内内存和堆外内存的原理,数据处理模块可以在堆内内存中缓存接收到的数据,在堆外内存中缓存待发送给其他节点设备的数据处理模块的数据。

具体地,任一个处理模块对数据进行处理后,当任一个数据处理模块和下一个数据处理模块位于同一节点设备时,任一个数据处理模块可以直接将处理后的数据推送至下一个数据处理模块的堆内内存中。而当任一个处理模块和下一个数据处理模块位于不同节点设备时,任一个数据处理模块可以对处理后的数据进行序列化,将序列化的数据存储至任一个数据处理模块的堆外内存中,将序列化后的数据从堆外内存推送至下一个数据处理模块的堆内内存中。其中,序列化(serialization)是指对数据的格式进行转换,以使转换后的数据的格式可以进行网络传输的过程。可选地,任一个数据处理模块可以采用zero-copy(零拷贝)技术,执行将序列化后的数据从堆外内存推送至下一个数据处理模块的堆内内存的步骤。另外,当数据处理模块直接采用操作系统的内存空间接收数据时,则内存空间无需区分为堆内空间和堆外空间。

示例性地,参见图6,假设数据处理模块以p表示,当p1对数据处理完成后,假设p1要将处理后的数据发送到与p1位于同一节点设备的p2中,则p1直接将处理后的数据推送至p2的堆内内存即可。假设p1要将处理后的数据发送到位于另一节点设备的p3中,则p1先将处理后的数据序列化,再将序列化的数据存储至p1的堆外内存中,再将序列化后的数据从p1的堆外内存推送至p3的堆内内存。

可选地,为了给每个数据处理模块分配内存空间,参见图7,数据采集系统还可以包括至少一个共享内存池,每个共享内存池包括大量的内存空间,每个共享内存池用于为对应的多个数据处理模块提供内存空间。例如,数据采集系统中的任一个节点设备可以部署一个共享内存池,该共享内存池为该节点设备中的所有数据处理模块提供内存空间,那么假设数据采集系统部署于m个节点设备(m为不小于1的正整数),则数据采集系统包括m组数据处理模块,相应地包括m个共享内存池。其中,共享内存池内的内存空间可以包括堆内内存和堆外内存,共享内存池可以包括多个内存页,内存页包括多个内存段,可将内存页中的一个或多个内存段作为每次为数据处理模块分配的内存空间。在实施中,数据采集系统启动时,每个节点设备的操作系统可以申请一定大小的连续内存空间,作为创建的共享内存池。

针对一组数据处理模块共享内存空间的具体过程,在数据采集之前,任一个节点设备可以预先从共享内存池中取出一定大小的内存空间,平均分配给每个数据处理模块,在数据采集的过程中,任一个数据处理模块可以在预先分配的内存空间中存储接收到的数据。进一步地,随着数据不断流入数据处理模块的内存空间,如果数据处理模块的内存空间不足,数据处理模块可以重新申请共享内存池中的内存空间,以便在申请的内存空间中存储接收到的数据,从而扩展自身的内存空间。

可选地,结合共享内存池,本实施例可以支持内存复用的功能:任一个数据处理模块从共享内存池申请内存空间后,可以将接收到的数据缓存至申请的内存空间中,再从内存空间中读取数据,从而使用申请到的内存空间。而当申请到的内存空间使用完毕后,任一个数据处理模块可以将重新申请的内存空间释放回共享内存池中,那么共享内存池可以将该内存空间重新分配给其他数据处理模块,或者在该数据处理模块下次内存空间不足时重新分配给该数据处理模块,从而实现内存复用,提高内存空间的利用率,节约内存资源。其中,当共享内存池中的内存空间以内存页为单位时,每个数据处理模块使用内存页时可以尽可能一页用尽后再使用下一页,以便在释放内存时可以连续释放内存页,避免内存碎片的产生以及内存空间的浪费。

综上所述,本发明实施例提供的数据采集系统,设计了全异步式的数据采集系统,通过数据采集系统的第一个数据处理模块指示数据源提供下一批数据,并且每个数据处理模块可以同时接收数据和处理数据,实现数据采集系统中不同数据处理模块异步处理不同数据的效果,保证数据采集系统可以同时针对多批数据进行处理,避免数据处理模块要等待其他数据处理模块执行数据处理操作完成后才能开始处理数据的情况,提高了数据采集的效率,节省了数据采集的时间。

可选地,参见图8,数据采集系统还包括第二存储源,第二存储源与数据采集系统中的每个数据处理模块连接,第二存储源的物理形态可以与第一存储源类似,第二存储源可以具体为分布式存储源。需要说明的是,第二存储源和第一存储源可以为不同的存储源,例如第二存储源和第一存储源可以部署于不同的设备,当然第二存储源和第一存储源也可以为同一个存储源,本发明实施例对此不做限定。

第二存储源的功能:第二存储源用于存储数据采集系统当前处理的数据的快照单元,快照单元(snapshot)是指当前处理的数据的映像,快照单元可以看作是数据在数据采集系统流转过程中的备份存档,快照单元用于指示当前处理对应数据的数据处理模块,例如快照单元可以携带当前处理对应数据的数据处理模块的标识,通过数据处理模块的标识指示对应的数据处理模块。其中,数据处理模块的标识用于唯一确定对应的数据处理模块,可以为数据处理模块的名称、编号、地址等。

本实施例中,可以通过以下(1)至(3)实现第二存储源存储当前处理的数据的快照单元的功能:

(1)第一个数据处理模块还用于在数据源的不同数据之间插入栏栅消息,将相邻两个栏栅消息之间的所有数据作为一个快照单元,将快照单元存储至第二存储源。

栏栅消息用于指示快照单元的起始点或结束点,第一个数据处理模块通过插入栏栅消息,可以将数据源的数据分割成不同的快照单元。栏栅消息不会影响数据处理模块对数据的正常处理操作,数据处理模块在处理数据的过程中遇到栏栅消息时可以自动跳过。

针对插入栏栅消息的具体过程,第一个数据处理模块可以在接收到数据源的任一批数据后,可以每隔预设条数,在数据源的数据中插入一条栏栅消息。或者每当插入一条栏栅消息后开始计时,当记录的时长超过预设时长时再次插入一条栏栅消息。其中预设条数和/或预设时长的具体数值可以根据实际业务需求确定,可以由开发人员预先设置。

针对在第二存储源存储快照单元的具体过程,第一个数据处理模块在插入栏栅消息后,可以将两个相邻的栏栅消息之间的所有数据作为一个快照单元,即对于两个相邻的栏栅消息来说,可将前一个栏栅消息作为快照单元的起始点,将后一个栏栅消息作为快照单元的结束点,将前一个栏栅消息、两个栏栅消息之间的所有数据和后一个栏栅消息组成一个快照单元,从而得到快照单元。之后,第一个数据处理模块可以向快照单元中添加第一个数据处理模块的标识,再将添加了标识的快照单元存储至第二存储源中。

示例性地,参见图9,假设数据源提供的数据以mi表示,栏栅消息以bi表示,如果数据源提供的数据为m1、m2、m3……m100,第一个数据处理模块每隔4条数据插入一条栏栅消息bi,则插入栏栅消息后,数据源的数据变为b1、m1、m2、m3、m4、b2、m5、m6、m7、m8、b3……m100,第一个快照单元为b1、m1、m2、m3、m4,第二个快照单元为b2、m5、m6、m7、m8、b3,依次类推。

(2)数据采集系统中任一个数据处理模块还用于在处理任一数据的过程中,向第二存储源中数据所属的快照单元添加数据处理模块的标识。

随着快照单元在数据采集系统的不同数据处理模块之间流转,数据采集系统的多个数据处理模块会依次对快照单元进行处理,在任一个数据处理模块处理任一数据的过程中,该任一个数据处理模块可以确定数据所属的快照单元,向第二存储源中的快照单元添加该任一个数据处理模块的标识,以便通过数据处理模块的标识,标记快照单元正在该数据处理模块中进行处理。

具体地,任一个数据处理模块可以采用动态修改快照单元的方式,添加该任一个数据处理模块的标识:当任一个数据处理模块处理快照单元内的数据之前,快照单元会携带前一个数据模块的标识,则数据处理模块处理快照单元内的数据时,会将快照单元中前一个数据模块的标识修改为该数据处理模块的标识。另外,在数据处理模块处理数据的过程中,如果数据处理模块对任一快照单元中的部分数据进行了修改,可以将第二存储源中对应的快照单元中的这部分数据也替换为修改后的数据,从而对快照单元进行刷新。而如果数据处理模块未对接收到的数据进行修改,则无需对快照单元进行修改。

(3)数据采集系统中最后一个数据处理模块在将任一数据存储至第一存储源后,从第二存储源中删除数据所属的快照单元。

对于存储源的任一批数据来说,当该任一批数据已经经过多个数据处理模块的处理,由最后一个数据处理模块存储至第一存储源后,可以认为这一批数据已经达到了处理和存储的目的,即使数据采集系统此时宕机,重启后也可从第一存储源中随时得到这一批处理后的数据,因此第二存储源无需继续存储这一批数据的快照单元。因此,当最后一个处理模块在第一存储源存储任一批处理后的数据后,可以确定该处理后的数据在第二存储源中所属的快照单元,从第二存储源中删除该快照单元,以便节省第二存储源的存储空间。

结合上述(1)至(3),本实施例实现了快照机制,通过标记数据采集系统中流转的数据当前所处的数据处理模块,能够实现断点续传的功能:在数据采集系统运行中,受到网络异常、设备故障等因素的影响,任一个数据处理模块可能出现宕机,而当任一个数据处理模块宕机并重启后,任一个数据处理模块可以基于第二存储源中的快照单元,恢复对宕机前处理的数据进行数据处理,而无需从头开始,重新对第一批数据进行处理。

针对恢复对宕机前处理的数据进行数据处理的过程,任一个数据处理模块可以基于该数据处理模块的标识,在第二存储源中进行搜索,从第二存储源中获取已添加该数据处理模块的标识的至少一个快照单元,该至少一个快照单元中的数据即为数据处理模块在系统宕机前处理的数据,该数据处理模块可以从第二存储源中获取该至少一个快照单元,并继续对该至少一个快照单元的数据进行处理。

可选地,在实施中,在业务旺季、客流高峰、促销活动等各种场景中,数据源提供的数据量会迅猛增长,达到极大值点,即出现流量峰值。为了应对流量峰值,本实施例提供以下两种设计,能够保证数据采集系统在面临流量峰值时保持系统的稳定性。

设计一(反压机制)、数据采集系统可以在面临流量峰值时,如果内存空间已经不足,则进入反压状态,即降低从数据源中获取数据的速度,从而避免数据源提供的数据量超过系统的负载能力。

可选地,反压机制具体可以通过以下(1)和(2)实现:

(1)当第一个数据处理模块所在的节点设备满足预设条件时,第一个数据处理模块降低从数据源中获取数据的速度。

当面临流量峰值时,数据源的数据会不断流入第一个数据处理模块的内存空间,导致第一个数据处理模块占用的内存空间越来越多。第一个数据处理模块可以在采集数据的过程中,实时检测所在的节点设备是否满足预设条件,当节点设备满足预设条件时,获知节点设备的内存空间已经不足,则降低从数据源中获取数据的速度,从而避免节点设备的内存空间过度消耗,进而避免影响节点设备的性能。

其中,该预设条件可以包括以下条件1和条件2的任意组合:

条件1、节点设备的共享内存池当前占用的内存达到第一预设阈值。

由于节点设备的共享内存池可以看作节点设备为内部的所有数据采集模块总共预备的内存空间,当共享内存池当前占用的内存过多时,表明节点设备内每个数据处理模块当前缓存的数据量已经过大,超过了每个数据处理模块的数据处理能力。

因此,第一个数据处理模块可以实时检测对应的共享内存池当前占用的内存是否达到第一预设阈值,当共享内存池当前占用的内存达到第一预设阈值,则确定节点设备满足预设条件,降低从数据源获取数据的速度,那么,后续随着每个数据处理模块处理数据完毕后,将内存空间陆续释放回共享内存池,共享内存池中的内存会逐渐充盈,重新回归到当前占用的内存小于第一预设阈值的状态。那么,共享内存池可以维持内存充足,保证节点设备内每个数据处理模块正常运行。其中,该第一预设阈值可以根据业务需求确定,可以由开发人员设置。

条件2、节点设备的数据处理模块的当前申请内存的线程的总数量达到第二预设阈值。

任一个数据处理模块内可以活跃多个线程,每个线程可以向共享内存池申请内存以存储接收到的数据,如果申请内存的线程过多,表明节点设备内每个数据处理模块当前缓存的数据量已经过大,超过了每个数据处理模块的数据处理能力。

因此,第一个数据处理模块可以实时检测节点设备内的数据处理模块的当前申请内存的线程的总数量是否达到第二预设阈值,若当前申请内存的线程的总数量是否达到第二预设阈值,则确定节点设备满足预设条件,降低从数据源获取数据的速度。示例性地,假设第一个数据处理模块p1所在的节点设备包括三个数据处理模块:p1、p2和p3,p1可以检测p1、p2和p3对应的申请内存的线程的总数量是否达到第二预设阈值。其中,该第二预设阈值可以根据业务需求确定,可以由开发人员设置。

针对降低从数据源中获取数据的速度的具体过程,当第一个数据处理模块以主动拉取的方式从数据源中获取数据时,第一个数据处理模块可以对原始拉取速度除以预设倍数,得到降低后的拉取速度,按照降低后的拉取速度拉取数据,从而放慢拉取数据的速度。例如,第一个数据处理模块原本每隔1s拉取一次数据,降低拉取速度后,第一个数据处理模块可以每隔5s拉取一次数据。当第一个数据处理模块以被动接收的方式从数据源中获取数据时,第一个数据处理模块可以通知数据源降低发送数据的速度,数据源得到通知后可以降低发送数据的速度,以便第一个数据处理模块可以降低获取数据的速度。其中,第一个数据处理模块可以向数据源发送通知消息,通过通知消息通知数据源降低发送数据的速度。

(2)数据采集系统中第一个数据处理模块以外的任一个数据处理模块还用于在对应节点设备满足预设条件时,指示第一个数据处理模块降低从数据源中获取数据的速度。

结合数据采集系统中数据的流向,可将第一个数据处理模块想象为控制整个系统中数据流速的水龙头,第一个数据处理模块可以认为是其后的每个数据处理模块的数据的来源,第一个数据处理模块获取数据的速度直接影响了其后的每个数据处理模块获取数据的速度。

因此,第一个数据处理模块以外的任一个数据处理模块可以检测对应的节点设备是否满足预设条件,当对应的节点设备满足预设条件时,指示第一个数据处理模块降低从数据源中获取数据的速度。第一个数据处理模块得到指示后,会降低从数据源获取数据的速度,那么,由于第一个数据处理模块获取数据的速度降低,则其后的每个数据处理模块由于连锁反应,获取数据的速度也会随之降低。其中,针对任一个数据处理模块指示第一个数据处理模块降低从数据源中获取数据的速度的方式,任一个数据处理模块可以向第一个数据处理模块发送通知消息,该通知消息用于通知降低从数据源中获取数据的速度,第一个数据处理模块接收该通知消息,即可确定要降低从数据源中获取数据的速度。另外,第一个数据处理模块以外的任一个数据处理模块检测对应节点设备满足预设条件的具体过程与上述步骤一同理,在此不做赘述。

需要说明的是,在反压机制的基础上,本实施例还提供了数据采集系统从反压状态恢复为原本采集数据的速度的机制,结合上述反压机制的(1)和(2),从反压状态恢复的机制具体可以包括以下(a)和(b)。

(a)当第一个数据处理模块降低从数据源中获取数据的速度后,当第一个数据处理模块所在的节点设备不满足预设条件的次数达到预设次数时,第一个数据处理模块恢复从数据源中获取数据的速度。

本设计与反压机制的(1)对应。当第一个数据处理模块降低从数据源中获取数据的速度后,数据源的数据流入第一个数据处理模块的速度会减缓,则第一个数据处理模块的节点设备的内存空间会逐渐恢复充足。在此过程中,第一个数据处理模块可以再次检测节点设备是否满足预设条件,当节点设备满足预设条件时,累计节点设备满足预设条件的次数。当节点设备满足预设条件的次数尚未达到预设次数时,认为节点设备的内存空间尚未足够,此时如果恢复之前从数据源获取数据的速度,可能导致节点设备很快又要进入反压状态,导致节点设备的状态不断波动,因此暂时不恢复原来从数据源中获取数据的速度,而当节点设备满足预设条件的次数达到预设次数时,认为节点设备的内存空间已经足够,则恢复进入反压状态之前从数据源获取数据的速度。其中,该预设次数可以根据实际业务需求确定,可以为2次。

(b)数据采集系统中第一个数据处理模块以外的任一个数据处理模块指示第一个数据处理模块降低从数据源中获取数据的速度后,该任一个数据处理模块所在的节点设备不满足预设条件的次数达到预设次数时,该任一个数据处理模块向第一个数据处理模块指示第一个数据处理模块恢复从数据源中获取数据的速度。其中,任一个数据处理模块可以向第一个数据处理模块发送恢复消息,该恢复消息用于指示第一个数据处理模块恢复从数据源中获取数据的速度。

本设计与反压机制的(2)对应,当第一个数据处理模块降低从数据源中获取数据的速度后,数据源的数据流入第一个数据处理模块的速度会减缓,则任一个数据处理模块受到第一个数据处理模块的影响,数据流入该任一个数据处理模块的速度会减缓,则该任一个数据处理模块所在的节点设备的内存空间会逐渐恢复充足。在此过程中,该任一个数据处理模块可以同理地检测任一个数据处理模块所在的节点设备不满足预设条件的次数是否达到预设次数,当任一个数据处理模块所在的节点设备不满足预设条件的次数达到预设次数时,该任一个数据处理模块会向第一个数据处理模块发送恢复消息,第一个数据处理模块接收到恢复消息后,会恢复进入反压状态前获取数据的速度,那么随着第一个数据处理模块获取数据的速度的加快,该任一个数据处理模块受到连锁反应的影响,获取数据的速度也会加快。

设计二(增加并发量)、在实施中,数据采集系统中的任一个数据处理模块可以生成至少一个线程,可以将数据处理操作的处理逻辑写入每个线程中,当数据处理模块需要处理任一批数据时,可以根据需要将这批数据中的不同数据分配给不同的线程,控制至少一个线程并发地处理数据,从而提高处理数据的效率。也即是,任一个数据处理模块可以基于至少一个线程,对任一批数据执行对应的数据处理操作。显然,数据处理模块的线程的数量越多,处理数据的速度越快。

因此,数据采集系统中任一个数据处理模块当检测到流量峰值时,可以增加并发量,并发量是指数据处理模块中对数据进行处理的线程的数量,并发量越大,则数据处理模块处理数据的速度越快,从而高并发地进行数据处理,缓解处理大量数据的压力。

针对检测流量峰值的具体过程,任一个数据处理模块可以检测当前接收数据的速度,判断接收数据的速度是否达到预设速度阈值,当接收数据的速度已经达到预设速度阈值时,表明数据正在快速流入数据处理模块,则确定发生了流量峰值。或者,任一个数据处理模块可以检测当前接收数据的速度,计算接收数据的速度与历史接收数据的速度之间的差值,当该差值已经达到预设差值阈值时,表明数据量相比历史采集过程来说快速增长,则确定发生了流量峰值。当然数据处理模块还可以采用其他方式检测流量峰值,对此不做限定。

另外,在该任一个数据处理模块增加并发量后,如果不再检测到流量峰值,可以减少并发量,从而将并发量恢复至之前的并发量。

需要说明的是,在实施中数据处理模块可以择一执行上述设计一和设计二中的任一种,例如可以当检测到流量峰值后,判断节点设备是否满足预设条件,当节点设备不满足预设条件时执行设计二,当节点设备满足预设条件时执行设计一。当然数据处理模块也可以同时执行设计一和设计二。

基于上述图1实施例阐述的数据采集系统的系统架构以及数据采集系统内部的数据处理模块的功能,以下对本发明实施例提供的数据采集方法进行介绍。

图10是本发明实施例提供的一种数据采集方法的流程图,该方法应用于数据采集系统的数据采集系统中,可以由数据采集系统内的各个数据处理模块进行交互实现。参见图10,该方法包括以下步骤:

1001、当数据采集系统中第一个数据处理模块获取数据源的任一批数据时,该第一个数据处理模块指示该数据源提供下一批数据。

1002、当数据采集系统中任一个数据处理模块对已接收到的任一批数据执行对应的数据处理操作时,该任一个数据处理模块接收下一批数据。

1003、数据采集系统中最后一个数据处理模块将处理后的数据存储至第一存储源中。

本实施例提供的方法,提供了全异步式的数据采集方法,通过数据采集系统的第一个数据处理模块指示数据源提供下一批数据,并且每个数据处理模块可以同时接收数据和处理数据,保证数据采集系统中不同数据处理模块能异步地处理不同数据,避免数据处理模块要等待其他数据处理模块处理数据完成后才能开始处理数据的情况,提高了数据采集的效率,节省了数据采集的时间。

在一种可能的设计中,该数据采集系统中任一个数据处理模块具有对应的内存空间,该内存空间用于缓存已接收到的数据;

该当任一个数据处理模块对已接收到的任一批数据执行对应的数据处理操作时,该任一个数据处理模块接收下一批数据,包括:

该任一个数据处理模块对已接收到的任一批数据执行对应的数据处理操作时,该任一个数据处理模块将接收到的下一批数据缓存至该任一个数据处理模块的内存空间中;

当该任一个数据处理模块处理该任一批数据完成后,该任一个数据处理模块从该内存空间中读取该下一批数据。

在一种可能的设计中,该数据采集系统还包括至少一个共享内存池,每个共享内存池用于为对应的多个数据处理模块提供内存空间。

在一种可能的设计中,该当任一个数据处理模块对已接收到的任一批数据执行对应的数据处理操作时,该任一个数据处理模块接收下一批数据,包括:

该任一个数据处理模块从对应的共享内存池中申请内存空间;

当申请得到的内存空间使用完毕后,该任一个数据处理模块将该申请得到的内存空间释放回该共享内存池中。

在一种可能的设计中,该数据采集系统中任一个数据处理模块的内存空间包括堆内内存;

该第一个数据处理模块指示该数据源提供下一批数据之后,该方法还包括:

该任一个数据处理模块将处理后的数据推送至下一个数据处理模块的堆内内存中。

在一种可能的设计中,该数据采集系统中任一个数据处理模块的内存空间还包括堆外内存;

该任一个数据处理模块将处理后的数据推送至下一个数据处理模块的堆内内存中,包括:

当该任一个数据处理模块和下一个数据处理模块位于同一节点设备时,该任一个数据处理模块将处理后的数据推送至该下一个数据处理模块的堆内内存中;或,

当该任一个处理模块和下一个数据处理模块位于不同节点设备时,该任一个数据处理模块对处理后的数据进行序列化,将序列化的数据存储至该任一个数据处理模块的堆外内存中,将该序列化后的数据从该堆外内存推送至下一个数据处理模块的堆内内存中。

在一种可能的设计中,该数据采集系统还包括第二存储源,该第二存储源用于存储该数据采集系统当前处理的数据的快照单元,该快照单元用于指示当前处理对应数据的数据处理模块;

该方法还包括:

当任一个数据处理模块宕机并重启后,该任一个数据处理模块基于该第二存储源中的快照单元,恢复对宕机前处理的数据进行数据处理。

本设计中,在全异步式的数据采集系统的基础上结合了快照机制,能够实现断点续传的功能,当数据处理模块宕机并重启后,数据处理模块可以基于第二存储源的快照,恢复对宕机前处理的数据进行数据处理,避免由于宕机导致必须重新开始处理数据的情况,提高数据采集系统的鲁棒性和可靠性。

在一种可能的设计中,该任一个数据处理模块基于该第二存储源中的快照单元,恢复对宕机前处理的数据进行数据处理之前,该方法还包括:

第一个数据处理模块在该数据源的不同数据之间插入栏栅消息;

该第一个数据处理模块将相邻两个栏栅消息之间的所有数据作为一个快照单元;

该第一个数据处理模块将该快照单元存储至该第二存储源中,其中该栏栅消息用于指示快照单元的起始点或结束点。

在一种可能的设计中,该任一个数据处理模块基于该第二存储源中的快照单元,恢复对宕机前处理的数据进行数据处理之前,该方法还包括:

任一个数据处理模块在处理任一数据的过程中,该任一个数据处理模块向该第二存储源中该数据所属的快照单元添加该数据处理模块的标识。

在一种可能的设计中,该方法还包括:

当该第一个数据处理模块所在的节点设备满足预设条件时,该第一个数据处理模块降低从该数据源中获取数据的速度。

在一种可能的设计中,该方法还包括:

当该第一个数据处理模块以外的任一个数据处理模块对应的节点设备满足预设条件时,该第一个数据处理模块以外的任一个数据处理模块指示该第一个数据处理模块降低从该数据源中获取数据的速度。

基于上述设计,在全异步式的数据采集系统的基础上结合了反压机制,当数据采集系统的节点设备满足预设条件时,第一个数据处理模块会降低从数据源获取数据的速度,从而在面临流量峰值时缓解内存不足的情况,提高数据采集系统的鲁棒性和可靠性。

在一种可能的设计中,该预设条件包括节点设备的共享内存池当前占用的内存达到第一预设阈值,该共享内存池用于为该节点设备的多个数据处理模块提供内存空间,该内存空间用于缓存已接收到的数据;和/或,

该预设条件包括节点设备的数据处理模块的当前申请内存的线程的总数量达到第二预设阈值。

在一种可能的设计中,该数据采集系统中任一个数据处理模块还用于基于至少一个线程,对任一批数据执行对应的数据处理操作;

该方法还包括:

该任一个数据处理模块还用于当检测到流量峰值时增加并发量,该并发量是指数据处理模块中对数据进行处理的线程的数量。

在一种可能的设计中,该多个数据处理模块分别位于多个节点设备中。

需要说明的是,本实施例提供的数据采集方法与上述图1实施例提供的数据采集系统的实施例属于同一构思,其具体过程详见上述图1实施例,在此不做赘述。

图11是本发明实施例提供的一种节点设备的结构示意图,该节点设备1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)1101和一个或一个以上的存储器1102,其中,该存储器1102中存储有至少一条指令,该至少一条指令由该处理器1101加载并执行以实现上述各个方法实施例提供的方法。当然,该节点设备还可以具有有线或无线网络接口以及输入输出接口等部件,以便进行输入输出,该节点设备还可以包括其他用于实现设备功能的部件,在此不做赘述。

在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由节点设备中的处理器执行以完成上述实施例中的数据采集方法。例如,该计算机可读存储介质可以是只读内存(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、只读光盘(compactdiscread-onlymemory,cd-rom)、磁带、软盘和光数据存储设备等。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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