系统设计:网络爬虫

发布时间:2023-12-19 06:37:21

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情

目录

介绍

要求

功能性

无功能

遍历时间

成分

调度程序

DNS解析器

HTML 获取器

服务主机

提取器

重复消除器

斑点商店

最终设计

评估

可扩展性

一致性


介绍

网络爬虫(一种互联网机器人)从种子 URL 开始系统地搜索网络内容。此过程称为爬行,存储获取的内容以供后续使用。搜索引擎使用这些存储的数据进行索引和排名。

本具体讨论重点关注网络爬行,不涉及搜索引擎中的索引和排名阶段。

要求

功能性

  • 抓取 -?系统应该从系统管理员最初提供的种子 URL 列表中搜索 WWW。
  • 存储 -?系统应该能够提取 URL 的内容并将其存储在?blob 存储中.这使得搜索引擎可以处理该 URL 及其内容,以进行索引和排名。
  • 调度:由于抓取是一个重复的过程,系统应该有定期的调度来更新其 blob 存储的记录

无功能

  • 可扩展性 -?系统本质上应该是分布式和多线程的,因为它必须获取数亿个 Web 文档。
  • 一致性:由于我们的系统涉及多个抓取工作人员,因此所有这些工作人员之间的数据一致性是必要的。

遍历时间

由于遍历时间与存储需求同样重要,我们来计算一下一次性抓取的大概时间。假设每个网页的平均HTTP遍历为60毫秒,则遍历所有50亿个页面 >?将是:

总计?遍历?时间=5?十亿秒< /span>9.5?=?十亿=0.3?毫秒×60

使用一次抓取实例遍历整个互联网大约需要 9.5 年时间一次抓取,但我们希望在一天。我们可以通过设计系统来支持多工作线程架构并将任务分配给在不同服务器上运行的多个工作线程来实现此目的。

成分

调度程序

这是安排网址抓取的关键构建块之一。它由两个单元组成:优先级队列和关系数据库。

  1. 优先级队列(URL 边界):队列托管所创建的?URL准备抓取基于与每个条目关联的两个属性:优先级和更新频率。
  2. 关系数据库:它存储所有URL以及上述两个关联参数。数据库由来自以下两个输入流的新请求填充:
  • 用户的添加的网址,其中包括种子和运行时添加的网址。
  • 抓取工具的提取的网址

图 1.0:调度程序组件

DNS解析器

网络爬虫需要 DNS 解析器将主机名映射到 IP 地址以获取 HTML 内容。由于DNS 查找是一个耗时的过程,更好的方法创建自定义 DNS 解析器并在其生存时间内缓存常用的 IP 地址,因为它们在生存时间后必然会发生变化-直播。

HTML 获取器

HTML 提取器启动与托管 URL 的服务器的通信。它根据底层通信协议下载文件内容。我们主要关注文本内容的?HTTP 协议,但?HTML 获取器?可以轻松扩展到其他通信协议。

服务主机

该组件充当爬虫的大脑,由工作实例组成。该服务主机/爬虫执行三个主要任务:

  • 它处理抓取操作的多工作架构。根据可用性,每个工作器与 URL 边界进行通信,将下一个可用的 URL 出队进行抓取.
  • 每个工作人员负责从 DNS 解析器获取传入 URL 的 DNS 解析
  • 每个工作线程充当调度程序和 HTML 提取程序之间的网关,发送必要的DNS解析信息发送至HTML fetcher以启动通信。

图2.0:服务主机与其他组件集成

提取器

HTML 提取程序获取网页后,下一步就是从网页中提取两部分内容:网址和内容。提取器直接将提取的 URL 以及带有文档输入流 (DIS)?的内容发送到重复消除器。?DIS 是一个缓存,用于存储提取的文档,以便其他组件可以访问和处理它。在这里,我们可以使用?Redis?作为我们的缓存选择,因为它具有先进的数据结构功能。

一旦验证数据存储中不存在重复项,提取器就会将URL 发送到包含 URL 边界的任务计划程序并将内容存储在?blob 存储中以用于索引目的

重复消除器

网络的互联性导致不同 URL 可能存在重复内容。为了防止资源浪费,重复数据删除组件会检查重复项。它计算提取的 URL 的校验和并将其与存储的校验和进行比较。匹配项将被丢弃,而新条目将添加到数据库中。

图 3.0:重复消除器设计

重复消除器对提取的内容重复相同的过程并将新网页的校验和值添加到文档校验和数据存储中以供将来匹配.

Blob商店

由于网络爬虫是主干搜索引擎、存储和索引?>非结构化数据,因为我们需要存储大量blob存储?获取的内容和相关元数据非常重要。设计需要有一个分布式存储,例如

最终设计

图4.0:网络爬虫的最终设计

评估

可扩展性

  • 该系统可扩展以处理不断增加的 URL 数量。它包含所有必需的资源,包括调度程序、网络爬虫工作程序、HTML 获取程序、提取程序和 blob 存储,这些资源可按需添加/删除。
  • 在分布式 URL 边界的情况下,系统利用一致散列在各个爬行工作程序之间分配主机名,其中每个工作程序都在服务器上运行。这样,添加或删除爬虫服务器就不成问题了。

一致性

我们的系统由多个爬行工作者组成。爬网内容之间的数据一致性至关重要。因此,为了避免数据不一致和抓取重复,我们的系统会计算网址和文档的校验和,并将其与?URL文档校验和数据存储,分别。

除了重复数据删除之外,为了通过容错条件确保数据一致性,所有服务器都可以定期将其状态检查点到备份服务,例如 Amazon S3 或离线磁盘。

文章来源:https://blog.csdn.net/ddnosh/article/details/135074502
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。