“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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:001622
用户头像

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

关注

评论

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

首评 | 阿里云顺利完成国内首个云原生安全成熟度评估

阿里巴巴云原生

阿里云 云原生

【云主机】2022年云主机管理软件排行榜

行云管家

云计算 云主机 华为云 移动云 云主机厂商

从入门到一位合格的爬虫师,这几点很重要

开发微hkkf5566

使用 LakeSoul 构建实时机器学习样本库

Geek_a02d1e

机器学习 大数据 开源 新基建 湖仓一体

斐波那契系列

开发微hkkf5566

选择天翼云混合云管理平台的五大理由

天翼云开发者社区

5G+实时云渲染:交互实时云看车革新购车体验

3DCAT实时渲染

5G 汽车之家 汽车 元宇宙 实时云渲染

leetcode 417. Pacific Atlantic Water Flow 太平洋大西洋水流问题

okokabcd

LeetCode 搜索 数据结构与算法

在映客的虚拟KTV里唱了一首“爱你”

ZEGO即构

音视频 虚拟KTV 线上K歌

多张图解,一扫你对多线程问题本质的所有误区

华为云开发者联盟

Java 开发

关于fastjson出现反序列化远程代码执行漏洞的通知

天翼云开发者社区

你的App是信息化时代的还是数字化时代的

FinClip

小程序开发

玩转云端|一文读懂天翼云CDN升级重点

天翼云开发者社区

数字先锋| 天翼云牵手中能融合

天翼云开发者社区

大数据培训Hive到Spark离线计算实践

@零度

spark hive 大数据开发

王者荣耀商城异地多活架构设计

Dean.Zhang

给小白的 PG 容器化部署教程(下)

RadonDB

数据库 postgresql 容器化 RadonDB

Hoo研究院|一文速览风投机构NGC Ventures的加密布局

区块链前沿News

投资 VC Hoo NGC

【LeetCode】 删除二叉搜索树中的节点Java题解

Albert

LeetCode 6月月更

多模态语义检索 | 基于 MetaSpore 快速部署 HuggingFace 预训练模型

Geek_a02d1e

机器学习 深度学习 开源 AI 多模态

好声音不同凡响,泥炭耳机618重磅新品来袭

江湖老铁

服务器运维环境安全体系(上篇)

融云 RongCloud

网络安全

安全高效的云主机批量管理软件是什么?有哪些功能?

行云管家

云主机 云运维

征文投稿丨基于轻量应用服务器搭建Hexo个人博客

阿里云弹性计算

node.js nginx git Hexo 轻量应用服务器

AI“爷青回”:一键找回童年记忆

最新动态

Spring Authorization Server(AS) 从 Mysql 中读取客户端配置、用户

Zhang

Java spring security spring as

员工福利平台:让员工福利更加“鲸彩FUN粽”

鲸品堂

福利 平台

博云容器云产品族:如何实现让“Any APP on Any Kubernetes”?

BoCloud博云

云原生 容器云

融云一图看懂:社死的“谭某某”,霸屏的信息安全

融云 RongCloud

虚拟机哪款好用?多台虚拟机管理用什么软件好?

行云管家

软件 虚拟机 IT运维

撑算力之帆,天翼云助力数字时代逐潮者远航

天翼云开发者社区

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