文档更新于 2.1.4 版本发布之际,很高兴和大家分享 Milvus 的新变化和产品的成长。
Zilliz 合伙人兼技术总监 栾小凡
(资料图片)
继年初发布 Milvus 2.0 版本之后,在数百位 Milvus 社区贡献者六个月的共同努力下,我们在早些时候发布了 Milvus 2.1 版本,经过两个月的数次迭代,版本趋于稳定,被国内外头部厂商信任和选择使用。
在此次大版本更新中,最为重要的两个关键词莫过于:易用性和性能。
为了能够打通算法工程师笔记本到海量向量召回生产场景的“最后一公里”,在这个令人激动的版本中,我们除了在程序性能、可扩展性、安全性、可观测性方面做出了诸多改进之外,还增加了以下新特性:字符串数据类型、Kafka 消息队列、Embedded 方式运行 Milvus。
相较于传统 KNN 检索,Milvus 此前提供的 ANN 检索方式虽然已经带来了质的飞跃。但是,当用户面向亿级大规模向量数据的召回场景时,吞吐量和延迟依旧存在很大的挑战。
在 Milvus 2.1 中,我们主要进行了五个方面的功能改进和性能提升。
在 Milvus 2.1 中,我们设计了全新的路由协议,并在检索链路中去除了对消息队列的依赖,让小数据集场景下的检索延迟得到了大幅降低。结果显示,当前版本的 Milvus 在百万数据规模的测试中,延迟能够达到 5ms 左右,足以满足搜索、推荐等在线关键链路对于延迟的苛刻要求。
在 Milvus 2.1 中,我们对并发模型也进行了调整。在当前版本中,我们引入了新的代价评估模型和并发调度器。实现了两个关键能力:并发控制和小查询合并。
前者保障了我们既不会存在大量并发请求争抢 CPU 和缓存资源的情况,也不会因为并发太少而导致 CPU 无法被完全利用;后者则是通过在调度器层面智能地合并请求参数一致的小 nq 查询,能够解决在查询 nq 较小、并发又非常高的场景下 Milvus 的性能压力。在这个场景下,业务不需要修改任何一行代码就能够获得 3.2 倍的性能提升。
完整的性能测试报告目前已经在官网公开:《Milvus 2.1 Benchmark Test Report》。
在 Milvus 2.1 中,我们引入了内存多副本机制。除了能够提升系统在小数据规模下的扩展性和可用性之外,还能够解决读 QPS 较高场景下的性能压力。
这个新机制类似传统数据库中的只读副本功能,能够通过加机器来简单实现系统的横向扩展。特别适合众多向量检索应用场景中的推荐系统应用场景,满足常规推荐系统在小数据集场景下提供远超单机性能限制的 QPS 的需求。
在接下来的版本演进中,我们将基于多副本机制进一步实现 Hedged Read 机制,让系统能够在“故障恢复场景”下避开有问题的副本,快速访问数据和功能正常的副本,充分利用内存冗余提升系统的可用性。