基于队列服务的php多进程数据处理系统及其处理方法
技术领域
1.本发明涉及爬虫领域,营销领域等,具体涉及基于队列服务的php多进程数据处理系统及其处理方法。
背景技术:2.越来越多的企业开始建立自己的数据平台,无论是基于营销领域的媒体源各个层级数据,还是大数据公司基于各项爬虫业务的基础数据。
3.php(php:hypertext preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于web开发并可嵌入html中。php语法学习了c语言,吸纳java和perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。php同时支持面向对象和面向过程的开发,使用上非常灵活。
4.api(application programming interface,应用程序接口)是一些预先定义的接口(如函数、http接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
5.以营销领域为例。媒体源包括国内:百度,腾讯,新浪,抖音,快手等。国外:google,facebook,tiktok等。采集的数据类型包括媒体广告层级信息:账户,广告计划,广告组,广告,创意。媒体广告层级报表:天级报表,小时级报表。
6.这些都是围绕着单媒体源的相关数据,企业基于这些数据通过媒体提供的api的方式同步到自有数据平台中。在自有数据平台内基于这些基础数据,可以自由实现比媒体平台更精细和更定制化的功能查询以及基于基础数据结合自由大数据可以整合其他有价值的信息。
7.现有数据同步机制一般实现方式:单进程程序,通过依次轮询方式执行程序。以上数据同步机制存在明显的缺陷:单进程不便于大数据量的更新。随着业务的发展。导致数据更新时间过长。消费任务方法以及数据更新处在相同任务脚本中,处理时长过度依赖数据源源响应速度。总结来说,存在数据更新周期过长,更新周期不可控。项目架构扩展不友好等问题。
技术实现要素:8.针对现有技术存在的问题,本发明提供基于队列服务的php多进程数据处理系统及其处理方法,解决上述至少一个问题。
9.本发明的技术方案是:基于队列服务的php多进程数据处理系统,包括生成任务模块,消费任务模块和统计任务模块;
10.所述生成任务模块用于根据周期更新配置到基础数据库中读取待更新数据,将待更新数据根据隶属关系进行分层拆分,一个层级数据生成一个任务生产脚本,多个层级数
据则一一对应生成多个任务生产脚本,采用单进程方式,逐个保存到消息队列中;
11.所述消费任务模块采用多进程方式,利用消费服务器集群一一对应读取多个由生成任务模块保存到消息队列中的任务生产脚本,将多个任务生产脚本同时处理更新,即多个消费任务同时进行,每个消费任务可以通过服务器进程判断方式调用php程序进行数据更新;当一个消费服务器中的消费任务处理完成后,将当前消费任务对应的任务生产脚本从消息队列中删除,然后利用消费服务器读取消息队列中的下一个任务生产脚本进行下一个任务生产脚本的处理,直到消息队列中的任务生产脚本被全部处理完成,当前消费任务停止执行;
12.所述统计任务模块用于检测消费任务模块中的消费任务的执行状态。
13.进一步的,所述统计任务模块中检测消费任务模块中的消费任务的执行状态包括统计消费任务的执行次数以及任务执行过程中的错误次数。
14.进一步的,所述统计任务模块中能够根据用户设定的错误次数阈值,主动推送异常信息以及状态信息发送邮件给用户。做到程序执行状态的及时感知。
15.进一步的,所述生成任务模块中,多个任务生产脚本依据入队列时间逐个保存到消息队列中。
16.进一步的,所述消费任务模块中,单台服务器对应的消费服务器集群的部署瓶颈在于服务器配置。
17.进一步的,所述消费任务模块中,若任务更新失败,则将该任务生产脚本重回消息队列中。
18.本发明还提供基于队列服务的php多进程数据处理方法,具体步骤如下:将任务生成和消费任务更新处理进行拆分,互不影响;
19.所述任务生成具体如下:根据周期更新配置到基础数据库中读取待更新数据,将待更新数据根据隶属关系进行分层拆分,一个层级数据生成一个任务生产脚本,多个层级数据则一一对应生成多个任务生产脚本,采用单进程方式,逐个保存到消息队列中;
20.所述消费任务更新处理具体如下:采用多进程方式,利用消费服务器集群一一对应读取多个由生成任务模块保存到消息队列中的任务生产脚本,将多个任务生产脚本同时处理更新,即多个消费任务同时进行,每个消费任务可以通过服务器进程判断方式调用php程序进行数据更新;当一个消费服务器中的消费任务处理完成后,将当前消费任务对应的任务生产脚本从消息队列中删除,然后利用消费服务器读取消息队列中的下一个任务生产脚本进行下一个任务生产脚本的处理,直到消息队列中的任务生产脚本被全部处理完成,当前消费任务停止执行。
21.进一步的,所述消费任务更新处理过程中,采用统计任务模块实时检测消费任务模块中的消费任务的执行状态,所述统计任务模块中检测消费任务模块中的消费任务的执行状态包括统计消费任务的执行次数以及任务执行过程中的错误次数。
22.进一步的,所述统计任务模块中还能够根据用户设定的错误次数阈值,主动推送异常信息以及状态信息发送邮件给用户。做到程序执行状态的及时感知。
23.进一步的,所述消费任务更新处理中,若任务更新失败,则将该任务生产脚本重回消息队列中。
24.本发明的有益效果是:将生成任务和消费任务进行拆分,互不影响。另外生产和消
费任务单独设计有利于随着业务数据量的积累或者业务场景需要,将消费任务程序脚本服务器进行扩充。在扩充环节无须修改业务代码,减少扩充服务器的维护成本。
25.将存储于数据库中的存在隶属关系的数据进行拆分分层执行,减少彼此依赖关系增加数据处理效率。
26.在消费任务方法中,增加缓存中间层(redis或者memcache服务)机制,在做数据更新时,通过和缓存中间层的数据进行对比,避免频繁的数据库读取操作,减少数据库压力。
27.总体而言,采用php语言实现,且不依赖php三方框架,以及其他技术语言和体系。生产和消费分离,采用多进程方式。消费服务理论上可以无限制的扩充以提高处理能力。各个模块解耦,很好的做到了异常隔离,方便定位问题。
附图说明
28.图1为基于队列服务的php多进程数据处理方法的流程图。
具体实施方式
29.下面结合附图对本发明做进一步的说明。
30.如图1所示,基于队列服务的php多进程数据处理系统,包括生成任务模块,消费任务模块和统计任务模块;
31.所述生成任务模块用于根据周期更新配置到基础数据库中读取待更新数据,将待更新数据根据隶属关系进行分层拆分,一个层级数据生成一个任务生产脚本,多个层级数据则一一对应生成多个任务生产脚本,采用单进程方式,多个任务生产脚本依据入队列时间逐个保存到消息队列中;
32.所述消费任务模块采用多进程方式,利用消费服务器集群一一对应读取多个由生成任务模块保存到消息队列中的任务生产脚本,将多个任务生产脚本同时处理更新,即多个消费任务同时进行,每个消费任务可以通过服务器进程判断方式调用php程序进行数据更新;当一个消费服务器中的消费任务处理完成后,将当前消费任务对应的任务生产脚本从消息队列中删除,然后利用消费服务器读取消息队列中的下一个任务生产脚本进行下一个任务生产脚本的处理,直到消息队列中的任务生产脚本被全部处理完成,当前消费任务停止执行;其中,单台服务器对应的消费服务器集群的部署瓶颈在于服务器配置。且消费任务模块中若任务更新失败,则将该任务生产脚本重回消息队列中。
33.内存以及最大请求时间限定代码举例:
[0034][0035][0036]
多进程入口代码举例:
[0037][0038]
所述统计任务模块用于检测消费任务模块中的消费任务的执行状态,包括统计消
费任务的执行次数以及任务执行过程中的错误次数。所述统计任务模块中能够根据用户设定的错误次数阈值,主动推送异常信息以及状态信息发送邮件给用户。做到程序执行状态的及时感知。
[0039]
该基于队列服务的php多进程数据处理系统的处理方法,主要将任务生成和消费任务更新处理进行拆分,互不影响;另外生产和消费任务单独设计有利于随着业务数据量的积累或者业务场景需要,将消费任务程序脚本服务器进行扩充。在扩充环节无须修改业务代码,减少扩充服务器的维护成本。
[0040]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。