运行模式

下图展示了运行模式的架构图:

../_images/high-level-arc.png

单进程

Frontera 与 fetcher 在相同的过程中实例化(例如在 Scrapy 中)。要实现这个,需要设置 BACKENDBackend 的子类。这种模式适合那种少量文档并且时间要求不紧的应用。

分布式爬虫

爬虫是分布式的,但后端不是。后端运行在 db worker 中,并通过 message bus 与爬虫通信。

  1. 将爬虫进程中的 BACKEND 设置为 MessageBusBackend
  2. 在 DB worker 中 BACKEND 应该指向 Backend 的子类。
  3. 每个爬虫进程应该有它自己的 SPIDER_PARTITION_ID,值为从0到 SPIDER_FEED_PARTITIONS
  4. 爬虫和 DB worker 都应该将 MESSAGE_BUS 设置为你选择的消息总线类或者其他你自定义的实现。

此模式适用于需要快速获取文档,同时文档的数量相对较小的应用。

分布式爬虫和后端

爬虫和后端都是分布式的。后端分成了两部分: strategy workerdb worker。strategy worker 实例被分配给他们自己的 spider log 部分。

  1. 将爬虫进程中的 BACKEND 设置为 MessageBusBackend
  2. DB workers 和 SW workers 的 BACKEND 应该指向 DistributedBackend 的子类。同时还需要配置您选择的后端。
  3. 每个爬虫进程应该有它自己的 SPIDER_PARTITION_ID,值为从0到 SPIDER_FEED_PARTITIONS。最后一个必须可以被所有 DB worker 实例访问。
  4. 每个 SW worker 应该有自己的 SCORING_PARTITION_ID,值为从0到 SPIDER_LOG_PARTITIONS。最后一个必须可以被所有 SW worker 实例访问。
  5. 爬虫和所有的 worker 都应该将 MESSAGE_BUS 设置为你选择的消息总线类或者其他你自定义的实现。

在这种模式下,只有 Kafka 消息总线、SqlAlchemy 和 Habse 后端是默认支持的。

此模式适用于广度优先抓取和网页数量巨大的情况。