【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

Reddit 搜索模块发展简史

  • 2017-09-20
  • 本文字数:2215 字

    阅读完需:约 7 分钟

Reddit 的 CTO Chris Slowe、工程副总裁 Nick Caldwell 和工程总监 Luis Bitencourt-Emilio 在 Reddit 网站上披露了 Reddit 搜索模块的发展史。以下内容翻译自博客内容,查看原文 The Search for Better Search at Reddit

在过去,新来的工程师总会问:“什么时候可以把我们的搜索引擎弄好?”在今年之前,我们的答案通常是:“到 5 楼去问问搜索引擎团队吧。”但实际上到 5 楼的电梯按钮根本不管用,而且根本不存在什么搜索引擎团队。

但时代在改变。我们现在很高兴地宣布,Reddit 新的搜索模块诞生了。在过去几周,它已经承担了 Reddit 50% 的搜索流量,提供了将近 5 亿次搜索。现在我们很有信心可以让它承担起 100% 的流量,我们也希望你们能够喜欢这样更快也更稳定的搜索结果!

我们在 Reddit 开辟了一个与搜索相关的产品单元,并由工程总监 Luis 领导该产品。我们也意识到这些技术对 Reddit 的未来来说是至关重要的。我们的平台拥有世界上最有趣的内容,包括 2.5 亿个帖子,而且每天都在增长,但苦于难以对这些内容进行搜索。通过改善搜索体验,用户就可以直接在主页上定制想阅读的内容。

Reddit 搜索模块简史

做好搜索不是件轻而易举的事情,在过去的 12 年中,我们的搜索架构经历了 6 次技术栈演化。

  • 2005 年,联合创始人(现在的 CEO)Steve Huffman 开始使用 PostgresSQL 的 tsearch2。那个时候一切都还很简单,用 Postgres 就足够了。Postgres 能够做很多事情,它的触发器真的很好用。不过它的缺点是不够灵活,我们很快就发现其中的少部分搜索会影响到其他大部分的查询操作。
  • 2007 年,工程元老(现在的 CTO)Chris Slowe 使用 PyLucene 重新实现了搜索模块。它是一个单进程的 Python RPC 服务器,建立在 TCP 之上,支持多线程。最初的版本支持搜索帖子的标题和评论,Lucene 索引文件单独保存。在这一时期我们还没有迁移到 AWS 上,而且确实也考虑过使用 Google Search Appliance 。这一版本相对灵活,但伸缩性比较差。
  • 2008 年,Reddit 的三号员工(现在是搜索工程师)David King 使用 Solr 重新实现了搜索模块。他自己开发了一个叫作 pysolr 的工具,将最新的文档通过 XML 格式传给 Solr,然后将响应封装成我们的查询模型可以识别的格式。最初版本不支持搜索评论,不过后来支持了。
  • 2010 年,David 使用 IndexTank 代替了 Solr。网站流量一直在增长,我们的 PV 达到了每月十亿的级别,而我们只有四个工程师在后面支撑。我们不断添加 Postgre 数据库作为读副本,添加缓存,还用上了早期版本的 Cassandra ,但是搜索体验仍然很糟糕。
  • 2012 年,LinkedIn 关闭了 IndexTank 项目,于是 Keith Mitchell 开始使用 CloudSearch。在 LinkedIn 收购 IndexTank 并将其关闭之后,我们不得不迁移到 AWS CloudSearch 上。后来我们又从旧的 AWS CloudSearch 迁移到新的 CloudSearch 上,但仍然存在性能问题,有将近三分之一的查询无法在 5 秒钟内完成,导致出现搜索错误页面。
  • 现在,我们使用了 Lucidworks 的 Fusion!我们要确保搜索模块能够满足三个方面的要求:快速、伸缩性和相关性。我们与来自 Lucidworks 的搜索专家合作,他们当中有好几位是 Solr 项目的贡献者。

数据摄取(ingest)

在进行搜索系统迁移的过程中,最大的挑战莫过于更新索引管道了。在进行第一次尝试时,我们为了加快速度,直接使用了我们的遗留 ETL 系统,这个系统由 Jenkins Azkaban 组成,我们在上面运行很多 Hive 查询。从下图可以看出,将多个数据源并入单个点进行索引比我们预期的要复杂得多。

在进行第二次尝试时,我们使用了更简单的方案,也得到了更好的结果。我们把整个管道分成了四个简单地 Hive 查询,在索引帖子方面提升了 33% 的速度。另一方面,我们只索引新创建的帖子,同时实时地更新投票和评论的相关度。

提升相关性

低相关度的搜索是没有意义的。在发布搜索系统的时候,我们的主要目标就是要保证搜索结果的相关性不受影响。

我们将新系统和旧系统的搜索结果页面的点击率进行了对比。一个完美的搜索引擎,它提供的搜索结果(排名靠前的部分)会有 100% 的点击率。当然,我们知道完美的搜索引擎是不存在的,所以我们使用 Mean Reciprocal Rank Discounted Cumulative Gain 算法来对比搜索结果的质量。

从图中可以看出,Fusion 的线条形状更锐利,可见我们在相关度方面还有很大提升的空间,而且可以进行个性定制、机器学习以及查询优化和重写。

发布推广

在解决了数据摄取和相关度问题之后,我们要让更多的 Reddit 用户使用它。来自社区的反馈对我们来说是非常有价值的,他们发现了一些表层的 bug 和一些不常见的问题。刚开始我们只让 1% 的用户使用我们的新系统,然后是 5%、10%、25%,在发布 GA 版本的时候是 50%。

我们可以很自信地说 Reddit 现在的搜索模块比以往任何时候都要好。对 Reddit 所有的内容进行重新索引只需要 5 个小时(之前是 11 个小时),而且我们还持续更新索引。错误率下降了两个数量级,99% 的搜索都能在 500 毫秒内完成。机器数量从原先的 200 多台下降到 30 多台,我们因此节约了很多成本。

搜索的未来

我们希望新的搜索模块能够让大家更容易地在 Reddit 上找到自己感兴趣的内容。但我们不会止步于此,做好搜索只是我们迈出的第一步,我们希望在个性化和相关性方面给 Reddit 用户带来更好的体验。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-09-20 19:001647
用户头像

发布了 322 篇内容, 共 134.5 次阅读, 收获喜欢 144 次。

关注

评论

发布
暂无评论
发现更多内容

机器学习笔记之:Matrix Vector Multiplication

Nydia

谈谈我所理解的科幻「-28/28」

道伟

28天写作

面试时遇到一致性哈希算法这样回答会让面试官眼前一亮

中间件兴趣圈

负载均衡 面试 一致性哈希

redis分布式锁的这些坑,我怀疑你是假的开发

华为云开发者联盟

redis 分布式 分布式锁 服务器 value

使用V8和node轻松profile分析nodejs应用程序

程序那些事

性能优化 Profile nodejs 性能分析 程序那些事

下不了的开人的手

Ian哥

28天写作

Linux 文件搜索神器 find 实战详解,建议收藏!

鞋子特大号

Linux find

CDN加速原理的那些事

智能汽车颠覆世界!(28天写作 Day28/28)

mtfelix

28天写作 智能汽车 未来世界

一款基于 Web 的通用数据管理工具(转载)

BinTools图尔兹

数据库 运维 开发工具 dba 数据管理工具

终于搞懂了Python模块之间的相互引用问题

华为云开发者联盟

Python 路径 代码 模块

【无偿分享】史上最全Python学习大礼包

sum56

Python 学习 学习方法 python 爬虫 资料整理

怎么一本正经地秀技

codevald

Java jdk

“嗖”一下28 天过去啦,我们都在交作业!

李忠良

28天写作

28天写作复盘

一笑

28天写作

养成好习惯,需要的不只是意志力

Justin

习惯养成 碎碎念 28天写作

长篇总结之JavaScript,巩固前端基础

我是哪吒

JavaScript 程序员 面试 大前端 2月春节不断更

CSS开发过程中的20个快速提升技巧

华为云开发者联盟

CSS

深度集成 Flink: Apache Iceberg 0.11.0 最新功能解读

Apache Flink

flink

28天瞎写的第二百三十八天:这一年干了啥?

树上

28天写作

有用的信息安全资质查询网站大全

石君

信息安全 28天写作

浪潮云洲工业互联网平台创新实践,受权威机构关注!

浪潮云

工业互联网

天天向上跑分模式介绍开发

luluhulian

如果非要在多线程中使用ArrayList会发生什么?

看山

线程安全

28天写作

lidaobing

28天写作

2021年的十五个DevOps趋势预测

禅道项目管理

DevOps 微服务 自动化 趋势

【Linux系统】一个常驻进程问题的再次分析

程序员架构进阶

Linux 七日更 28天写作 2月春节不断更 共享内存

MyBatis入门

小马哥

Java mybatis 七日更 2月春节不断更

看KubeEdge携手K8S,如何管理中国高速公路上的10万边缘节点

华为云开发者联盟

Kubernetes 微服务 kubeedge 边缘

IDEA永久注册码来了!!!(支持2020.3.1版本)

程序员生活志

IDEA

工业绿色哪家强?3D可视化盾构机构建隧道,推动设备预测性运维

一只数据鲸鱼

物联网 数据可视化 绿色交通 绿色工业 盾构机

Reddit搜索模块发展简史_语言 & 开发_Reddit_InfoQ精选文章