弦音

多数据引擎构建高可靠性爬虫的一种思路 | 弦音

多数据引擎构建高可靠性爬虫的一种思路

  项目背景:有3个数据源(实际项目中为5个),我们暂定为A、B、C,这三个数据源每隔1分钟会更新数据,但是每隔数据源的可靠性不同。比如A数据源更新数据会延迟10秒,但连接的可靠性更高一些,B数据源虽然相对不稳定但数据更新更快。

  解决方案:在讲解决方案之前先介绍一下初步判断连接是否有效的方法:首先判断请求返回的状态码即Http Status Code,如果是200则代表连通成功。再判断返回消息实体的长度即Content-Length,当该长度足够小时很可能返回的是跳转后的出错页面。

  首先我们将最快速的B引擎作为主数据源,主要步骤为:

1、判断B引擎是否连接有效,如果有效则进行爬取,取最新的一条数据与redis缓存中最后一条数据进行校验是否发生改变,如果已经改变则说明是最新数据进行入库处理,且要写进redis缓存一份数据。

2、如果B引擎失效,则分布式系统将向A、B、C三个数据源发送连接请求,连接有效的则进行数据爬取,第一个返回数据且数据为更新数据的引擎将作为下一次的默认爬虫引擎。

3、如默认爬虫引擎失效,则重复步骤1和2,直到找到当前时段内连接最快且更新最快的数据引擎。

实际爬虫开发过程中,应该多次测试取平均连接速度,部分网站可能偶尔链路较快。

 

4 + 1 =

回到顶部