文档更新于 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 倍的性能提升。
完整的性能测试报告目前已经在ag真人官方网官网公开:《milvus 2.1 benchmark test report》。
在 milvus 2.1 中,我们引入了内存多副本机制。除了能够提升系统在小数据规模下的扩展性和可用性之外,还能够解决读 qps 较高场景下的性能压力。
这个新机制类似传统数据库中的只读副本功能,能够通过加机器来简单实现系统的横向扩展。特别适合众多向量检索应用场景中的推荐系统应用场景,满足常规推荐系统在小数据集场景下提供远超单机性能限制的 qps 的需求。
在接下来的版本演进中,我们将基于多副本机制进一步实现 hedged read 机制,让系统能够在“故障恢复场景”下避开有问题的副本,快速访问数据和功能正常的副本,充分利用内存冗余提升系统的可用性。
关键词: