🚀 免费试用 Zilliz Cloud,完全托管的 Milvus,体验 10 倍的性能提升!立即试用>

milvus-logo
LFAI
  • Home
  • Blog
  • SmartNews 的故事--从 Milvus 用户到积极贡献者

SmartNews 的故事--从 Milvus 用户到积极贡献者

  • Scenarios
January 20, 2022
Milvus

本文由Angela Ni 翻译。

信息在我们的生活中无处不在。Meta(前身为 Facebook)、Instagram、Twitter 和其他社交媒体平台让信息流变得更加无处不在。因此,处理此类信息流的引擎已成为大多数系统架构的必备功能。然而,作为社交媒体平台和相关应用程序的用户,我想您一定被重复的文章、新闻、备忘录等内容困扰过。重复内容会阻碍信息检索过程,并导致糟糕的用户体验。

对于一个处理信息流的产品来说,如何找到一个灵活的数据处理器,将其无缝集成到系统架构中,从而对相同的新闻或广告进行重复处理,是开发人员的当务之急。

估值20 亿美元SmartNews 是美国估值最高的新闻应用程序公司。值得注意的是,它曾经是开源向量数据库 Milvus 的用户,后来转变为 Milvus 项目的积极贡献者。

本文分享了 SmartNews 的故事,并讲述了它决定为 Milvus 项目做出贡献的原因。

SmartNews 概述

SmartNews 成立于 2012 年,总部位于日本东京。SmartNews 开发的新闻应用程序在日本市场一直名列前茅。SmartNews 是增长最快的新闻应用程序,在美国市场也拥有很高的用户粘度。根据APP Annie 的统计数据,截至 2021 年 7 月底,SmartNews 的月平均会话时长在所有新闻应用程序中排名第一,超过 AppleNews 和 Google News 的累计会话时长。

随着用户基数和黏性的快速增长,SmartNews 在推荐机制和人工智能算法方面面临更多挑战。这些挑战包括在大规模机器学习(ML)中利用海量离散特征、利用向量相似性搜索加速非结构化数据查询等。

2021 年初,SmartNews 的动态广告算法团队向人工智能基础架构团队提出了需要优化广告召回和查询功能的请求。经过两个月的研究,AI 基础架构工程师舒决定使用支持多索引和相似度指标、在线数据更新的开源向量数据库 Milvus。Milvus 受到全球千余家机构的信赖。

SmartNews 广告系统采用了开源向量数据库 Milvus,可从 10 million 规模的数据集中匹配并向用户推荐动态广告。通过这种方式,SmartNews 可以在用户数据和广告数据这两个以前无法匹配的数据集之间建立映射关系。2021 年第二季度,Shu 成功在 Kubernetes 上部署了 Milvus 1.0。了解有关如何部署 Milvus 的更多信息。

img 图像

Milvus 1.0 成功部署后,第一个使用 Milvus 的项目是 SmartNews 广告团队发起的广告召回项目。在初始阶段,广告数据集的规模为百万级。同时,P99 延迟被严格控制在 10 毫秒以内。

2021 年 6 月,舒畅和算法团队的同事们将 Milvus 应用到更多业务场景中,尝试数据聚合和在线数据/索引实时更新。

至此,Milvus 这个开源向量数据库已经在 SmartNews 的广告推荐等多个业务场景中得到应用。

从用户到积极贡献者

在将 Milvus 集成到 Smartnews 产品架构中时,Shu 和其他开发人员提出了热重载、条目 TTL(time-to-live)、条目更新/替换等功能要求。这些也是 Milvus 社区许多用户所希望的功能。因此,SmartNews 人工智能基础架构团队负责人 Dennis Zhao 决定开发并向社区贡献热重载功能。Dennis 认为:"SmartNews 团队一直受益于 Milvus 社区,因此,如果我们有东西可以与社区分享,我们更愿意贡献出来。"

数据重载支持在运行代码的同时进行代码编辑。在数据重载的帮助下,开发人员不再需要在断点处停止或重启应用程序。相反,他们可以直接编辑代码并实时查看结果。

7 月下旬,SmartNews 的工程师 Yusup 提出了利用Collections 别名实现热重载的想法。

创建 Collections 别名指的是为集合指定别名。一个 Collection 可以有多个别名。不过,一个别名最多对应一个 Collection。简单地类比一下 Collection 和储物柜。储物柜和 Collections 一样,都有自己的编号和位置,而且始终保持不变。不过,你可以随时从储物柜中放入或取出不同的东西。同样,Collection 的名称是固定的,但集合中的数据却是动态的。您可以随时插入或删除 Collections 中的向量,因为在 Milvus的预 GA 版本中支持数据删除。

就 SmartNews 广告业务而言,随着新动态广告向量的生成,近 1 亿个向量会被插入或更新。对此有几种解决方案:

  • 解决方案 1:先删除旧数据,再插入新数据。
  • 解决方案 2:为新数据创建新的 Collections。
  • 解决方案 3:使用 Collections 别名。

对于解决方案 1,最直接的缺点之一就是非常耗时,尤其是当要更新的数据集非常庞大时。更新一个亿级别的数据集一般需要几个小时。

至于解决方案 2,问题在于新的 Collections 无法立即用于搜索。也就是说,Collection 在加载过程中是无法搜索的。另外,Milvus 不允许两个 Collection 使用相同的 Collection 名称。切换到新的 Collections 总是需要用户手动修改客户端代码。也就是说,用户每次需要在 Collections 之间切换时,都必须修改参数collection_name 的值。

解决方案 3 将是灵丹妙药。您只需在新的 Collections 中插入新数据,并使用 Collections 别名即可。这样,每次需要切换集合进行搜索时,只需交换集合别名即可。您无需额外修改代码。该解决方案为您省去了前两个解决方案中提到的麻烦。

Yusup 从这个要求出发,帮助整个 SmartNews 团队了解 Milvus 架构。一个半月后,Milvus 项目收到了 Yusup 关于热重载的 PR。而后,伴随着 Milvus 2.0.0-RC7 的发布,这一功能正式上线。

目前,人工智能基础架构团队正在牵头部署 Milvus 2.0,并将所有数据从 Milvus 1.0 逐步迁移到 2.0。

img_collection alias 图像集合别名

支持 Collections 别名可以大大提升用户体验,尤其是对于那些用户请求量极大的大型互联网公司。来自 Milvus 社区的数据工程师李成龙帮助搭建了 Milvus 与 Smartnews 之间的桥梁,他说:"Collection alias 功能源于 Milvus 用户 SmartNews 的真实业务需求。而 SmartNews 向 Milvus 社区贡献了代码。这种互惠行为是开源精神的典范:来自社区,为了社区。我们希望看到更多像 SmartNews 这样的贡献者,共同建设一个更加繁荣的 Milvus 社区。"

"目前,部分广告业务采用 Milvus 作为离线向量数据库。Milvus 2.0 正式发布在即,我们希望可以利用 Milvus 构建更可靠的系统,为更多业务场景提供实时服务。" Dennis 说。

更新:Milvus 2.0 现已全面上市!了解更多

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

扩展阅读