Uber 搜索基础设施升级:从 Apache Lucene 8.0 到 9.5
Uber 工程团队最近宣布对其搜索基础设施进行了升级,从 Apache Lucene 8.0 迁移到 9.5 版本。此次升级显著提升了 Uber 各服务的搜索能力、性能和效率。
升级背景与团队
此次升级由 Uber 搜索平台和数据工程团队的 Anand Kotriwal、Aparajita Pandey、Charu Jain 和 Yupeng Fu 共同完成,并在博客文章中详细阐述了升级过程。Uber 的搜索平台基于一个坚实的架构,包括服务层(读取路径)和摄入层(写入路径),以及离线处理组件。
搜索平台架构
服务层:处理用户查询并从 Lucene 索引中检索信息。它由两部分组成:
- 路由服务:将传入查询定向到适当的搜索节点,并管理负载均衡。
- 搜索服务:针对 Lucene 索引执行查询,实时检索结果。
- 摄入层:在数据发生变化时更新 Lucene 索引。摄入服务由 Apache Flink 驱动,处理实时更新以确保搜索索引保持最新。
- 离线处理:Uber 使用 离线作业(Apache Spark 任务)处理批量索引创建和重建,高效处理大量数据以构建或重建 Lucene 索引。
升级过程
工程团队在一个独立的功能分支中进行更改,涉及超过 400 个文件,这些文件与当前代码库不兼容。为了管理这一复杂性,团队选择了分阶段推出 Lucene 更新。他们首先将其部署到优先级较低的内部用例,随后逐步扩展到更高优先级的服务。整个升级过程耗时约六个月,包括全面的代码审查、验证、与客户团队的协作以及分阶段推出。
Apache Lucene 简介
Apache Lucene 是一个基于 Java 的搜索引擎库,支持多种搜索需求,包括结构化搜索、全文搜索、分面搜索、最近邻搜索、拼写校正和查询建议。其子项目 PyLucene 提供了 Lucene Core 的 Python 绑定。最近,Apache Lucene 发布了版本 10,新增了 IndexInput 预取 API、对文档值的稀疏索引支持,并升级了 Snowball 字典以提高分词效果。
升级效果
- 搜索速度与效率提升:搜索运行速度更快,资源消耗更少,应用程序用户能够获得更快的查询结果。团队报告称,部分搜索速度比之前提高了 30%,这对使用应用的乘客和司机都有积极影响。
- 基础设施优化:Uber 的搜索请求对 CPU 资源依赖较大,降低 CPU 使用率对基础设施成本至关重要。此次升级减少了 CPU 使用,帮助 Uber 降低了基础设施成本,并减少了服务多个客户所需的机器数量。
总结
Uber 的 Lucene 版本升级凸显了在大型技术驱动型运营中保持核心技术更新的重要性。此次升级不仅提升了搜索性能,还优化了资源利用,为 Uber 的持续发展提供了坚实的技术支持。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。