当前位置:文档之家› Google搜索引擎架构研究

Google搜索引擎架构研究

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后台架构的核心。

相关主题