23

常见分布式应用系统设计图解(七):爬虫搜索系统

 3 years ago
source link: https://www.raychase.net/6327
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

互联网搜索引擎都有爬虫系统,无论是 Google 还是百度。当然这里我们讨论的只是一个极其简单的版本。

对于爬到的资源,我们这里其实讨论的只是文本而已,还有图片、音频、视频这些媒体,如果我们也需要存下来,那就需要专门的媒体服务。对于媒体文件的存放,在之前的文中已经讨论过,这里就不再覆盖了。

AjMnmy2.png!mobile
  • 上半部分是爬取的过程,Page Fetcher 根据 URL 队列里面的事件来去实际的页面中爬取内容。不同的网站可以使用不同的 queue,配合从不同 queue 中 poll 的策略,这样可以合理分配资源,避免对某一个网站投入了太多的资源。爬虫需要解析 robot.txt,也要限制爬取的进程/线程数,保证不会有太多的爬虫访问冲垮网站。
  • DNS Service 其实是一个统一存储域名到 IP 解析服务的组件,这个组件可以缓存下一些 DNS 的查询结果,因为如果单纯地在每次爬取过程中依赖于互联网 DNS 查询,请求量会过大,而且具备大量的重复请求。
  • Dedup(去重)是一个重要的步骤,既包括文档的重复识别,也包括 URL 的重复识别,可以使用一个简单的 checksum 来实现,对于新的网页文本和 URL,分别存到各自的数据库里面。
  • 网页的数据库可以使用 Bigtable 这样适合存放小型文本的存储服务,URL 则可以存放到 KV 数据库中。为了提高查询和比较的效率,checksum 可以缓存在内存中。
  • 对于网页上新(未爬取)的 URL,放到队列中,以便爬虫工作。
  • 下半部分包括了索引的建立,即从查询词到文本内容的索引。也包括了搜索这个行为——Search Service 处理查询语句,查询索引数据,进行过滤和排序,并返回结果,而页面镜像可以从 Document Service 处获取。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK