采集频率的动态调整策略

采集频率的动态调整策略

背景

之前的采集配置都需要手动设置爬行间隔时间,希望根据不同网站板块实际情况进行填写。但实际使用时发现想填准这个值非常困难,页面本身更新频率也是变化的,所以结果就是基本都是填写成默认值。从而导致爬行频率设置形同虚设,对于很多几乎不更新的板块也配置了较高的采集频率一直在工作(默认是15分钟一次),浪费系统资源。另外早晚帖文的更新速度也明显不一样,而系统却一直按固定频率进行爬行。

解决思路

既然写成静态的间隔时间很不实用,那么就需要用一个动态的方式来根据实际情况灵活调整。

鉴于滑动窗口协议流量控制的思路,采集也可以采用类似方式。网页下载无非三种情况:(1)发现了新帖文并采集入库,(2)未发现新帖文则没有东西入库,(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

 

根据初步评估,upactor1.125downactor0.5比较合适。那么一个持续不变化的网站采集频率从15m/r变化到1440m/r一共需要约40次任务调度,共9天的时间。而一个网站持续变化最多是从1440m/r变化成5m/r,一个需要调度约8次,共一天的时间。

这种低增长快下降的策略可以更好应对突然加快更新频率,不容易遗漏帖文。



本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/716307,如需转载请自行联系原作者

上一篇:dede采集 标题不完整


下一篇:大厂面试真题详解:最长的回文序列