技术摘要:
本发明涉及一种可扩展的分布式数据采集方法和系统。该方法包括:部署主节点、工作节点和中间节点;主节点根据数据库中的定时任务定时生成采集任务,发布到消息队列的任务队列中;工作节点定时从任务队列读取采集任务并根据本地服务器的状态决定是否申请执行该采集任务 全部
背景技术:
网络数据采集是指从互联网获取公开的数据资源,然后按照需求保存到特定位置 的过程。网络数据采集通常使用网络爬虫实现,网络爬虫是一种按照一定的规则自动爬取 互联网网页数据的计算机程序。一个爬虫可以从互联网的某个网站下载网页,然后对网页 进行解析和过滤,并根据需求从中提取数据。随着人工智能、大数据技术的发展,网络数据 的需求量极速增长,一个研究工作需要千万级的数据量,变的十分平常。这些数据的采集往 往涉及到众多站点,站点的数据格式也千差万别,因此开发者往往为每个站点独立开发一 个爬虫,数据采集系统的作用就是用于管理众多的网络爬虫。 从对爬虫的管理方式来看,现有的数据采集系统可以分为基于配置的和基于代码 的两类。基于配置的数据采集系统将爬虫抽象为了一组配置信息,例如针对html可以配置 要获取内容的selector或xpath。基于代码的数据采集系统,有些为使用者提供一个爬虫的 开发框架,使用这个框架开发的爬虫,可以很好的接入系统;还有些系统不依赖于爬虫框 架,直接运行爬虫脚本。但是这两类数据采集系统都有着显著的优缺点:基于配置的数据采 集系统对于简单的采集任务(例如使用feed格式的数据源),只需要简单的配置就能实现功 能,可以大大的节约开发时间,但对于复杂的采集任务(如需要登录认证的站点)往往很难 完成;而对于基于代码的系统基本适用于各种采集任务,但针对相似的站点编写爬虫往往 会有很多重复的工作,大大降低了开发效率。 从系统的部署方式来看,现有的数据采集系统分为单机部署和分布式部署两类, 由于单个计算机的硬件资源和网络带宽往往是有限的,所以分布式部署更适合数据量需求 庞大的用户。然而对于分布式部署的系统任务分配是个很大问题,现有系统大都利用负载 均衡的方式进行任务分配,很少关注节点的自身性能条件和网络条件,这导致了采集效率 的降低和资源的浪费。 如上所述,现有系统普遍存在着易用性、通用性以及可管理性上的问题,在分布式 部署中经常出现任务分配不合理的情况,这使得系统在实际使用中经常出现各种各样的问 题。
技术实现要素:
本发明提出了一种高可扩展的分布式数据采集框架和方法,解决了现有数据采集 系统易用性、通用性以及可管理性之间的矛盾以及分布式部署中任务分配不合理的难题。 本发明采用的技术方案如下: 第一方面,本发明提供一种分布式网络数据采集系统的采集任务的分配方法,包 括以下步骤: 5 CN 111580954 A 说 明 书 2/9 页 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),否则放弃申请该任务; 6 CN 111580954 A 说 明 书 3/9 页 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)根据采集任务的流程创建,比如可以针对翻页列表形式的站点创建一个爬虫 7 CN 111580954 A 说 明 书 4/9 页 执行器,此时传入执行器的爬虫配置需包括主页面url、获取下一页url的XPath、需要提取 的字段以及各自所对应的XPath; b.2)根据采集的数据格式(xml、json、csv等)创建,比如对于针对csv格式的爬虫 执行器,传入的爬虫配置需包括资源url、所需的所有字段以及各自对应的csv列; b.3)根据所采用的爬虫框架创建,例如针对scrapy框架可以创建一个爬虫执行 器,其中爬虫执行器实现爬虫的通用部分(如middleware、pipeline等),实现采集逻辑的 Spider代码则以爬虫配置的形式传入爬虫执行器。 第三方面,本发明提供一种可扩展的分布式数据采集系统,其包括一个web服务 器、一个主节点、多个工作节点、一个数据库集群、一个消息队列集群: Web服务器对外提供系统的控制接口和提供给工作节点同步数据的接口; 消息队列集群和数据库集群作为主节点、工作节点间的通信桥梁,部署到主节点 与工作节点均能访问到的网络中; 主节点和工作节点部署到任何能访问到消息队列集群和数据库集群的网络中; 工作节点分散部署(比如可以分散到不同国家的服务器上),以适应多样的采集需 求; 主节点和工作节点采用上面所述的一种分布式网络数据采集系统的采集任务的 分配方法进行采集任务的分配; 工作节点采用上面所述的一种可扩展的分布式数据采集方法执行采集任务; 数据库集群用于存储系统正常运行所需的所有持久化数据(包括爬虫执行器信 息、爬虫信息、采集任务信息、采集进程信息等)以及采集进程所采集的所有数据; 消息队列集群用于主节点与工作节点间的通信交流,如充当任务队列和数据队 列。 进一步地,所述主节点包括任务调度器、系统状态监控器、数据处理器; 所述任务调度器生成采集任务并推送到任务队列中,之后接收工作节点的任务执 行申请并决定执行采集任务的工作节点; 所述系统状态监控器通过系统API获取主节点的状态,通过数据库获取工作节点 的状态,当某个节点的状态异常时,通知系统管理员; 所述数据处理器通过消息队列接收工作节点采集的数据,统一处理后储存至数据 库。 进一步地,所述工作节点包括任务接收器、任务评估器、任务执行器、节点监控器、 进程控制器; 所述任务接收器从任务队列读取任务信息,调用所述任务评估器判断工作节点是 否满足执行任务的条件,若满足则向主节点申请执行该任务,否则放弃执行该任务; 所述任务执行器从任务接收器获取任务信息,并执行任务; 所述节点监控器实时监控并记录工作节点的运行状态,并定时保存至数据库以供 主节点使用; 所述进程控制器实时监控采集进程的状态,并记录其运行过程中资源占用情况。 本发明提出的一种采集系统分布式部署的解决方案优化了采集任务分配的流程, 大大提高了采集的效率,在节点众多的情况下仍能保证任务分配的合理性,减少了硬件资 8 CN 111580954 A 说 明 书 5/9 页 源的浪费;本发明提出的爬虫执行器机制兼顾了系统的易用性、通用性以及可管理性,使得 系统在支持广泛类型的爬取任务的同时仍能保证爬虫开发的效率,此外它还给系统带来了 很高的灵活性,开发者在开发爬虫过程中总结出来的爬取套路都能通过编写爬虫执行器实 现代码的复用。 附图说明 图1为本发明实施例1提供的一种可扩展的分布式数据采集方法的流程图; 图2为本发明实施例2提供的一种可扩展的分布式数据采集系统的结构图; 图3为本发明实施例2提供的一种可扩展的分布式数据采集系统的部署架构图。