- A+
 
下面是一个超级计算机的排行榜,如果我们能拥有其中任意一个,那么我们就不需要搞什么分布式系统。可是我们买不起,即使买得起,也交不起电费,所以我们只好费脑子搞分布式。
| 
 Rank  | 
 System  | 
 Cores  | 
 Rmax  | 
 Rpeak  | 
 Power (kW)  | 
| 
 1  | 
 Tianhe-2 China  | 
 3,120,000  | 
 33,862.7  | 
 54,902.4  | 
 17,808  | 
| 
 2  | 
 Titan US  | 
 560,640  | 
 17,590.0  | 
 27,112.5  | 
 8,209  | 
| 
 3  | 
 Sequoia US  | 
 1,572,864  | 
 17,173.2  | 
 20,132.7  | 
 7,890  | 
| 
 4  | 
 K Japan  | 
 705,024  | 
 10,510.0  | 
 11,280.4  | 
 12,660  | 
| 
 5  | 
 Mira US  | 
 786,432  | 
 8,586.6  | 
 10,066.3  | 
 3,945  | 

架构概述
与第二期介绍的通用爬虫架构不同,下面是一个聚焦爬虫的架构图,与前者相比,它不仅要保存网页,还要提取出网页中的指定内容。

![]()



流程控制 – 任务
Scheduler_manager定时读取Mysql中的任务信息,根据任务的周期等配置进行调度,下面是一个最基本的任务启停流程。


流程控制 – 数据
现在每个Crawler_core实例都有了待处理的任务,接下来就要对每个任务的url进行处理了。继续使用Redis作为公共缓存来存放URLs,多个Crawler_core实例并行存取todo集合。


流程控制 – 状态


| 
 taskId:flag:crawler:info  | 
||
| 
 Filed  | 
 value  | 
 说明  | 
| 
 totalCnt  | 
 10000  | 
 抓取的url总数:抓取完成,不管成功失败,都加1  | 
| 
 failCnt  | 
 0  | 
 抓取的url失败数:抓取失败,加1  | 
| 
 switch  | 
 1  | 
 任务状态:0:停止,1:启动,2:暂停,3:暂停启动  | 
| 
 priority  | 
 1  | 
 任务优先级  | 
| 
 retryCnt  | 
 0  | 
 重试次数  | 
| 
 status  | 
 0  | 
 任务执行状态:1:进行中,2:完成  | 
| 
 Ref  | 
 0  | 
 url引用数:每消费一个url,减1;生成一个url,加1。等于0则任务完成  | 
| 
 maxThreadCnt  | 
 100  | 
 任务的最大线程数  | 
| 
 remainThreadCnt  | 
 10  | 
 剩余可用线程数  | 
| 
 lastFetchTime  | 
 1496404451532  | 
 上一次抓取时间  | 
| 
 taskId:flag:parser:info  | 
||
| 
 Filed  | 
 value  | 
 说明  | 
| 
 totalCnt  | 
 10000  | 
 解析总数:解析完成,不管成功失败,都加1  | 
| 
 failCnt  | 
 0  | 
 解析失败数:解析失败,加1  | 
| 
 crawlerStatus  | 
 0  | 
 爬取状态:0:进行中,2:完成  | 
| 
 ref  | 
 10  | 
 url引用数:crawler每保存一个网页,加1;parser每解析完成一个网页,减1。等于0不说明任务完成。若crawlerStatus等于2,ref等于0,则任务完成。  | 
| 
 taskId:flag:filter:info  | 
||
| 
 Filed  | 
 value  | 
 说明  | 
| 
 totalCnt  | 
 10000  | 
 清洗总数:清洗完成,不管成功失败,都加1  | 
| 
 failCnt  | 
 0  | 
 清洗失败数:清洗失败,加1  | 
| 
 crawlerStatus  | 
 0  | 
 解析状态:0:进行中,2:完成  | 
| 
 ref  | 
 10  | 
 url引用数:parser每保存一条数据,加1;filter每清洗完成一条数据,减1。等于0不说明任务完成。若parserStatus等于2,ref等于0,则任务完成。  | 
流程控制 – failover
如果一个Crawler_core的机器挂掉了,就会开始数据恢复程序,把这台机器所有未完成的任务恢复到公共缓存中。




学会了吗!这波是爬虫中的必备技能哦!