开源通用爬虫框架YayCrawler-框架的运行机制
这一节我将向大家介绍一下YayCrawler的运行机制,首先允许我上一张图:
首先各个组件的启动顺序建议是Master、Worker、Admin,其实不按这个顺序也没关系,我们为了讲解方便假定是这个启动顺序。
一、Master端分析
Master启动后会连接Redis查询任务队列状态,Master维持了四个状态的任务队列:待执行任务队列、执行中任务队列、成功任务队列和失败任务队列。Master内部有一个任务调度器,Master等Worker心跳包到来的时候,观察Worker是否还有任务分配的余地(每个Worker可以设置自己本地的任务队列的长度),如果Worker还能接收n个任务,任务调度器就会从待执行任务队列中取至多n个任务分配给该Worker。分配成功后,Master会把这n个任务从待执行队列移到执行中队列。
Master会定期扫描已注册的Worker,如果某个Worker的上次心跳时间距离了现在已经超过了2倍Worker自身的心跳间隔,那么Master会认为此Worker已经失联,不能再给它分配任务,因此会把它从已注册列表移除。
Master会定期扫描执行中队列,如果发现某个任务的分配时间距离现在已经超过了某个预设值,我们可以认为这个任务出现了差错,应该重新执行一遍,因此Master会重新把这个任务从执行中队列移到待执行队列,以便再次分配执行。
二、Worker端分析
Worker的配置文件里面配置了Master的服务通信地址,Worker启动的时候就会通过这个地址向Master注册,注册的信息包括Worker的通信地址、心跳间隔、任务配额等。Worker注册成功后会定期向Master发送心跳,向Master汇报自己的状态的同时领取任务。
三、Admin端分析
Admin端主要是为用户提供一个操作的接口界面,这是一个Web工程,Admin端的配置文件里面也记录了Master的服务通信地址。用户在Admin端可以针对目标网页编写抽取规则,测试规则,直到保存到数据库。用户可以在界面上查看任务的执行情况,比如成功的任务,失败的任务,任务的结果等;用户也可以在界面上单个或批量发布普通任务/定时任务,这些任务最终会在Worker上执行,Worker在解析的时候会参考用户设置的解析规则。
四、其他
Master、Worker和Admin三者之间的通信是基于http协议的,为了安全,通信过程中都使用了token, timestamp, nonce来对消息体进行签名并验证,只有签名正确才能通信成功。
框架中的队列、持久化方式都是基于接口编程的,您可以很方便的用自己的实现来替换原有的处理。
开源通用爬虫框架YayCrawler-框架的运行机制的更多相关文章
- 开源通用爬虫框架YayCrawler-开篇
各位好!从今天起,我将用几个篇幅的文字向大家介绍一下我的一个开源作品--YayCrawler,其在GitHub上的网址是:https://github.com/liushuishang/YayCraw ...
- 开源通用爬虫框架YayCrawler-运行与调试
本节我将向大家介绍如何运行与调试YayCrawler.该框架是采用SpringBoot开发的,所以可以通过java –jar xxxx.jar的方式运行,也可以部署在tomcat等容器中运行. 首先 ...
- 01_日志采集框架Flume简介及其运行机制
离线辅助系统概览: 1.概述: 在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集.结果数据导出. 任务调度等不可或缺的辅助系统,而这些辅助 ...
- 开源通用爬虫框架YayCrawler-页面的抽取规则定义
本节我将向大家介绍一下YayCrawler的核心-页面的抽取规则定义,这也是YayCrawler能够做到通用的主要原因之一.如果我要爬去不同的网站的数据,尽管他们的网站采用的开发技术不同.页面的结构不 ...
- php CI框架目录结构及运行机制
CI目录结构 CI主要组成部分为,application(应用文件夹).system(系统文件夹)和index.php入口文件. 应用文件夹中主要是存放控制器.模型和视图等,系统文件夹中主 ...
- 爬虫框架YayCrawler
爬虫框架YayCrawler 各位好!从今天起,我将用几个篇幅的文字向大家介绍一下我的一个开源作品——YayCrawler,其在GitHub上的网址是:https://github.com/liush ...
- 爬虫(十八):Scrapy框架(五) Scrapy通用爬虫
1. Scrapy通用爬虫 通过Scrapy,我们可以轻松地完成一个站点爬虫的编写.但如果抓取的站点量非常大,比如爬取各大媒体的新闻信息,多个Spider则可能包含很多重复代码. 如果我们将各个站点的 ...
- 【转】Python爬虫(6)_scrapy框架
官网链接:https://docs.scrapy.org/en/latest/topics/architecture.html 性能相关 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下 ...
- 爬虫之scrapy框架
解析 Scrapy解释 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓 ...
随机推荐
- bzoj5093:[Lydsy1711月赛]图的价值
题目 首先考虑到这是一张有标号的图,每一个点的地位是相等的,因此我们只需要求出一个点的价值和乘上\(n\)就好了 考虑一个点有多少种情况下度数为\(i\) 显然我们可以让除了这个点的剩下的\(n-1\ ...
- 各个版本的 Oracle 11.2.0.4下载地址
Oracle 11.2.0.4下载地址 Linux x86: https://updates.oracle.com/Orion/Services/download/p13390677_112040_L ...
- IntelliJ IDEA2018.3 最新破解方法 无需改host
文章转自 https://blog.csdn.net/SmileLvCha/article/details/78936659 刚把idea升级到最新版,发现要重新激活,网上查了有改host的方法可行, ...
- 一图尽知XMIND
- Echo团队Alpha冲刺随笔 - 第三天
项目冲刺情况 进展 完成了三分一左右,前端整体页面框架已有,后端也在稳步推进 问题 今天问题较少,主要还是出在对于框架的掌握上 心得 继续加油! 今日会议内容 黄少勇 今日进展 实现社区公告,个人信息 ...
- AI 主成分分析(PCA)
主成分分析(principal components analysis,简称PCA),
- AI 线性代数
1.标量.向量.矩阵和张量 1)标量(scalar),一个数,例如自然数和实数. 2)向量(vector),一列有序数.可以看作只有一列的矩阵. 3)矩阵(matrix),二维数组.转置(transp ...
- Qt之创建并使用静态链接库
1.创建静态链接库 静态库的工程名字 添加包含的模型 更改一下类的名字 我的静态编译库的工程. 写一个简单的静态哭的代码为后面测试静态库使用 cpp代码: #include "staticb ...
- SourceInsight工具增强——AStyle(代码格式化)、PC-Lint(静态检查)
Artistic Style(AStyle) AStyle是一款开源.高效.精简的代码格式化工具,适用于C.C++.C#.Java等.官方地址在:http://astyle.sourceforge.n ...
- grep配置颜色显示
查日志时候必须要用的命令,为了在终端方便显示查看,可以加颜色和高亮等设置. 自己习惯用的: GREP_COLOR='a;b' a=4表示下划线,b=41表示红色背景高亮 在~/.bashrc文件中加 ...