10ms以内检索数亿,为什么微信推荐这么迅速?

在经过调研后,发现已有的解决方案存在以下问题: 

  •  在学术界中,已经存在有成熟并开源的 ANN 搜索库,然而这些搜索库仅仅是作为单机引擎存在,而不能作为高性能、可依赖、可拓展的分布式组件为推荐系统提供服务;
  •  在业界中,大多数的组件都是基于 ANN 搜索库做一层简单的封装,在可拓展、高可用上的表现达不到在线系统的要求;而对于少数在实现上已经较为成熟的分布式检索系统,在功能上却难以做到紧跟业务发展;
  •  而在更新机制上,很多组件都是要么只支持离线更新、要么只支持在线接口更新,无法满足在微信侧小至秒级千数量、大至小时级亿数量的索引更新需求,因此需要可以兼顾近实时更新及离线大批量更新的分布式系统。

基于上述的这些要求以及业内组件的限制,我们借助 WFS 和 Chubby 设计并实现了 SimSvr,它是一个高性能、功能丰富的特征检索组件,具有以下特点:

  •  分布式可伸缩的架构,支持亿级以上的索引量,以及索引的并发加速查询,实现了 10ms 以内检索数亿的索引;
  •  高性能召回引擎,使用了召回性能极佳的 hnswlib 作为首选召回引擎,大部分请求可在 2ms 内完成检索;
  •  集群化管理,集成了完善的数据调度及动态路由功能;
  •  多样的更新机制,支持任务式更新及自动更新,同时也支持全量更新与增量更新,跨越秒级千数量到小时级亿数量的索引更新;
  •  读写分离的机制,在离线利用庞大的计算资源加速构建索引的同时,不影响在线服务的高性能读;
  •  丰富的功能特性,支持轻量 embedding kv 库、单表多索引、多版本索引、过滤器、过期删除等特性。

SimSvr 目前已广泛应用于微信视频号、看一看、搜一搜、微信安全、表情搜索等业务,接下来会阐述 SimSvr 的设计以及如何解决来自于业务的难题。

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章