爬虫系统中的front-queue和back-queue

上课问老师,老师说这些queue就是数据结构的queue在内存中(可能会加上write ahead log),但还是不明白这些queue是怎么在多台机器上合作的,

  1. 是需要根据什么key partition front queues 和 back queues (single host queues)吗?
  2. 如果一台机器挂掉了,怎么恢复?我现在不管什么设计题目都先考虑挂掉了怎么恢复,感觉什么东西, cache, queue, database都需要一个容错机制,这是正确的思路吗? 还是病得治?

假设有数万个single host queue,如何在O(N)复杂度下找到符合频率要求的网址

  1. 这个用heap选择queue没看懂…… 目的是什么?为什么要找一定频率的网址?

谢谢!

  1. Front Queue 和 Back Queue 如果一定要分到多台机器就按照 Priority 和 Host ID 来分,不要把问题想太复杂了,这个 URL Frontier 里存储的 URL 总量不是很大,因为只存正要去处理的 URL,假设100k 这个量级吧,一共有用不了多少内存,单机可能都够了。
  2. 考虑机器宕机的情况,就用 Write-ahead Log 恢复状态就好了。容灾是要考虑的。
  3. 我们要从一堆 Queue 里找到一个可以爬取的 URL(最近爬过的需要等一段时间再爬)。使用 Heap 存好每个 Queue 下次能爬的时间戳。每次读取的时候,找一个最老的时间戳看看是不是一个过去的时间,如果是,就爬,如果不是,就等(因为如果最老的时间戳也在未来,更新的时间戳就一定在未来)。
1 个赞