采集频率的动态调整策略
1 背景
之前的采集配置都需要手动设置爬行间隔时间,希望根据不同网站板块实际情况进行填写。但实际使用时发现想填准这个值非常困难,页面本身更新频率也是变化的,所以结果就是基本都是填写成默认值。从而导致爬行频率设置形同虚设,对于很多几乎不更新的板块也配置了较高的采集频率一直在工作(默认是15分钟一次),浪费系统资源。另外早晚帖文的更新速度也明显不一样,而系统却一直按固定频率进行爬行。
2 解决思路
既然写成静态的间隔时间很不实用,那么就需要用一个动态的方式来根据实际情况灵活调整。
鉴于滑动窗口协议流量控制的思路,采集也可以采用类似方式。网页下载无非三种情况:(1)发现了新帖文并采集入库,(2)未发现新帖文则没有东西入库,(3)网页下载失败或网页改版导致没发现帖文。目前在每次任务采集完成以后都记录其采集的具体情况,比如发现多少条记录、入库多少条记录等。那么对于发现有更新就加快采集频率,没更新就减慢采集频率,实际情况页面更新频率也是比较平滑,所以这样就会让采集系统在采集过程中可以有一个调整周期,逐渐与页面实际更新频率相接近。但为了防止过快或者过慢采集,还要设置一个采集频率的边界。
3 解决方案
加速条件:本轮次采集该版块有新帖文入库,则按一定比例加快采集速度,加速因子为upactor。
减速条件:本轮次采集该版块未发现任何新帖文,则按一定比例下降采集速度,减速因子为downactor。
频率范围:5分钟/轮次~1天/轮次(1440分钟/轮次)
动态公式:
f(0) = 15m/r
If found new records, f(i+1) = f(i) * upactor, f(i+1) < 1440 m/r
If not found new recoreds, f(i+1) = f(i) * downactor, f(i+1) > 5 m/r
根据初步评估,upactor取1.125,downactor取0.5比较合适。那么一个持续不变化的网站采集频率从15m/r变化到1440m/r一共需要约40次任务调度,共9天的时间。而一个网站持续变化最多是从1440m/r变化成5m/r,一个需要调度约8次,共一天的时间。
这种低增长快下降的策略可以更好应对突然加快更新频率,不容易遗漏帖文。
本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/716307,如需转载请自行联系原作者