上篇文章介绍了搜索引擎的基本概念,有了大致的认识,本文说下搜索引擎实现上的一些问题。
搜索引擎组成
- 抓取系统:负责对互联网信息的搜集,将网页保存到本地,供下游分析、挖掘、建索引使用
- 分析系统:分析query,查询排序
- 索引系统:整理资源,提取特征
- 检索系统:用户query查找,结果展现
离线计算和在线计算
为了确保搜索引擎的响应时间和结果质量,在实现上,搜索引擎分为离线计算和在线计算。
离线计算进行数据存储、分析、索引;在线计算负责请求响应、检索匹配、结果展现。
离线计算:
- 信息过滤、索引分层:根据网页特征和用户行为,减少需要被检索的网页数量
- 反链和pagerank计算:根据网页链接关系,计算排序所需要的网页特征
- 用户行为挖掘:根据用户点击、会话记录,将用户行为反馈到线上结果
- 建库:存储海量网页内容,提取网页特征,设计高效检索的索引(倒排索引、MapReduce)
- 高并发低延迟的分布式系统
- 吞吐量高
- 稳定性强
- 开发运维效率快
- 实现上涉及到服务数据的分层和冗余,请求的调度,数据的缓存
架构思想
搜索引擎的架构适用于高并发、大数据、低延迟等类似系统,对其有借鉴意义。
- 基本方针:分而治之
- 具体实现:分布式计算
- 系统结构:服务分层、逐层汇聚
- 业务管理:按相关性,进行系统分组
结构图
为了不涉及泄密,该图尽量简化抽象。
该图显示了在线检索系统的架构图,实际中每个节点都是分布式部署的多份服务,数据会进行垂直/水平的拆分,服务会进行分组。
各节点功能的介绍不再详述了,以免涉密,读者自行想象。