Milvus 2.3.0 已经发布有一段时间了,正如二选一的选择题总会让人陷入纠结一般,不少社区用户反馈对于选择 Milvus 2.2.x 还是 Milvus 2.3.x 犹豫不已。
对此,我们的回答是:强烈建议升级至 Milvus 2.3.x 版本。
为什么?在回答此问题之前,先回顾一下近一年来业界发生了哪些变化:首先最大的变化是 AGI 时代的到来引爆了向量数据库赛道,带来了全新的用户群体和多样化的场景需求。与此同时,创业者们似乎也在一夜之间发现了向量数据库的蓝海,纷纷投身这个热门赛道,新用户们穿梭在鱼龙混杂的产品中难以抉择。
在此背景下,Milvus 2.3.0 版本正式发布,并将于近期更新至 2.3.1。接下来,我们将从技术选型、开发体验、运维可靠三个角度分别说明强烈推荐大家使用或升级至 Milvus 2.3.x 版本的原因。
01.
技术选型中性能、成本、扩展性是重点
对于向量数据库来说,用户最关心的莫过于性能、成本和扩展性。
Milvus 2.x 从 Day 1 开始就将扩展性作为设计的第一优先级,在众多用户环境中落地了十亿至百亿级别场景。不止如此,对于 Milvus 来说,扩展性不仅仅意味着支持百亿级别向量,而是支持用户无缝丝滑地从百万级过渡到百亿级,这背后离不开 Milvus 云原生、存算分离的设计支持。
当然,性能和成本两者很多时候不可兼得,只能在其中做取舍。因此,我们本着为用户负责的态度提醒大家:目前 Milvus 也不能同时解决这两个问题,但 Milvus 能做到的是给用户提供更多的选择。
- 计算角度:Milvus 2.3.x 为用户提供了 GPU、X86、ARM 多种计算选型
对于追求极致性能的用户而言,Milvus 2.3.x 提供了 GPU 版本,其中 GPU 索引经过 Nvidia 工程师的优化,可以很好地适配 GPU,性能呈现比 CPU 版本快 3 - 10 倍,不过,GPU 成本相对于 CPU 而言更高。
对于成本较敏感的用户, Milvus 2.3.x 提供了 ARM64 版,相对于 X86 版本成本更低,但性能上有所下降。由于Android 和 iPhone 都是基于 ARM 的架构,有兴趣的同学可以试着在手机上做一个 Milvus 手机 App。
- 存储角度:Milvus 2.3.x 增加了 MMap 功能
通过将数据加载到本地磁盘再将磁盘 MMap 到内存的方案提升单机数据的容量,经过测试,使用 MMap 技术后单机数据容量提升了 1 倍而性能下降在 20% 以内,大大节约了整体成本,欢迎有需求的用户试用此功能。在 Milvus 2.3.1 版本中,我们将继续优化 MMap 功能,单机数据容量有望最高提升 20 倍。
02.
开发体验,几行代码快速实现原型
通常而言,如果一个数据库能够实现向量的增删改查,就满足了向量数据库的基本功能。但这就够了吗?
单从查询来说,用户会有 topk 向量的查询,有向量距离在某个范围内的查询,还会有根据属性过滤数据的需求,且对于向量距离的计算方式有 IP、Cosine 等多种计算需求,以及通过迭代器的方式批量获取数据等。此外,用户对于 QPS、稳定性、索引多样、写入等方面还有各种需求,举个例子,对于写入来说,存在实时写入、更新、批量导入、批量快速删除等诉求。
Milvus 在 2.3.x 中为上述场景增强了 API,满足了用户不同场景下的快速开发需求。例如 upsert 功能,我们能为用户提供 insert 或 update 的功能,在用户有数据覆盖的需求时,仅需一行代码即可满足需求,不需要进行查询、检查、再写入这些繁琐步骤。又例如 ScaNN 索引,我们为用户在 HNSW 之外提供了性能更强劲的索引。
Milvus 作为基础架构中的一环,与其他产品做数据集成是必不可少的能力。社区开源了 Milvus/ES/Faiss 到 Milvus 的迁移工具 https://github.com/zilliztech/milvus-migration, Milvus 增量订阅 https://github.com/zilliztech/milvus-cdc,可以帮助用户快速实现数据集成的需求。
03.
运维可靠,秒级故障恢复
在生产环境中运维 Milvus,稳定性和扩缩容一定是排在最前面的两个选项。其中,稳定性是数据库产品的基石,扩缩容能力是业务增长和降本增效的基础。在近一年多的产品迭代过程中,Milvus 持续不断地为用户提供更稳定、扩展性更强的产品。
Milvus 在 2.1.x 中增加了内存多副本功能,大大缓解了用户对于稳定性的焦虑;在 2.2.x 中增加了资源组故障隔离能力;2.3.x 又在此基础之上增加了 Look Aside Loadbalancer 能力,能够在秒级感知到节点上下线,即能够快速发现故障切换流量,也能够快速感知到副本上线,扩展资源。
除此之外, Milvus 2.3 还大幅优化了系统整体的稳定性,包括:更好的内存控制和管理、滚动升级的能力增强、单集群支持的表数目大幅提升等优化。
04.
Q&A 时间
1. Milvus 从 2.2.x 升级至 2.3.x 的最大变化是什么?
如果用一句话来总结,那就是使用的场景更加丰富了。具体可以从两个方面来体现,即部署环境和用户的使用感。
例如,从部署环境来看,Milvus 原来只支持 X86 架构的 CPU,版本升级后,不仅可以支持 GPU,还能够支持 ARM 架构的 CPU。前面已经提过,这里不多做赘述。
至于用户的使用感,举个例子查询。原本进行查询的时候,Milvus 存在一定的限制,只能查询 1 万多条数据,而 Milvus 2.3 的参数是可配的,对自己有信心的用户可以将参数调得更大一些。此外,Milvus 2.X 版本只支持 top k,无论向量的距离是多少,都会一股脑返给 topk,现在则可以根据距离、长度进行过滤。总之,类似的场景还有很多,在这里就不逐个列举了。
2. Milvus 2.3.x 开发的周期似乎有些漫长,这中间是遇到了特别困难的事情吗?
确实,Milvus 2.3.x 的开发周期比较长,最初团队是计划 4 月份左右发布,当时的功能其实都已经做得差不多了。不过,在从 3 月至 4 月的时间周期中,市场和行业发生了巨大变化,随之而来的是社区用户的需求的变化。当时,团队不得不面临“二选一”的难题:是尽快满足用户的需求还是先发布 Milvus 2.3.x 再逐步维护升级?
为此,我们内部进行过多次讨论甚至辩论,最终还是坚持将用户需求放在第一位。同时,为了给大家带来更好的用户体验,我们决定把一些原本计划放在 Milvus 2.3.x 版本的重要功能和社区呼声很高的功能先搬到 2.2.x 版本。所以大家可以看到,2.2.x 迭代了很多小版本。
3. Milvus 2.3.x 后续有哪些规划?
向量数据库作为一个新兴技术,还处在不断迭代的过程中。未来, Milvus 的版本更新会始终遵循更多新特性、更稳定、更高效的原则。后续,Milvus 2.3.x 还会引入表达式删除、Azure 云部署支持、Array、默认值/Null 值优化、动态增列等优化,助力 AIGC 业务落地生产,也希望社区的朋友可以积极使用并反馈需求和问题。
本文作者
焦恩伟 Zilliz 首席工程师