zhudiandian.com 因为热爱,所以关注!

Web 搜索引擎工作原理和体系结构 搜索引擎索引技术

郑州SEO祝点点

  上一篇我们讲过[【原创】搜索引擎的工作原理和搜索技术是怎样工作的] 现在我们来说说搜索引擎网页的搜集,如果只是为了做些简单的实验,不过上万篇网页的话,许多矛盾都不会出现,可以用最简单的工具(例如wget3)完成。但如果是为了向大规模搜索引擎稳定地提供网页数据,通常需要每天搜集上百万网页,而且是持续进行,情况则要复杂许多,核心是要综合解决效率、质量和“礼貌”的问题。这就是“控制器”的作用。

搜索引擎工作原理图

  所谓效率,在这里就是如何利用尽量少的资源(计算机设备、网络带宽、时间)来完成预定的网页搜集量。在批量搜集的场合,我们通常考虑半个月左右能搜集到的网页,自然是越多越好。由于网页之间存在的独立性,利用许多台计算机同时来做这项工作是一个吸引人的想法。这里需要指出三点:第一,即使是用一台计算机来搜集网页,也应该注意并发性的开发和利用。

  由于从网上抓取一篇网页通常需要秒量级的等待网络通信时间,同时启动多个抓取进程/线程,或者利用操作系统提供的异步通信机制,让多个网络通信时间重叠起来,让网络通信时间和存放网页的磁盘访问时间重叠起来是很有意义的。同时启动抓取进程的数量取决于硬件条件和搜集软件的设计,一般情况下可以上百个,做得好也可能上千个(即上千个进程也不会造成CPU成为瓶颈)。

  在效率问题上应该指出的第二点是并不是设备越多越好。在用若干台计算机形成一个机群的安排下,它们共同分享出口网络带宽,随着设备量的增加,这个网络带宽(或者是周围的某个环境带宽)很快就成为瓶颈。经验表明实际上用不了超过10台计算机。人们曾经有过分布式搜集的想法,即让多台设备分布在网络上的不同位置,从而克服上述带宽瓶颈问题;理论上是对的。

  但对于维护千万到亿量级的搜索引擎来说似乎还用不上,具体实现起来的麻烦会超过可能带来的好处(也许Google那样的针对多个国家用户的巨型搜索引擎需要用这种技术)。影响搜集效率的第三点发生在网络的另一端,即服务器方,它可能来不及提供所需的网页。这除了有些Web服务器所处的网络条件比较差,或者有太多其他人访问外,搜索引擎太频繁对它们发出网页请求也是一个重要原因。落实到技术上,就是要有一个访问策略或者URL规划,不要让搜集器启动的抓取进程都集中在少数几个网站上。

  将搜集活动的关注过分集中在几个网站上,或者在一小段时间里从一个网站抓取太多的网页还可能引起其他的严重后果,即所谓“礼貌”问题。一般来讲,网站的管理人员都很愿意让自己的网页被搜索引擎索引,从而有可能得到更多的访问流量;但这只是问题的一方面。

  问题的另一方面是网站绝不希望由于搜索引擎的“密集”抓取活动阻碍了普通用户通过浏览器的访问,使那些用户得到这个网站访问起来很困难的印象,从而不再光顾。不加控制的网页抓取,给网站造成的现象有时候和制造拒绝服务(DenialofServide,DoS)攻击的黑客造成的现象一样。因此,管理良好的网站常常会有一个监视器运行,监视是否有来源于单个IP地址的过分密集的访问。

  一旦出现这种情况,要么会通告该IP地址的拥有者注意行为,或者会干脆屏蔽来自它的访问,更有甚者,还可能在网上公布该IP地址作为黑名单。因此,适当地规划网页的抓取,限制单位时间内对一个网站抓取网页的数量(例如每天不超过2万个,或者至少每隔30秒才对同一个网站发出下一个网页请求,等等),是大规模搜索引擎必须要认真对待的问题。总之,搜索引擎需要和网站“和睦相处”,它们是相互依存的。

  所谓质量问题,指的是在有限的时间,搜集有限的网页,希望它们尽量是比较“重要”的网页,或者说不要漏掉那些很重要的网页。哪些网页是比较重要的?也是仁者见仁,智者见智的,不可能有一个统一认可的标准。如果让重要性和流行度等同起来,即越多人看过的网页越重要,至少是直觉上有一定道理的。这样,我们可以考虑一个网站从主页开始向下,按照链接的深度将网页组织成一层层的,上层中的网页统计上会比下层的网页重要些。

  这样一种认识通过PageRank得到了加强,即较靠近主页的网页通常PageRank值较高。这样,首先得到尽量多的主页,然后从主页开始的先宽搜索就应该是一个较好的策略。闫宏飞论文[闫宏飞,2002]是支持这种观点的一个工作。

  网页搜集过程中还有一个基本的问题是要保证每个网页不被重复抓取。由于一篇网页可能被多篇网页链接,在spider爬取过程中就可能多次得到该网页的url。于是如果不加检查和控制,网页就会被多次抓取。遇到循环链接的情况,还会使爬取器陷死。解决这个问题的有效方法是使用两个表,unvisited_table和visited_table。前者包含尚未访问的url,后者记录已访问的url。

  系统首先将要搜集的种子url放入unvisited_table,然后spider从其中获取要搜集网页的url,搜集过的网页url放入visited_table中,新解析出的并且不在visited_table中的url加入unvisited_table。此方法简单明了,适合在单个节点上实现。但是当搜集子系统涉及到多个节点的时候,如何避免各个节点之间的重复工作就复杂了,还要考虑网络的通信量、负载平衡、以及单个节点性能瓶颈等问题。

by 祝点点 转载请注明http://zhudiandian.com

标签:搜索引擎原理搜索引擎结构祝运龙郑州SEO
分类:SEO知识| 发布:祝点点| 查看: | 发表时间:2012/5/5
原创文章如转载,请注明:转载自郑州SEO祝点点 http://zhudiandian.com/
本文链接:http://zhudiandian.com/SEO/20120505486.htm

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

郑州SEO祝点点