网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有很是优异的吞吐量和抓取性能并提供了大量的配置定制选项。因为网络爬虫只负责网络资源的抓取,因此,须要一个分布式搜索引擎,用来对网络爬虫抓取到的网络资源进行实时的索引和搜索。数据库
搜 索引擎架构在ElasticSearch之上,是一个典型的分布式在线实时交互查询架构,无单点故障,高伸缩、高可用。对大量信息的索引与搜索均可以在近 乎实时的状况下完成,可以快速实时搜索数十亿的文件以及PB级的数据,同时提供了全方面的选项,能够对该引擎的几乎每一个方面进行定制。支持RESTful 的API,可使用JSON经过HTTP调用它的各类功能,包括搜索、分析与监控。此外,还为Java、PHP、Perl、Python以及Ruby等各 种语言提供了原生的客户端类库。网络
网络爬虫经过将抓取到的数据进行结构化提取以后提交给搜索引擎进行索引,以供查询分析使用。因为搜索引擎的设计目标在于近乎实时的复杂的交互式查询,因此搜索引擎并不保存索引网页的原始内容,所以,须要一个近乎实时的分布式数据库来存储网页的原始内容。架构
分布式数据库架构在Hbase+Hadoop之上,是一个典型的分布式在线实时随机读写架构。极强的水平伸缩性,支持数十亿的行和数百万的列,可以对网络爬虫提交的数据进行实时写入,并能配合搜索引擎,根据搜索结果实时获取数据。分布式
网 络爬虫、分布式数据库、搜索引擎均运行在普通商业硬件构成的集群上。集群采用分布式架构,能扩展到成千上万台机器,具备容错机制,部分机器节点发生故障不 会形成数据丢失也不会致使计算任务失败。不但高可用,当节点发生故障时能迅速进行故障转移,并且高伸缩,只须要简单地增长机器就能水平线性伸缩、提高数据 存储容量和计算速度。oop
网络爬虫、分布式数据库、搜索引擎之间的关系:性能
一、网络爬虫将抓取到的HTML页面解析完成以后,把解析出的数据加入缓冲区队列,由其余两个线程负责处理数据,一个线程负责将数据保存到分布式数据库,一个线程负责将数据提交到搜索引擎进行索引。搜索引擎
二、搜索引擎处理用户的搜索条件,并将搜索结果返回给用户,若是用户查看网页快照,则从分布式数据库中获取网页的原始内容。spa
总体架构以下图所示:线程
爬虫集群、分布式数据库集群、搜索引擎集群在物理部署上,能够部署到同一个硬件集群上,也能够分开部署,造成1-3个硬件集群。设计
网络爬虫集群有一个专门的网络爬虫配置管理系统来负责爬虫的配置和管理,以下图所示:
搜 索引擎经过分片(shard)和副本(replica)实现了高性能、高伸缩和高可用。分片技术为大规模并行索引和搜索提供了支持,极大地提升了索引和搜 索的性能,极大地提升了水平扩展能力;副本技术为数据提供冗余,部分机器故障不影响系统的正常使用,保证了系统的持续高可用。
有2个分片和3份副本的索引结构以下所示:
一个完整的索引被切分为0和1两个独立部分,每一部分都有2个副本,即下面的灰色部分。
在 生产环境中,随着数据规模的增大,只需简单地增长硬件机器节点便可,搜索引擎会自动地调整分片数以适应硬件的增长,当部分节点退役的时候,搜索引擎也会自 动调整分片数以适应硬件的减小,同时能够根据硬件的可靠性水平及存储容量的变化随时更改副本数,这一切都是动态的,不须要重启集群,这也是高可用的重要保 障。