tup2王鹏云:实时搜索架构分析
Post on 27-May-2015
1.185 Views
Preview:
TRANSCRIPT
内容提要
• 初识实时搜索• 搜索系统的基础知识• 传统搜索和实时搜索的区别• 实时搜索系统架构• 实时搜索的难点• 实时搜索开源工具
初识实时搜索
• 实时搜索不是新鲜事物– 新闻搜索,社区搜索……– 微博火爆让实时搜索成为热点
• 商业价值– 新信息聚合和放大– 热门话题和趋势分析– 搜索广告
• 主要实时搜索引擎– 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
queueparallel search
High-level searcher
result data
ui
Internet
架构设计要点
• 信息获取– Push API ( preferred )– Spider 抓取
• 定向 + 制导式抓取• 模板 + 启发式信息提取
– 队列• 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
top related