掌桥专利:专业的专利平台
掌桥专利
首页

一种基于HTTP接口热部署的数据采集任务框架及使用方法

文献发布时间:2024-04-18 19:53:33


一种基于HTTP接口热部署的数据采集任务框架及使用方法

技术领域

本发明属于计算机网络及通信技术领域,具体涉及一种基于HTTP接口热部署的数据采集任务框架及使用方法。

背景技术

采用HTTP接口在进行数据采集是一个常见的技术方案,通过定义API接口,可以实现数据的高效、可靠地传输。目前主流的HTTP客户端请求框架如okHTTP3、HTTPclient、netty等,已经能够对构建HTTP请求报文、管理tcp连接、IO模型优化等较为底层逻辑进行较好的封装,使得在程序中发起单个HTTP请求变得简单高效。其中,Apache HTTP Client是一个基于Java的开源的HTTP客户端库,用于发送HTTP请求和接收HTTP响应。Apache HTTPClient有以下有点:一、API易于使用,它提供了一组易于理解和使用的类和方法,可以用于发送GET、POST、PUT、DELETE等HTTP请求;二、高性能,Apache HTTP Client采用了异步I/O和连接池等技术,可以有效地提高性能,同时最大限度地减少了资源消耗。它支持HTTP/1.1和HTTP/2协议,并且可以自动处理重定向、压缩、缓存等机制。三、Apache HTTP Client可以根据需要进行定制,它提供了一组灵活的选项,可以自定义请求头、代理、Cookie、连接超时等参数,以及连接管理、线程池、重试等策略。四、安全可靠,Apache HTTP Client支持HTTPS和TLS/SSL安全协议,可以对HTTP请求进行加密和身份验证,从而保证请求和响应的安全性和可靠性;五、Apache HTTP Client可以在Java环境下运行,并且可以在各种操作系统和开发平台上使用,如Windows、Linux、MacOS、Android等。

但对于数据采集方而言,数据采集时可能需要大量的、定时或周期性地、分批次地从各个数据源进行数据采集,并由于业务扩展等各类原因,HTTP数据采集接口频繁涉及到新增、参数变更、返回结构体的变更,甚至包括采集规则、采集数据的处理(抽取、转换、清晰)逻辑等的变更。例如,对于数据中台而言,在数据采集时通常需要完成定级数据请求API、部署数据请求服务、接收数据请求API结果及处理、数据存储和管理数据,而通过各类HTTP请求框架,不足以完成上述的复杂逻辑。

发明内容

为解决上述技术问题,本发明提出了一种基于HTTP接口热部署的数据采集任务框架及使用方法,将HTTP数据请求API定义、HTTP数据请求API发起、HTTP数据请求API接收、数据简单处理、数据入库视为一个HTTP数据采集任务的生命周期HTTP。

本发明采用的技术方案为:一种基于HTTP接口热部署的数据采集任务框架,包括资源控制模块、任务配置解析模块、测试模块、任务调度器模块、数据请求与接收模块、数据处理模块、数据持久化模块、异常处理模块、算法库支撑模块、采集任务监听模块。

任务配置解析模块分别与测试模块、采集任务监听模块连接;测试模块分别与任务调度器模块、算法库支撑模块、采集任务监听模块连接;任务调度器模块分别与资源控制模块、数据请求与接收模块、采集任务监听模块连接;数据请求与接收模块分别与数据处理模块、采集任务监听模块连接;数据处理模块分别与数据持久化模块、算法库支撑模块、采集任务监听模块连接;数据持久化模块分别与资源控制模块、采集任务监听模块连接;采集任务监听模块与异常处理模块连接。

本发明还提供了一种基于HTTP接口热部署的数据采集任务框架使用方法,具体步骤如下:

S1、将采集任务配置Json以字符串的形式交给任务配置解析模块进行解析;

S2、任务配置解析模块对任务配置Json进行格式校验及解析,并创建数据采集任务实例并初始化其属性,将数据采集任务实例交给测试模块,并向采集任务监听模块上报当前解析完毕状态;

S3、测试模块读取数据采集任务实例的数据源IP、数据库连接进行可达性测试,记录测试结果,判断其测试状态;

S4、任务调度器模块读取步骤S3中通过测试状态的数据采集任务实例的Cron表达式属性,为其注册调度触发器,等待Cron表达式所代表的调度条件被触发时,向资源控制模块申请可执行线程资源,当数据采集任务实例获得线程资源,启动执行数据请求与接收模块,向采集任务监听模块上报当前等待调度执行状态;

S5、线程池将携带数据采集任务实例的数据请求与接收模块实例取出,开始执行数据请求与接收流程,启动数据处理模块,向采集任务监听模块上报当前数据请求与接收完毕状态;

S6、数据处理模块读取数据采集任务实例中的数据处理模板,向算法支撑模块获取可执行算法,装配处理程序,并逐条将数据交由处理程序,得到数据处理结果,并启动数据持久化模块,向采集任务监听模块上报当前数据处理完毕状态;

S7、数据持久化模块读取数据采集任务实例中的目标数据库连接及数据存储SQL模板,将处理完毕的数据注入到数据存储SQL模板中构造可执行SQL脚本,通过目标数据库连接执行SQL,将数据写入数据库,等待执行结果返回,向采集任务监听模块上报当前已入库状态,交还当前线程资源给资源控制模块,采集任务完成。

进一步地,所述步骤S1具体如下:

自定义资源控制模块的资源控制参数,包括各资源池的大小、数据采集任务配置存储文件目录,通过文件读取的方式进行资源控制模块的初始化及批量加载数据采集任务配置文件目录,遍历数据采集任务配置目录下的所有.Json数据采集任务配置文件,全部交给任务配置解析模块进行数据采集任务实例化。

进一步地,所述步骤S2中,所述任务配置解析模块工作流程具体如下:

任务配置解析模块解析并校验HTTP数据采集任务的配置Json文件,为数据采集任务创建实例及初始化,包括为其分配全局唯一的任务标识,并为该任务实例初始化请求数据源IP、请求URL参数迭代器、请求体迭代器、调度策略表达式、数据处理模板、目标数据库连接、存储SQL模板;在初始化完毕后,任务配置解析模块将数据采集任务实例交给测试模块进行测试,同时向采集任务监听模块报告其解析完成状态。

进一步地,所述步骤S3具体如下:

S31、读取数据采集任务实例中的数据源IP属性,构造10次PING报文,并记录丢包率为R

S32、预估采集任务实例的HTTP真实请求数量,共需要成功发起并接收的HTTP请求数L

L

记成功发起并接收L

L

其中,NB表示负二项分布;则成功发起并接收L

依据如下公式计算初始预估HTTP请求个数资源消耗量Cost

将Cost

进一步地,所述步骤S3中,所述测试模块工作流程具体如下:

测试模块接收请求任务实例,读取其数据源信息,并对该数据源IP、目的数据库进行可达性测试,记录测试结果,如果目标不可达则将解析失败状态上报采集任务监听模块,丢弃该数据采集任务实例;若满足可达性要求,则依据其URL迭代器大小、请求体参数大小、源IP测试过程中记录的丢包率、采集任务实例配置实例的HTTP最大客户端数量,估算其优先级数值,并将该数值赋值到数据采集任务实例的优先级属性中,而后将其交给任务调度器模块,同时向采集任务监听模块上报其测试通过状态。

进一步地,所述步骤S4中,所述任务调度器模块工作流程具体如下:

任务调度器模块读取数据采集任务实例中的Cron表达式属性,注册与Cron表达式条件对应的调度触发器,当Cron表达式满足系统时间、周期条件时,调度触发器将被触发,读取采集任务HTTP请求窗口(采集任务执行时的HTTP请求并发数量)大小,向资源控制模块申请对应数量的HTTP请求客户端,同时向资源控制模块的线程池中申请可执行线程,将带有优先级属性的数据采集任务实例放入线程池的优先级队列中等待获取线程资源开始执行,当数据采集任务实例获得线程资源,将采集任务实例及HTTP请求客户端集合交给数据请求与接收模块,向采集任务监听模块上报其排队等待调度执行状态。

进一步地,所述步骤S5中,所述数据请求与接收模块中,请求与接收流程具体如下:

数据请求与接收模块首先通过读取数据采集任务实例中的HTTP请求API配置,包括数据源IP、端口、URL参数迭代器及请求体参数迭代器,基于Apache HTTP Client框架,一次性依据迭代顺序构造所有需要发起的HTTP请求实例,开启请求窗口,从左向右的,依据滑动窗口策略,消费HTTP请求客户端池中的请求客户端,通过客户端异步发起HTTP请求实例,当请求客户端消耗殆尽且最左侧请求实例尚未得到结果时进入阻塞态,直至最左侧请求实例得到请求结果,释放请求客户端,窗口向右滑动;循环直至所有请求实例得到请求结果,首先将HTTP请求客户端全部归还资源控制模块,依据全部所有请求中的平均丢包率、请求客户端窗口大小重新计算数据采集任务优先级,将其赋值到数据采集任务实例优先级字段;其次将所有请求结果按顺序进行整合,将数据采集任务实例及整合数据交给数据处理模块,通过当前线程资源继续执行,同时向采集任务监听模块上报请求与接收完毕状态。

进一步地,所述步骤S6中,所述数据处理模块工作流程具体如下:

数据处理模块读取数据采集任务实例中的数据处理模板,装配单条数据的处理流程,当处理表达式涉及到算法库支撑模块进行查询,获取算法库支撑模块提供的可执行算法函数体,包括对单条数据中的字段抽取、字段运算、重命名,将处理后的数据按序整合,得到处理后数据,将其交给数据持久化模块,同时向采集任务监听模块上报数据采集任务处理完毕状态。

进一步地,本发明的方法还包括步骤S8,具体如下:

本发明方法中的所有子模块在遇到异常情况时向采集任务监听模块上报异常,由采集任务监听模块将具体异常信息交给异常处理模块,并终止采集任务实例的此次调度,异常处理模块向系统或日志文件中输出异常信息。

本发明的有益效果:本发明所述框架包括资源控制模块、任务配置解析模块、测试模块、任务调度器模块、数据请求与接收模块、数据处理模块、数据持久化模块、异常处理模块、算法库支撑模块、采集任务监听模块。本发明不仅能够简单、快速的配置一个新的、或修改一个旧的HTTP接口数据采集任务,同时能够迅速地以热部署的形式更新到运行环境中而无需对项目进行重新打包或运行,提高系统稳定性及扩展性,实现HTTP数据采集接口的热部署,从而实现更加灵活的数据采集任务调度。

附图说明

图1为本发明的一种基于HTTP接口热部署的数据采集任务框架结构图。

图2为本发明的一种基于HTTP接口热部署的数据采集任务框架使用方法的流程图。

具体实施方式

下面结合附图和实施例对本发明的方法做进一步的说明。

如图1所示,一种基于HTTP接口热部署的数据采集任务框架,包括资源控制模块、任务配置解析模块、测试模块、任务调度器模块、数据请求与接收模块、数据处理模块、数据持久化模块、异常处理模块、算法库支撑模块、采集任务监听模块。

任务配置解析模块分别与测试模块、采集任务监听模块连接;测试模块分别与任务调度器模块、算法库支撑模块、采集任务监听模块连接;任务调度器模块分别与资源控制模块、数据请求与接收模块、采集任务监听模块连接;数据请求与接收模块分别与数据处理模块、采集任务监听模块连接;数据处理模块分别与数据持久化模块、算法库支撑模块、采集任务监听模块连接;数据持久化模块分别与资源控制模块、采集任务监听模块连接;采集任务监听模块与异常处理模块连接。

如图2所示,在本实施例中,本发明还提供了一种基于HTTP接口热部署的数据采集任务框架使用方法,具体步骤如下:

S1、将采集任务配置Json以字符串的形式交给任务配置解析模块进行解析;

S2、任务配置解析模块对任务配置Json进行格式校验及解析,并创建数据采集任务实例并初始化其属性,将数据采集任务实例交给测试模块,并向采集任务监听模块上报当前解析完毕状态;

S3、测试模块读取数据采集任务实例的数据源IP、数据库连接进行可达性测试,记录测试结果,判断其测试状态;

S4、任务调度器模块读取步骤S3中通过测试状态的数据采集任务实例的Cron表达式属性,为其注册调度触发器,等待Cron表达式所代表的调度条件被触发时,向资源控制模块申请可执行线程资源,当数据采集任务实例获得线程资源,启动执行数据请求与接收模块,向采集任务监听模块上报当前等待调度执行状态;

S5、线程池将携带数据采集任务实例的数据请求与接收模块实例取出,开始执行数据请求与接收流程,启动数据处理模块,向采集任务监听模块上报当前数据请求与接收完毕状态;

S6、数据处理模块读取数据采集任务实例中的数据处理模板,向算法支撑模块获取可执行算法,装配处理程序,并逐条将数据交由处理程序,得到数据处理结果,并启动数据持久化模块,向采集任务监听模块上报当前数据处理完毕状态;

S7、数据持久化模块读取数据采集任务实例中的目标数据库连接及数据存储SQL模板,将处理完毕的数据注入到数据存储SQL模板中构造可执行SQL脚本,通过目标数据库连接执行SQL,将数据写入数据库,等待执行结果返回,向采集任务监听模块上报当前已入库状态,交还当前线程资源给资源控制模块,采集任务完成。

在本实施例中,所述步骤S1中,自定义资源控制模块的资源控制参数,包括各资源池的大小、数据采集任务配置存储文件目录,通过文件读取的方式进行资源控制模块的初始化及批量加载数据采集任务配置文件目录,遍历数据采集任务配置目录下的所有.Json数据采集任务配置文件,全部交给任务配置解析模块进行数据采集任务实例化,具体如下:

S11、读取资源控制配置文件中的资源控制参数配置,包括请求任务线程池的核心线程数REQ_TASK_CORE_THREAD_POOL_SIZE(设框架运行宿主机的CPU核心数为N,则缺省时核心线程数取N-1)、请求任务线程池的最大线程数REQ_TASK_MAX_THREAD_POOL_SIZE(取值不小于核心线程数,缺省取值为2N),创建采集任务可执行线程池;

S12、读取HTTP请求客户端池大小数HTTP_MAX_CLIENT_SIZE(缺省值取10*REQ_TASK_MAX_THREAD_POOL_SIZE),基于Apache开源框架HTTP Client创建大小为HTTP_MAX_CLIENT_SIZE的HTTP请求客户端池,最大采集任务数TASK_MAX_SIZE(缺省时取有符号4字节最大整型2147483647)、数据请求任务描述文件存放目录绝对路径REQ_TASK_DESC_DIR;读取REQ_TASK_DESC_DIR目录下的所有.Json文件,转化为Json对象数组,传递给任务配置解析模块。

在本实施例中,所述步骤S2中,任务配置解析模块解析并校验HTTP数据采集任务的配置Json文件,为数据采集任务创建实例及初始化,包括为其分配全局唯一的任务标识,并为该任务实例初始化请求数据源IP、请求URL参数迭代器、请求体迭代器、调度策略表达式、数据处理模板、目标数据库连接、存储SQL模板;在初始化完毕后,任务配置解析模块将数据采集任务实例交给测试模块进行测试,同时向采集任务监听模块报告其解析完成状态,所述任务配置解析模块工作流程具体如下:

S21、解析调度任务配置,包括任务名、调度策略表达式、最大HTTP请求客户端数量,赋值给采集任务实例属性;其中,调度策略Cron表达式TASK_SCHE_CRON,值为字符串类型,其格式为:

“seconds minutes hours dayofmonth month dayofweek[year]”,遵循Linuxcron表达式规范,用以表达请求任务的周期调度策略。

S22、解析HTTP请求API配置,包括数据源IP、端口、URL参数迭代配置、请求体迭代配置,创建URL参数迭代器实例、请求体迭代器实例,赋值给数据采集任务实例属性;

S23、解析数据处理配置,包括具体待处理的字段、处理的中缀表达式,构造数据处理模板,赋值给数据采集任务实例属性;

S24、解析数据存储配置,包括目标数据库IP、端口、数据库类型、数据库名,构造数据库连接实例,解析表名、存储方式,构造数据SQLDML脚本模板,赋值给数据采集任务实例属性。

在本实施例中,所述步骤S3具体如下:

S31、读取数据采集任务实例中的数据源IP属性,构造10次PING报文,并记录丢包率为R

S32、预估采集任务实例的HTTP真实请求数量,共需要成功发起并接收的HTTP请求数L

L

记成功发起并接收L

L

其中,NB表示负二项分布;则成功发起并接收L

依据如下公式计算初始预估HTTP请求个数资源消耗量Cost

将Cost

在本实施例中,所述步骤S3中,所述测试模块工作流程具体如下:

测试模块接收请求任务实例,读取其数据源信息,并对该数据源IP、目的数据库进行可达性测试,记录测试结果,如果目标不可达则将解析失败状态上报采集任务监听模块,丢弃该数据采集任务实例;若满足可达性要求,则依据其URL迭代器大小、请求体参数大小、源IP测试过程中记录的丢包率、采集任务实例配置实例的HTTP最大客户端数量,估算其优先级数值,并将该数值赋值到数据采集任务实例的优先级属性中,而后将其交给任务调度器模块,同时向采集任务监听模块上报其测试通过状态。

在本实施例中,所述步骤S4中,所述任务调度器模块工作流程具体如下:

任务调度器模块读取数据采集任务实例中的Cron表达式属性,注册与Cron表达式条件对应的调度触发器,当Cron表达式满足系统时间、周期条件时,调度触发器将被触发,读取采集任务HTTP请求窗口(采集任务执行时的HTTP请求并发数量)大小,向资源控制模块申请对应数量的HTTP请求客户端,同时向资源控制模块的线程池中申请可执行线程,将带有优先级属性的数据采集任务实例放入线程池的优先级队列中等待获取线程资源开始执行,当数据采集任务实例获得线程资源,将采集任务实例及HTTP请求客户端集合交给数据请求与接收模块,向采集任务监听模块上报其排队等待调度执行状态。

在本实施例中,所述步骤S5中,所述数据请求与接收模块中,请求与接收流程具体如下:

数据请求与接收模块首先通过读取数据采集任务实例中的HTTP请求API配置,包括数据源IP、端口、URL参数迭代器及请求体参数迭代器,基于Apache HTTP Client框架,一次性依据迭代顺序构造所有需要发起的HTTP请求实例,开启请求窗口,从左向右的,依据滑动窗口策略,消费HTTP请求客户端池中的请求客户端,通过客户端异步发起HTTP请求实例,当请求客户端消耗殆尽且最左侧请求实例尚未得到结果时进入阻塞态,直至最左侧请求实例得到请求结果,释放请求客户端,窗口向右滑动;循环直至所有请求实例得到请求结果,首先将HTTP请求客户端全部归还资源控制模块,依据全部所有请求中的平均丢包率、请求客户端窗口大小重新计算数据采集任务优先级,将其赋值到数据采集任务实例优先级字段;其次将所有请求结果按顺序进行整合,将数据采集任务实例及整合数据交给数据处理模块,通过当前线程资源继续执行,同时向采集任务监听模块上报请求与接收完毕状态。

在本实施例中,所述步骤S5具体如下:

S51、读取数据采集任务实例的数据源IP、端口、URL参数迭代器、请求体迭代器,循环将URL参数迭代器的结果及请求体迭代器迭代的结果放入到HTTP请求实例中,构造一系列HTTP请求实例,编号为0~(L

S52、读取数据采集任务实例的最大HTTP请求客户端数量,作为窗口大小,记为MAX_CLIENT。初始化HTTP请求客户端可用池、在用池,初始时大小均为0;

S53、循环判断满足RIGHT-LEFT

S54、当RIGHT-LEFT=MAX_CLIENT时,开始判断LEFT编号所指向的HTTP请求实例是否接收到请求结果,如果接收到请求结果则左指针LEFT+1;否则进入阻塞状态,直至LEFT编号所指向的HTTP请求实例已接收到请求结果。

在本实施例中,所述步骤S6中,所述数据处理模块工作流程具体如下:

数据处理模块读取数据采集任务实例中的数据处理模板,装配单条数据的处理流程,当处理表达式涉及到算法库支撑模块进行查询,获取算法库支撑模块提供的可执行算法函数体,包括对单条数据中的字段抽取、字段运算、重命名,将处理后的数据按序整合,得到处理后数据,将其交给数据持久化模块,同时向采集任务监听模块上报数据采集任务处理完毕状态。

在本实施例中,所述步骤S6具体如下:

S61、解析数据采集任务实例中的数据处理模板字符串,将中缀表达式中的操作数(包括字段名、常量值)、运算符(基础运算符、算法名)进行剥离,分别入栈;

S62、依次将运算符及其对应的操作数出栈,判断流程如下:

S621、若运算符为基础运算符,则直接对操作数进行对应的基础运算,并将运算结果作为下一个运算符的操作数重新入栈;

S631、若运算符为算法名,则向算法库支撑模块申请算法名所对应的算法函数字节码(可执行方法实例),将操作数作为函数入参,调用算法函数,并将调用结果作为下一个运算符的操作数重新入栈;

S632、循环步骤S62中的操作,直至运算符消耗完毕,则最终的操作数即为运算结果,赋值给对应的字段。

在本实施例中,本发明的方法还包括步骤S8,具体如下:

本发明方法中的所有子模块在遇到异常情况时向采集任务监听模块上报异常,由采集任务监听模块将具体异常信息交给异常处理模块,并终止采集任务实例的此次调度,异常处理模块向系统或日志文件中输出异常信息。

在本实施例中,所述资源控制模块,用于对资源的集中管理,包括线程池资源、HTTP请求资源等。

所述算法库支撑模块用于对已经过编译完成并可执行的算法程序进行定义及管理,并向数据处理模块开放,以提供数据处理过程中的算法支撑,算法库支撑模块独立运行,以算法名作为唯一标识,向测试模块及数据处理模块提供可使用的算法列表及能够真正执行算法所对应的函数体。

所述采集任务监听模块用于监听数据采集任务的实时状态情况,同时,接收来自外部的新增、修改、删除数据采集任务的请求,与任务配置解析模块、任务调度器模块共同合作,以实现对数据采集任务变更的热部署,采集任务监听模块独立运行,作为一个消息中心接收来自各个模块的消息上报,并在需要的时候向外提供给框架使用方或以日志的形式进行记录,对于异常类的信息还会将具体内容交给异常处理模块处理。

所述异常处理模块用于接收数据采集任务异常时的状态、错误信息,并将异常情况进行解析输出,异常处理模块独立运行,当采集任务监听模块接收到异常信息时,将具体异常状态、异常信息、异常采集任务实例交给异常处理模块,该模块在需要的时候向外提供给框架使用方上报异常。

综上,本发明提供了一种基于HTTP接口热部署的数据采集任务框架及使用方法,该框架从两个层面较好地解决了上述数据采集场景中存在的问题,一方面采取基于HTTP接口请求任务描述文件机制,基于定义好的文件格式(请求URL、请求参数、数据接收、数据简单处理、数据入库等及数据采集任务策略配置)及运行时的HTTP接口请求任务解析器进行解析从而动态、灵活的创建HTTP请求任务实例,并在请求任务描述文件变更时及时对请求任务实例进行更新,实现HTTP数据采集接口的热部署,无需对项目源码进行重新打包编译运行,提高系统稳定性及扩展性。

另一方面提供了一种基于HTTP接口热部署的数据采集任务框架使用方法,利用基于优先级的HTTP请求任务实例的动态调度策略及资源池的HTTP请求任务工厂,对各数据采集任务实例进行管理调度、资源分配,并依据用户设定、实例请求反馈情况、带宽、吞吐量等因素,动态更新任务实例的优先级,从而实现更加灵活的数据采集任务调度。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

相关技术
  • 一种基于YAML的HTTP接口测试行为描述方法
  • 一种基于MD5加密的HTTP/HTTPS接口安全校验方法
  • 一种基于HTTP协议的新闻APP数据采集方法及系统
技术分类

06120116339228