G06F9/50 G06F9/54 G06F16/951
1.一种分布式网络数据采集系统的采集任务的分配方法,其特征在于,包括以下步骤:
部署主节点、工作节点和中间节点,中间节点中包含消息队列、数据库;
主节点根据数据库中的定时任务定时生成采集任务,并发布到消息队列的任务队列中;
工作节点定时从任务队列读取采集任务并根据本地服务器的状态决定是否申请执行该采集任务;
主节点从申请执行同一采集任务的工作节点中选取一个最佳的工作节点执行该采集任务,并将该采集任务从任务队列中移除。
2.如权利要求1所述的方法,其特征在于,所述的主节点根据数据库中的定时任务定时生成采集任务,并发布到消息队列的任务队列中,包括:
定时任务由系统操作人员设定,由任务所调用的爬虫的唯一识别符和与定时任务相关的通用crontab配置组成,所有的定时任务信息都保存在数据库中;
主节点从数据库读取定时任务信息,并通过解析crontab配置生成下次执行任务的时间;
当一个定时任务到达执行时间时,主节点生成新的采集任务,并发布到消息队列的任务队列中。
3.如权利要求2所述的方法,其特征在于,所述采集任务包括执行任务所需的爬虫的唯一识别符、执行任务所需的条件以及目标站点的测试链接;其中:
执行任务所需的条件包括采集任务的平均内存占用、最大内存占用、平均带宽占用、最大带宽占用、平均CPU使用指数以及最大CPU使用指数;
CPU使用指数=CPU频率*CPU核心数*CPU占用率。
4.如权利要求3所述的方法,其特征在于,所述的执行任务所需的条件是动态变化的,包括:
任务第一次生成时其各项需求被置为0或一个很小的值,此时主节点确定执行节点时仅需比较各节点访问目标站点的时延和速率;
任务第一次执行完成后,其各项需求被设置为当次采集过程中占用资源的平均值或最大值;
之后每次执行完成后,均以按次数加权平均的方式更新各项需求。
5.如权利要求1所述的方法,其特征在于,所述工作节点定时从任务队列读取采集任务并根据本地服务器的状态决定是否申请执行该采集任务,包括:
工作节点从任务队列头开始读取,直到到符合条件的任务并向主节点申请执行;
每个工作节点同时只能申请一个任务,申请成功或者失败后才能继续申请其他任务;
工作节点获取本地服务器状态,并根据其与采集任务的需求的关系判断节点是否申请任务;
工作节点申请任务时提供系统资源的剩余情况以及访问目标站点的时延和速率。
6.如权利要求5所述的方法,其特征在于,所述的工作节点获取本地服务器状态,并根据其与采集任务的需求的关系判断节点是否申请任务,包括:
a)工作节点尝试访问测试链接,若访问时延<最大时延临界值,且访问速度>最小速度临界值,则继续步骤b),否则放弃申请该任务;
b)工作节点获取本地系统的资源剩余情况,分别将系统剩余的每项资源与任务信息中的对应资源需求相比较,若剩余>所需,或二者的差值在一定范围内,则向主节点申请任务,否则放弃申请该任务。
7.如权利要求1所述的方法,其特征在于,所述的主节点从申请执行同一采集任务的工作节点中选取一个最佳的工作节点执行该采集任务,并将该采集任务从任务队列中移除,包括:
对于同一任务若短时间内仅有一个工作节点申请,直接将该任务交于该节点执行;
若有多个工作节点同时申请,则首先对比它们访问目标站点的时延和速率,若有某个或某几个工作节点明显优于其他节点,则淘汰其余节点,然后在剩余节点中对比各自剩余的资源量;
对于每个剩余节点,将各项剩余资源通过加权求和得到一个剩余资源指数,最后选取剩余资源指数最高的节点执行该任务;
若一段时间内没有任何节点申请执行该任务,则按照一定规则降低各项需求,然后将该任务移至任务队列队尾;
若各项需求降低到一定程度后仍没有节点申请任务,则将该任务移出任务队列并报告给管理员。
8.一种可扩展的分布式数据采集方法,其特征在于,包括以下步骤:
工作节点接收主节点采用权利要求1~7中任一权利要求所述的方法分配的采集任务;
工作节点根据采集任务生成采集进程;
工作节点执行采集进程,采集进程将采集到的数据置入中间节点的消息队列中的数据队列;
工作节点实时监控采集进程的运行状态,记录采集进程的相关数据。
9.如权利要求8所述的方法,其特征在于,工作节点采用以下的爬虫执行方式执行采集任务:
每个爬虫由爬虫执行器和爬虫配置组成;
爬虫执行器是一个继承自系统中爬虫执行器基类的类,由开发者根据一定规则编写;
不同的爬虫能够使用相同的爬虫执行器;
爬虫配置是控制爬虫执行器如何工作的一组键值对,执行爬虫时作为参数传入爬虫执行器内。
10.如权利要求9所述的方法,其特征在于,所述爬虫执行器满足以下条件:
每个爬虫执行器都是继承自系统中爬虫执行器基类的类,都必须实现基类中实现具体功能的关键方法;
爬虫执行器由开发人员根据一定规则创建,旨在减少重复工作,提高爬虫开发效率;
爬虫执行器的入口参数由开发人员指定,这些参数需能够设置爬虫执行器的整个执行流程,即根据这些参数爬虫执行器能够完成对目标站点的爬取;
所述的爬虫配置与所述的参数需一一对应。
11.如权利要求10所述的方法,其特征在于,所述的爬虫执行器由开发人员根据一定规则创建,包括根据采集任务的流程创建、根据采集的数据格式创建、根据所采用的爬虫框架创建。
12.一种可扩展的分布式数据采集系统,其特征在于,包括一个web服务器、一个主节点、多个工作节点、一个数据库集、一个消息队列集:
web服务器对外提供系统的控制接口和提供给工作节点同步数据的接口;
消息队列集和数据库集作为主节点、工作节点间的通信桥梁,部署到主节点与工作节点均能访问到的网络中;
主节点和工作节点部署到任何能访问到消息队列集和数据库集的网络中;
工作节点分散部署,以适应多样的采集需求;
主节点和工作节点采用权利要求1~7中任一权利要求所述的方法进行采集任务的分配;
工作节点采用权利要求8~11中任一权利要求所述的方法执行采集任务;
数据库集用于存储系统正常运行所需的所有持久化数据以及采集进程所采集的所有数据;
消息队列集用于主节点与工作节点间的通信交流,包括充当任务队列和数据队列。
13.如权利要求12所述的系统,其特征在于,所述主节点包括任务调度器、系统状态监控器、数据处理器;
所述任务调度器生成采集任务并推送到任务队列中,之后接收工作节点的任务执行申请并决定执行采集任务的工作节点;
所述系统状态监控器通过系统API获取主节点的状态,通过数据库获取工作节点的状态,当某个节点的状态异常时,通知系统管理员;
所述数据处理器通过消息队列接收工作节点采集的数据,统一处理后储存至数据库。
14.如权利要求13所述的系统,其特征在于,所述工作节点包括任务接收器、任务评估器、任务执行器、节点监控器、进程控制器;
所述任务接收器从任务队列读取任务信息,调用所述任务评估器判断工作节点是否满足执行任务的条件,若满足则向主节点申请执行该任务,否则放弃执行该任务;
所述任务执行器从任务接收器获取任务信息,并执行任务;
所述节点监控器实时监控并记录工作节点的运行状态,并定时保存至数据库以供主节点使用;
所述进程控制器实时监控采集进程的状态,并记录其运行过程中资源占用情况。
本发明涉及计算机领域,特别涉及一种可扩展的分布式数据采集方法和系统,本发明提到的数据采集特指互联网上公开的数据采集。
网络数据采集是指从互联网获取公开的数据资源,然后按照需求保存到特定位置的过程。网络数据采集通常使用网络爬虫实现,网络爬虫是一种按照一定的规则自动爬取互联网网页数据的计算机程序。一个爬虫可以从互联网的某个网站下载网页,然后对网页进行解析和过滤,并根据需求从中提取数据。随着人工智能、大数据技术的发展,网络数据的需求量极速增长,一个研究工作需要千万级的数据量,变的十分平常。这些数据的采集往往涉及到众多站点,站点的数据格式也千差万别,因此开发者往往为每个站点独立开发一个爬虫,数据采集系统的作用就是用于管理众多的网络爬虫。
从对爬虫的管理方式来看,现有的数据采集系统可以分为基于配置的和基于代码的两类。基于配置的数据采集系统将爬虫抽象为了一组配置信息,例如针对html可以配置要获取内容的selector或xpath。基于代码的数据采集系统,有些为使用者提供一个爬虫的开发框架,使用这个框架开发的爬虫,可以很好的接入系统;还有些系统不依赖于爬虫框架,直接运行爬虫脚本。但是这两类数据采集系统都有着显著的优缺点:基于配置的数据采集系统对于简单的采集任务(例如使用feed格式的数据源),只需要简单的配置就能实现功能,可以大大的节约开发时间,但对于复杂的采集任务(如需要登录认证的站点)往往很难完成;而对于基于代码的系统基本适用于各种采集任务,但针对相似的站点编写爬虫往往会有很多重复的工作,大大降低了开发效率。
从系统的部署方式来看,现有的数据采集系统分为单机部署和分布式部署两类,由于单个计算机的硬件资源和网络带宽往往是有限的,所以分布式部署更适合数据量需求庞大的用户。然而对于分布式部署的系统任务分配是个很大问题,现有系统大都利用负载均衡的方式进行任务分配,很少关注节点的自身性能条件和网络条件,这导致了采集效率的降低和资源的浪费。
如上所述,现有系统普遍存在着易用性、通用性以及可管理性上的问题,在分布式部署中经常出现任务分配不合理的情况,这使得系统在实际使用中经常出现各种各样的问题。
本发明提出了一种高可扩展的分布式数据采集框架和方法,解决了现有数据采集系统易用性、通用性以及可管理性之间的矛盾以及分布式部署中任务分配不合理的难题。
本发明采用的技术方案如下:
第一方面,本发明提供一种分布式网络数据采集系统的采集任务的分配方法,包括以下步骤:
1)部署主节点、工作节点和中间节点,其中主节点部署在网络环境良好的服务器上,工作节点根据实际情况部署在不同的网络环境中,中间节点部署在主节点、工作节点能够访问的网络环境中,中间节点中包含消息队列、数据库;
2)主节点根据数据库中的定时任务定时生成采集任务,并发布到消息队列的任务队列中;
3)工作节点定时从任务队列读取采集任务并根据本地服务器的状态决定是否申请执行该采集任务;
4)主节点从申请执行同一采集任务的工作节点中选取一个最佳的工作节点执行该采集任务,并将该采集任务从任务队列中移除。
进一步地,步骤2)包括:
2.1)定时任务由系统操作人员设定,由任务所调用的爬虫的唯一识别符和与定时任务相关的通用crontab配置组成,所有的定时任务信息都保存在数据库中;
2.2)主节点从数据库读取定时任务信息,并通过解析crontab配置生成下次执行任务的时间;
2.3)当一个定时任务到达执行时间时,主节点生成新的采集任务,并发布到消息队列的任务队列中。
进一步地,所述采集任务包括执行任务所需的爬虫的唯一识别符、执行任务所需的条件以及目标站点的测试链接;其中:
执行任务所需的条件包括采集任务的平均内存占用、最大内存占用、平均带宽占用、最大带宽占用、平均CPU使用指数以及最大CPU使用指数;
CPU使用指数=CPU频率*CPU核心数*CPU占用率。
进一步地,所述的执行任务所需的条件是动态变化的,包括:
a)任务第一次生成时其各项需求被置为0或一个很小的值,此时主节点确定执行节点时仅需比较各节点访问目标站点的时延和速率;
b)任务第一次执行完成后,其各项需求被设置为当次采集过程中占用资源的平均值或最大值;
c)之后每次执行完成后,均以按次数加权平均的方式更新各项需求。
进一步地,步骤3)包括:
3.1)工作节点从任务队列头开始读取,直到到符合条件的任务并向主节点申请执行;
3.2)每个工作节点同时只能申请一个任务,申请成功或者失败后才能继续申请其他任务;
3.3)工作节点获取本地服务器状态,并根据其与采集任务的需求的关系判断节点是否申请任务;
3.4)工作节点申请任务时提供系统资源的剩余情况以及访问目标站点的时延和速率。
进一步地,步骤3.3)包括:
3.3.1)工作节点尝试访问测试链接,若访问时延<最大时延临界值,且访问速度>最小速度临界值,则继续步骤3.3.2),否则放弃申请该任务;
3.3.2)工作节点获取本地系统的资源剩余情况,分别将系统剩余的每项资源(CPU、内存、带宽等)与任务信息中的对应资源需求相比较,若剩余>所需,或二者的差值在一定范围内,则向主节点申请任务,否则放弃申请该任务。
进一步地,步骤4)包括:
4.1)对于同一任务若短时间内仅有一个工作节点申请,直接将该任务交于该节点执行;
4.2)若有多个工作节点同时申请,则首先对比它们访问目标站点的时延和速率,若有某个或某几个工作节点明显优于其他节点(如时延低了500ms以上,速率是其他节点的数十倍),则淘汰其余节点,然后在剩余节点中对比各自剩余的资源量;
4.3)对于每个剩余节点,将各项剩余资源通过加权求和得到一个剩余资源指数,最后选取剩余资源指数最高的节点执行该任务;
4.4)若一段时间内没有任何节点申请执行该任务,则按照一定规则降低各项需求(如乘以90%),然后将该任务移至任务队列队尾;
4.5)若各项需求降低到一定程度(如原来的50%)后仍没有节点申请任务,则将该任务移出任务队列并报告给管理员。
第二方面,本发明提供一种可扩展的分布式数据采集方法,包括以下步骤:
工作节点接收主节点采用上面所述的一种分布式网络数据采集系统的采集任务的分配方法分配的采集任务;
工作节点根据采集任务生成采集进程;
工作节点执行采集进程,采集进程将采集到的数据置入中间节点的消息队列中的数据队列;
工作节点实时监控采集进程的运行状态,记录采集进程的相关数据。
进一步地,工作节点采用以下的爬虫执行方式执行采集任务:
1)每个爬虫由爬虫执行器和爬虫配置组成;
2)爬虫执行器是一个继承自系统中爬虫执行器基类的类,由开发者根据一定规则编写;
3)不同的爬虫能够使用相同的爬虫执行器;
4)爬虫配置是控制爬虫执行器如何工作的一组键值对,执行爬虫时作为参数传入爬虫执行器内。
进一步地,所述爬虫执行器满足以下条件:
a)每个爬虫执行器都是继承自系统中爬虫执行器基类的类,都必须实现基类中实现具体功能的关键方法;
b)爬虫执行器由开发人员根据一定规则创建,旨在减少重复工作,提高爬虫开发效率;
c)爬虫执行器的入口参数由开发人员指定,这些参数需能够设置爬虫执行器的整个执行流程,即根据这些参数爬虫执行器能够完成对目标站点的爬取;
d)所述的爬虫配置与所述的参数需一一对应。
进一步地,步骤b)所述的爬虫执行器由开发人员根据一定规则创建,包括:
b.1)根据采集任务的流程创建,比如可以针对翻页列表形式的站点创建一个爬虫执行器,此时传入执行器的爬虫配置需包括主页面url、获取下一页url的XPath、需要提取的字段以及各自所对应的XPath;
b.2)根据采集的数据格式(xml、json、csv等)创建,比如对于针对csv格式的爬虫执行器,传入的爬虫配置需包括资源url、所需的所有字段以及各自对应的csv列;
b.3)根据所采用的爬虫框架创建,例如针对scrapy框架可以创建一个爬虫执行器,其中爬虫执行器实现爬虫的通用部分(如middleware、pipeline等),实现采集逻辑的Spider代码则以爬虫配置的形式传入爬虫执行器。
第三方面,本发明提供一种可扩展的分布式数据采集系统,其包括一个web服务器、一个主节点、多个工作节点、一个数据库集、一个消息队列集:
Web服务器对外提供系统的控制接口和提供给工作节点同步数据的接口;
消息队列集和数据库集作为主节点、工作节点间的通信桥梁,部署到主节点与工作节点均能访问到的网络中;
主节点和工作节点部署到任何能访问到消息队列集和数据库集的网络中;
工作节点分散部署(比如可以分散到不同国家的服务器上),以适应多样的采集需求;
主节点和工作节点采用上面所述的一种分布式网络数据采集系统的采集任务的分配方法进行采集任务的分配;
工作节点采用上面所述的一种可扩展的分布式数据采集方法执行采集任务;
数据库集用于存储系统正常运行所需的所有持久化数据(包括爬虫执行器信息、爬虫信息、采集任务信息、采集进程信息等)以及采集进程所采集的所有数据;
消息队列集用于主节点与工作节点间的通信交流,如充当任务队列和数据队列。
进一步地,所述主节点包括任务调度器、系统状态监控器、数据处理器;
所述任务调度器生成采集任务并推送到任务队列中,之后接收工作节点的任务执行申请并决定执行采集任务的工作节点;
所述系统状态监控器通过系统API获取主节点的状态,通过数据库获取工作节点的状态,当某个节点的状态异常时,通知系统管理员;
所述数据处理器通过消息队列接收工作节点采集的数据,统一处理后储存至数据库。
进一步地,所述工作节点包括任务接收器、任务评估器、任务执行器、节点监控器、进程控制器;
所述任务接收器从任务队列读取任务信息,调用所述任务评估器判断工作节点是否满足执行任务的条件,若满足则向主节点申请执行该任务,否则放弃执行该任务;
所述任务执行器从任务接收器获取任务信息,并执行任务;
所述节点监控器实时监控并记录工作节点的运行状态,并定时保存至数据库以供主节点使用;
所述进程控制器实时监控采集进程的状态,并记录其运行过程中资源占用情况。
本发明提出的一种采集系统分布式部署的解决方案优化了采集任务分配的流程,大大提高了采集的效率,在节点众多的情况下仍能保证任务分配的合理性,减少了硬件资源的浪费;本发明提出的爬虫执行器机制兼顾了系统的易用性、通用性以及可管理性,使得系统在支持广泛类型的爬取任务的同时仍能保证爬虫开发的效率,此外它还给系统带来了很高的灵活性,开发者在开发爬虫过程中总结出来的爬取套路都能通过编写爬虫执行器实现代码的复用。
图1为本发明实施例1提供的一种可扩展的分布式数据采集方法的流程图;
图2为本发明实施例2提供的一种可扩展的分布式数据采集系统的结构图;
图3为本发明实施例2提供的一种可扩展的分布式数据采集系统的部署架构图。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步说明。
对于分布式部署中任务分配不合理的问题,本发明提出一种解决方案,步骤如下:
S1:系统由一个主节点,若干工作节点以及一个为两类节点提供通信服务的中间节点组成,各个节点按需部署各个服务器上,可以分为以下几个步骤:
S101:将中间节点部署到其他节点都能访问到的环境;中间节点包含消息队列、数据库等程序,其中消息队列包括任务队列和数据队列;
S102:将主节点部署到稳定的环境中,可以是内部网络;
S103:按照需求将工作节点部署到不同的网络环境中,可以部署在不同国家的服务器上。
S2:主节点启动后从中间节点的数据库中读取定时任务列表,根据任务信息定时生成采集任务,并置入中间节点的消息队列中的任务队列。
S3:工作节点启动后定时扫描任务队列,根据任务要求以及自身状态,竞争获取采集任务,步骤如下:
S301:工作节点获取当前系统状态(包括剩余网络带宽、剩余内存、CPU占用率等),与采集任务需求相比对,若符合任务需求,继续执行S302,否则放弃该任务;
S302:符合条件的工作节点向主节点请求执行该任务;
S303:一段时间内若仅有一个节点请求该任务,则将该任务交于请求节点执行,并从任务队列移除该任务,否则继续执行S304;
S304:所有请求执行该任务的节点向主节点提供其访问目标站点的时延和速度;
S305:主节点选择时延低、速度快的节点执行该任务,并从任务队列移除该任务。
S4:接受任务的工作节点,初始化后开始执行采集任务,具体步骤如下:
S401:工作节点根据任务信息生成采集进程;
S402:工作节点开始执行采集进程,采集进程将采集到的数据置入中间节点的消息队列中的数据队列;
S403:工作节点实时监控采集进程的运行状态,记录采集进程占用的内存、带宽、CPU等数据。
S5:采集进程执行结束后,工作节点统计并记录采集过程中的状态信息,步骤如下:
S501:工作节点统计进程执行过程中的平均资源占用和最大资源占用(包括内存、带宽、CPU等资源);
S502:工作节点根据采集进程的平均资源占用和最大资源占用按照次数加权平均,更新数据库中的任务要求。
本发明提出的上述解决方法的优势在于:
1.各节点可部署在各种网络环境中,当系统的计算资源不够时,内网中的个人计算机可以很容易地成为工作节点;
2.工作节点通过比对自身条件与任务要求决定是否请求执行采集任务,可以有效避免工作节点执行采集任务后,由于自身性能不足而导致当前任务甚至原先执行的任务的效率大大降低的问题;
3.工作节点分布于世界各地的网络环境中,对于某个采集任务主节点根据请求任务的各工作节点访问目标站点的时延和速度决定由哪个节点执行,可以有效的保证该任务能够以很高的效率执行;
4.每当任务执行完毕后,工作节点将会统计本次执行过程中的平均资源占用以及最大资源占用,并以按次数加权平均的方式更新该任务的执行要求,这可以有效的降低目标站点的网络环境以及数据量的不断变化对系统的影响。
为了解决数据采集系统易用性、通用性以及可管理性之间的矛盾,本发明提出了可扩展爬虫执行器的概念,具体内容如下:
1.爬虫开发者在开发爬虫程序的过程中经常会遇到很多相似的站点,这些站点爬取流程完全一致,只有某些数据(如URL、提取的字段)不同;
2.上述爬取流程在本发明中被抽象成了一个爬虫执行器,由整个爬取过程的代码构成;
3.上述可变的数据在本发明中称为爬虫配置,将成为爬虫执行器的参数,具体内容与各个站点相关;
4.上述的爬虫执行器与爬虫配置共同组成了本发明中用于执行采集任务的爬虫;
5.对于多个相同爬取流程的站点,只需要编写一份爬虫执行器的代码,其配合不同的配置信息将组成多个不同的爬虫;
6.对于爬取流程与现有的某个爬虫执行器有部分不同的站点,可以利用面向对象中的继承方式,通过继承现有爬虫执行器,然后重写部分方法的形式实现新的爬虫执行器。
特别地,前述爬行执行器也可以是用于执行一类基于某一框架编写的爬虫的程序,甚至是执行不同语言开发的爬虫的程序。
基于前述爬虫执行器的概念,S401:工作节点根据任务信息生成采集进程,可以分为以下步骤:
S40101:工作节点根据任务信息从数据库获取执行该任务的爬虫信息;
S40102:工作节点根据爬虫信息从磁盘加载其使用的爬虫执行器;
S40102:工作节点以爬虫信息中的爬虫配置作为爬虫执行器的参数生成新的采集进程。
前述爬虫执行器机制的优势在于:
1.对于相同爬取流程的一系列站点,只需编写一个爬虫执行器,后续所有的站点只需要简单的爬虫配置,即可实现爬虫的功能,可以节省很多重复工作所耗费的时间,有着跟基于配置的采集系统几乎相同的易用性;
2.若当前所有的爬虫执行器均无法实现目标站点的采集工作,只需重新编写一个爬虫执行器,这就避免了基于配置的采集系统经常遇到很多站点无法采集的问题,大大提高了系统的通用性;
3.系统中的爬虫都是由爬虫执行器和爬虫配置组成的,而爬虫执行器继承自系统中的基础爬虫执行器,都需实现系统要求的功能,这些标准的格式使得爬虫的可管理性变得很高。
图1为本发明实施例1提供的一种可扩展的分布式数据采集方法流程示意图,该方法包括以下步骤:
S1:主节点启动后从数据库读取所有的定时任务列表;
S2:主节点根据定时任务信息定时生成采集任务;
S3:主节点将生成的定时任务放入任务队列;
S4:工作节点启动后从任务队列读取一个任务的信息;
S5:工作节点获取本地服务器状态,将获取的状态信息与任务需求相比对,并根据比对结果判断是否符合任务需求;
S6:工作节点向主节点申请执行任务;
S7:主节点决定由哪个工作节点执行该任务,并将该任务从任务队列移除;
S8:获取执行权限的工作节点根据任务信息从数据库获取执行该任务的爬虫的信息;
S9:工作节点根据爬虫信息中的爬虫执行器名称,从磁盘加载爬虫执行器;
S10:工作节点将爬虫信息中的爬虫配置传入爬虫执行器生成新的采集进程;
S11:工作节点开始执行采集进程,并持续监控其资源占用和状态;
S12:工作节点监控到采集进程结束后,统计整个执行过程中的平均资源占用和最大资源占用;
S13:工作节点根据统计得到的数据,以按次数加权平均的方式更新采集任务的执行需求。
图2和图3为本发明实施例2提供的一种可扩展的分布式数据采集系统的结构图和部署架构图,具体内容如下所述:
系统由一个web服务器、一个主节点(Master),若干工作节点(Worker),一个消息队列集和一个数据库集组成。web服务器对外提供系统的控制接口和提供给工作节点同步数据的接口。主节点部署在状态稳定、网络良好的计算机上;工作节点根据需求可以部署到不同的网络环境中,例如不同国家的云服务器上;消息队列集(可选rabbitMQ、Kafka、Redis等分布式的消息队列)和数据库集(可选MongoDB、Mysql等)需部署到主节点和各个工作节点均能访问的服务器即中间节点上,集内部的节点数目由所需数据量决定。
主节点由任务调度器、系统状态监控器、数据处理器等组件构成。
任务调度器从数据库读取定时任务列表,并根据定时任务信息定时生成新的采集任务,并置入消息队列中的采集任务队列。所述定时任务信息可以是固定的时间、时间间隔,也可以是通用的crontab配置。任务调度器根据上述信息确定任务下次执行的时间,并加入待执行任务列表中。当到达下次执行的时间时,任务调度器将该任务置入消息队列中的采集任务队列。
系统状态监控器从数据库获取工作节点定时提交的状态信息,包括提交时间、各类资源使用率、正在执行的采集进程数目等信息。系统状态监控器根据工作节点最新的提交时间判断其存货状态,各类资源使用率将作为工作节点竞争采集任务的重要指标。
对于同一个采集任务,主节点会统计短时间内申请执行该任务的节点信息,若仅有一个节点申请执行,则将该任务交于该节点执行。若主节点收到多个工作节点的请求时,将会按照一定规则为各个节点评分,得分最高的工作节点将获取执行权限:
用于计算节点得分的数据包括但不限于:工作节点访问目标站点的时延t和速率r、工作节点剩余的内存m和带宽b,这些数据经过加权求和后得到总分S:
S=wt*t+wr*r+wm*m+wb*b
其中,wi表示i属性对应的权重,可根据具体需求人工设定。
若位于任务队列头部的任务,在一段时间内没有节点申请执行,则按照一定规则(如价格低至原来要求的90%)降低该任务的需求,并将该任务放到队尾,如果降低到一定程度(如原来的50%)仍无节点申请,则将该任务从任务队列移除并报告给系统管理员。
数据处理器从消息队列中的数据队列中获取采集进程采集的数据,所述数据包括工作节点的唯一识别符、采集爬虫的唯一识别符、采集时间和采集数据的具体内容,之后数据处理器根据上述信息对数据进行处理:
1.数据处理器根据工作节点的唯一识别符在数据库更新该节点的数据采集总数;
2.数据处理器根据采集爬虫的唯一识别符从数据库获取该爬虫配置的数据输出信息;
3.上述数据输出信息可以包括某种数据库的连接信息、目标表名或是某文件系统的路径名;
4.数据处理器根据数据输出信息选择对应的数据输出器;
5.数据处理器调用数据输出器将采集数据的具体内容输出至目标存储介质。
工作节点由任务接收器、任务评估器、任务执行器、爬虫执行器、进程控制器、节点监控器等组件组成。
任务接收器定时从任务队列获取最新任务信息,然后调用任务评估器判断工作节点是否满足执行该任务的条件,若满足则向主节点申请执行该任务,否则放弃执行该任务。
任务评估器获取计算机的运行状态,包括内存占用、cpu占用、IO占用、带宽占用等信息,然后将剩余的资源与任务需求相比对,根据比对结果判断是否符合执行条件。
任务接收器获取执行权限后,将任务信息交给任务执行器执行:
1.任务执行器根据任务信息从数据库获取执行该任务的爬虫信息,包括其使用的爬虫执行器的唯一识别符和爬虫配置信息。
2.任务执行器根据爬虫执行器的唯一识别符从硬盘中加载该爬虫执行器,并生成爬虫执行器对象。
3.任务执行器将爬虫配置传入爬虫执行器,生成执行采集任务的采集进程。
4.任务执行器执行采集进程,并对其进行实时监控。
爬虫执行器是一段用于执行特定类型爬虫的程序,它以爬虫的配置信息作为参数,并且可以根据爬虫的配置信息完成特定的爬取工作:
爬虫执行器可以针对特定类型的爬取任务进行编写,例如针对含有分页列表的网页进行爬取的爬虫,若采用xpath进行数据定位,此时爬虫的配置信息应该包括:列表项目的xpath、需要提取的各个字段的xpath、翻页链接的xpath以及各个字段的字段名。
爬虫执行器可以针对特定的爬虫框架进行编写,例如针对scrapy的爬虫,爬虫执行器应该导入scrapy的核心库,并初始化scrapy的运行环境,此时爬虫的配置信息应该包括一个包含scrapy爬虫的脚本文件,爬虫执行器需在加载爬虫脚本文件后运行该爬虫。
爬虫执行器也可以针对特定采集内容的格式进行编写,例如针对csv格式的数据,爬虫的配置信息只需包括需要采集数据的字段名以及该字段在csv中的列号。
进程控制器用于控制采集进程的运行,包括暂停、继续以及强制执行,它从主节点接收相应的控制命令并执行。
节点监控器监控节点的运行状态(包括但不限于内存总量及使用率,cpu核数、频率以及使用率,网络带宽及其使用率),并定时保存至数据库,以供主节点使用。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
本文发布于:2023-04-14 14:10:41,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/2/86260.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |