数据结构论坛

首页 » 分类 » 分类 » 千亿级的网页如何下载
TUhjnbcbe - 2024/2/17 9:02:00
山东白癜风医院 http://finance.sina.com.cn/chanjing/b/20090930/09073071708.shtml

大家好,我是TT。

在互联网早期,网络爬虫仅仅应用在搜索引擎中。随着大数据时代的到来,数据存储和计算越来越廉价和高效,越来越多的企业开始利用网络爬虫来获取外部数据。例如:获取政府公开数据以进行统计分析;获取公开资讯以进行舆情和热点追踪;获取竞争对手数据以进行产品和营销优化等等。

网络爬虫有时候也被称为网络机器人,或者网络蜘蛛。我们准备开发一个全网爬虫,爬取全(中文)互联网的公开网页,以构建搜索引擎和进行数据分析。爬虫名称为“Bajie(八戒)”。

Bajie的技术挑战包括:如何不重复地获取并存储全网海量URL?如何保证爬虫可以快速爬取全网网页但又不会给目标网站带来巨大的并发压力?接下来我们就来看看Bajie的需求与技术架构。

需求分析

Bajie的功能比较简单,这里不再赘述。

性能指标估算

因为互联网网页会不断产生,所以全网爬虫Bajie也是一个持续运行的系统。根据设计目标,Bajie需要每个月从互联网爬取的网页数为20亿个,平均每个页面KB,且网页需存储20年。

Bajie的存储量和TPS(系统吞吐量)估算如下。

每月新增存储量

估计平均每个页面KB,那么每个月需要新增存储1PB。

20亿×kb=1PB

总存储空间

网页存储有效期20年,那么需要总存储空间PB。

1PB×12个月×20年=PB

TPS

Bajie的TPS应为。

20亿÷(0×24×60×60)≈

非公能需求

Bajie需要满足的非功能需求如下。

1.伸缩性:当未来需要增加每月爬取的网页数时,Bajie可以灵活部署,扩大集群规模,增强其爬取网页的速度。也就是说,Bajie必须是一个分布式爬虫。

2.健壮性:互联网是一个开放的世界,也是一个混乱的世界,服务器可能会宕机,网站可能失去响应,网页HTML可能是错误的,链接可能有陷阱……所以Bajie应该能够面对各种异常,正常运行。

.去重:一方面需要对超链接URL去重,相同的URL不需要重复下载;另一方面还要对内容去重,不同URL但是相同内容的页面也不需要重复存储。

4.扩展性:当前只需要爬取HTML页面即可,将来可能会扩展到图片、视频、文档等内容页面。此外,Bajie必须是“礼貌的”。爬虫爬取页面,实际上就是对目标服务器的一次访问,如果高并发地进行访问,可能会对目标服务器造成比较大的负载压力,甚至会被目标服务器判定为DoS攻击。因此Bajie要避免对同一个域名进行并发爬取,还要根据目标服务器的承载能力增加访问延迟,即在两次爬取访问之间,增加等待时间。

并且,Bajie还需要遵循互联网爬虫协议,即目标网站的robots.txt协议,不爬取目标网站禁止爬取的内容。比如

1
查看完整版本: 千亿级的网页如何下载