分布式爬虫webmagic
2021-03-15 09:31:01 7 举报
122
作者其他创作
大纲/内容
直接pub noder:workerip 此任务并将reids任务设置成running,更新数据库任务状态为运行中
是
发布
1 配置解析规则、2发布任务 3查询任务状态
是否可分布任务
key
value(set)
TASK_WORKER_SET_AFFIX_taskid1
TASK_WORKER_SET_AFFIX_taskid2
TASK_WORKER_SET_AFFIX_taskid3
否
worker结点配置文件,worker通过心跳注册到master,先判断是否存在对应ip worker,没有就插入,有就更新注册时间。
订阅
master (service)
WORKERLIST
worker.ip
worker.heartbeat.inteval
worker.spider.threadCount
worker.spider.maxCount
lastHeartbeatTime
worker1
192.169.0.1
10000
2
8
2012.03.08 12.0.
worker2
192.169.0.2
3
worker3
192.169.0.3
此处目的是让第一个任务先爬,后面结点 通过获取第一个任务的url
频道 master
等待
TASK_WORKER_SET_AFFIX_1111 任务分配执行的worker
master->worker订阅
redis TOPIC
8 worker1(provider1)
当线程池中不存在活着的线程就表示任务结束
worker启动
TASK_WORKER_SET_AFFIX_1111 以任务key的SET
2 worker2(provider2)
node:master
当worker中爬虫线程任务结束或者因为异常结束:1:删除对应taskworker中任务对应的worker.2:判断如果当前任务下worker都不存在了,则在全局变量:完成任务
master监听到心跳后判断注册中心是否存在worker
获取任务url 开始爬取,并在taskwork注册上当前worker
1:间隔10s 心跳往node:master 发布自身任务状态 msg
worker收到信息后,判断任务收到时候状态,
从TASKURLSET 能否获取url,
WORKERLIST中增加worker 并修改lastHeartbeatTime
uuid(taskid)
相对应需要解析的url列表比如:jd.com/xinwen1.html
publicTOPIC 用于master统一分发:1:页面操作停止任务,所有worker收到信息后自检并删除??
频道 公共
任务状态为waiting
task (waiting)
task4
task5
定时10s一次的心跳维持状态汇报:worker->master心跳 :1:注册worker2:不断获取新的任务。3:汇报自己运行状况包括 还可以运行任务数= spider.maxCount -当前运行数4:汇报 已经完成的任务列表。(所有worker都完成并且没有url)
3 worker3(provider3)
先 pub noder:workerip 此任务且任务状态为当前状态 然后将reids任务设置成running,更新数据库任务状态为运行中,
定时触发任务执行
从TASKLIST 按顺序获取第一个TASK并判断
更多......
启动时候将 1: runing-》waiting ,上次异常关闭的任务重新开始 2: running 任务对应的TASK_WORKER_SET KEY清空
es/mysql/oracl
TASKLIST
task1(running)
task2(runing)
task3(waiting)
task4(waiting)
TASKURLSET
worker解析后 page.addTargetRequest(request);
在taskwork注册上当前worker 并开始运行任务
mysql 查询结果,需要同步锁
node:worker
Request request = scheduler.poll(this);当worker获取到url才会 判断当前TASKWORKER是否存在对应worker,如果不存在则push,否则不注册。原则是:开始爬就注册。
收藏
0 条评论
下一页