Google搜索引擎架构研究

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Google搜索引擎架构研究

【摘要】 google做为世界上最成功的网络公司之一,以其巨大,快速的搜索引擎而著名。但很少有人了解能了解如何将数万台pc组织成为一个强大的,可靠的,可扩展的分布式系统。本文简要介绍的google的主要后台架构gfs,mapreduce和bigtable。

【关键词】 google gfs mapreduce bigtable

1 google要解决的问题

(1)web是非常巨大的,并且以指数级别在增长。

(2)web中存在不同形式的资源:

word,html,pdf,ascii,images

(3)检索时间要极短不能让用户等待。

(4)各种民族各种语言不同,需要不同的分词方法。

(5)系统能够每天承受每天上亿次的检索。

(6)优化结果的排序规则,把用户最需要的信息展现在最前面。

2 google的分布式设计结构

google的分布式设计是一项伟大的设计,它建立在上万台计算机上。面的上万台的复杂系统结构google在设计系统的开始就有一个假设:“机器是会出问题的。”“容许机器出问题,但机器必需自动跳过或自动修复这些问题。”如图1所示,是一张google分布式设计的基本结构图。

2.1 抓取部分

url server:存储url列表,这些url都是将要被抓取的对象。

crawler:一组进行并行检索的爬虫程序,每个爬虫都有自己的dns缓冲池,并且能够在同一时间打开300个网络连接。

store server:压缩并且存储爬虫爬取来的网易。

repository:包含每个网页的全部信息,每个文档都被标记为docid,length,url。

indexer:解压缩文档并且解析每个文档,并把其中的连接存储在anchors中。

anchors:专门存储解析而来的新的连接。

url resolver:把相对路径url转换为绝对路径的url。

其中,repository是压缩存储的,压缩率一般超过60%。

2.2 索引部分

url resover:将绝对路径的url映射为docid并且存储在doc index中,将anchor text存储到barrels。

indexer:解析文档,并且将倒排表分布到barrels中。

barrels:存储倒排表,并且对倒排表进行排序。

lexicon:内存中的hash表,左项为wordid,右项为指向其应倒排表的指针。

sorter:创建倒排索引。

2.3 检索部分

barrels:包含两种不同的barrels。短的barrel只包含标题和连接的倒排表,长得barrel存储全部内容的倒排表。

seacher:首先将用户的搜索词送入lexicon,找到相应barrel

后,再在barrel中进行检索,如果检索到,会返回docid,然后将这些docid送入doc index进行检索,并得到最终的结果。

3 google文件系统

每个操作系统都有自己的文件系统,例如windows下常见的

fat32,ntfs。linux下的ext2,ext3.然而gfs(google file system)是一种非常特殊可扩展的分布式文件系统,适用于大型的,分布式的、对大量数据进行访问的应用,它允许于普通硬件上,单提供不间断监控、错误检查、容错技术和自动回复等功能。可以给用户提供总体性能较高的服务。

在gfs中存有海量数据,一般一个文件会有几个gb大,数据集一般能有几个tb大。不能按照普通块大小进行文件操作,否则会引发i/o阻塞,所以必须重新设定块大小。gfs中每个块得大小为64mb。

4 mapreduce

在搜索引擎进行索引的过程中,需要处理大量数据,并且产生更多的新数据,在分布式环境下,会有上千台计算机工作,如何在这种大规模环境下工作,就是mapreduce需要具体解决的问题。

5 bigtable

因为google体系结构中存在许多半结构化的数据,如url,内容,metadata,链接,anchors,pagerank,所以要设计一个能运行与分布式式环境下的数据库存储结构,这种特殊的数据库就是bigtable。

除此之外还有用户数据,用户喜好设定数据,最近的查询/检索结果,并且还有一些地理位置信息,如商店、饭馆、道路、卫星图像、用户的注释等。这些数据规模是巨大的,有上十亿的url,并且每秒钟要承受上千次的查询,并且同样要求提供100tb+的卫星图像数据。

相对于商业数据库而言数据规模还是太大了,而且花费太高,自己设计底层功能对帮助改善性能还是很大的。

有了bigtable,程序员操作一个构建于上万台服务器的数据库,如同操作本地数据库一样,完全不用理会其背后封装的底层操作,使用mapreduce,就可以实现从一个分部式系统中提取数据并进行分布式计算。

gfs为海量数据操纵,容灾提供了廉价、可靠的手段,mapreduce 则为gfs和bigtable的大量数据操作提供了便捷的方式,而bigtable数据库则在忽略商用数据库事务特性的基础上提供了比

商用数据容量更大并发量更大的半结构化数据存储和访问能力。三者有机结合构成了google后台架构的核心。

相关文档
最新文档