实时搜索架构分析
王鹏云
wangpengyun@gmail.com
@wangpengyun
内容提要
• 初识实时搜索
• 搜索系统的基础知识
• 传统搜索和实时搜索的区别
• 实时搜索系统架构
• 实时搜索的难点
• 实时搜索开源工具
初识实时搜索
• 实时搜索不是新鲜事物
– 新闻搜索,社区搜索……
– 微博火爆让实时搜索成为热点
• 商业价值
– 新信息聚合和放大
– 热门话
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
和趋势分析
– 搜索广告
• 主要实时搜索引擎
– Google 、 bing 、 twitter 、 friendfeed……
搜索系统的基础知识
• Crawling
– 抓取、超链分析
• Indexing
– 内容提取、分词、倒排索引
• Searching
– 查询分析、索引查询
• Ranking
– TF/IDF 、 PageRank 、其他特征
传统搜索和实时搜索的区别
• 结果呈现
– 静态 vs 动态
• 搜索效果
– 相关性 vs 实时性
– PageRank vs 社会化特征
• 数据获取
– 抓取 vs 推送
• 数据分布
– URL 分布 vs 时间分布
实时搜索系统架构图
ram
index A
ram
index B
disk index cur
disk index his A
disk index his B
more……
switch
snapshot/
merge
merge
antispam
searcher
add/modify/del
Push API
Spider
data
Internet
queue
parallel search
High-level
searcher
result data
ui
Internet
架构
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
要点
• 信息获取
– Push API ( preferred )
– Spider 抓取
• 定向 + 制导式抓取
•
模板
个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载
+ 启发式信息提取
– 队列
• Topic 订阅式
• 支持信息重放
– 独立 antispam 模块
• 易于性能扩展
• 快速演进
架构设计要点( cont. )
• 信息删除 / 修改
– 删除做标记(合并或重建时实际删除)
– 修改 = 删除 + 添加
• 内存索引
– 加快索引速
• 边写边读
– 控制内存占用大小
• 写到硬盘( snapshot )
• snapshot 实现?双索引结构
– 防止数据丢失
• redo 日志
• 队列重放
架构设计要点( cont. )
• 库合并( merge )
– 减少库数量,提高性能
– 对内存库, snapshot 和 merge 可合一
– 一定规模拆分出历史库(准静态)
• 历史库
– 按需合并
– 综合考虑:合并频率、库规模、访问量
• 查询合并
– 遍历查询所有库的结果并合并
– 分布式情况下,每个库自带 1 级 searcher , 2 级
searcher 合并所有 1 级的结果
实时搜索的难点
• 快 + 动态,让很多事情变得复杂!
– 架构、算法、运维、升级……
– 考验工程化水平
• Ranking 算法
– 基本 TF/IDF
– 时间因素
– 社会化信息调权
• 信息 anti-spam
– 文本特征过滤
– 社会化特征过滤
– 动态行为特征过滤
实时搜索的难点( cont. )
• 海量规模下
– 数据切分
• 时间 +URL
– Hotspot 问题
• Cache
• Replication
– 索引数据更新
• 分词调整、信息删除 / 修改、库调整……
• 每库独立更新,错峰更新
• Cache warming
实时搜索开源工具
• Zoie
– Lucene-based ,源自 LinkedIn
– 提供了 solr plugin
– 足以应对中小规模的搜索需求
• Sphinx
– 1.10-beta 开始支持实时搜索
– 应用于 craigslist 、 netlog
Thanks!
Q&A
Slide 1
Slide 2
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 10
Slide 11
Slide 12
Slide 13