作者:linggong 2022-11-25 18:49:11
云计算
云原生 通过压测,我们发现某场景下存在milvus的性能提升不上去的问题,并给出基于该场景的解决方案,社区反馈给milvus官方。以下为milvus的设计与压测中遇到的一些问题与解决或跟进方案。
最近用到了向量搜索,所以要对milvus进行压测。同时为了更加深入分析压测中遇到的问题,也对milvus的部分源码与文档进行了走读。其中遇到了一些问题与疑惑,我们也直接与milvus社区或开源贡献者沟通。
通过压测,我们发现某场景下存在milvus的性能提升不上去的问题,并给出基于该场景的解决方案,社区反馈给milvus官方。
以下为milvus的设计与压测中遇到的一些问题与解决或跟进方案。
向量搜索简称ANNS,英文全名:Approximate Nearest Neighbor Search 。大致概念是从一堆向量中找出与某个目标向量距离最近的N个向量。最简单粗暴的搜索方式是暴力搜索,但是可以通过扩增索引的方式加快搜索速度,提升大规模查询的QPS。
当前的向量索引可以分为四大类:基于树的索引、基于图的索引、基于哈希的索引、基于量化的索引。其中图思路由于较高的召回率、较好的性能和较多的后期优化思路,脱颖而出。
milvus(主要针对2.0以上版本)是一款元原生向量数据库,支持向量的插入,ANNS搜索等。Milvus能够很好地应对海量向量数据,它集成了目前在向量相似性计算领域比较知名的几个开源库(Faiss, SPTAG等),通过对数据和硬件算力的合理调度,以获得最优的搜索性能。
官网:https://milvus.io/
数据集概念:
官网给出数据集读取写入例子:https://milvus.io/docs/v2.1.x/example_code.md
数据集查询工具:https://github.com/milvus-io/birdwatcher
以下利用birdwatcher展示collection与segment信息:
以上输出结果,对该工具进行了改造。
具体一个segment在etcd中所有的信息:
、
milvus官网给出的架构图如下:
按照分组又可以分为以下几大类别:
简单介绍下以上各个微服务的功能:
以上可以看出微服务比较多,微服务之间的通信方式主要有以下几种:
以下当前最新版本2.1.4的读流程 ,与网上的读流程版本链路不同,应该是做了改造。
压测版本:milvus-2.1.4
数据维度:512dim
索引:
向量个数 |
索引 |
规格 |
QPS |
99%耗时 |
十万*512dim |
FLAT |
2*(8cpu*16Gi) |
880 |
82ms |
十万*512dim |
FLAT |
2*(16cpu*16Gi) |
1489 |
62ms |
百万*512dim |
FLAT |
2*(16cpu*16Gi) |
240 |
200ms |
千万*512dim |
FLAT |
2*(16CPU*32Gi) |
20 |
1.98s |
规格 |
scheduler.cpuRation |
qps |
2*(8cpu*16Gi) |
20 |
385 |
2*(8cpu*16Gi) |
100 |
768 |
2*(8cpu*16Gi) |
120 |
913 |
2*(8cpu*16Gi) |
140 |
880 |
该参数主要用来评估一个search task的cpu使用情况,该参数越高,预示该task使用cpu越多,调度的时候,多个task去查询的并行数量就会少一些。现在怀疑并行task太多,并不会达到很高的QPS。
milvus并没有公开该参数配置,已经通过issue/enhancement提给milvus社区中了,后续版本应该会有所优化。
跟milvus社区维护人员咨询过该问题,后续还要持续跟进,找出原因并改进。
版本升级后,原有数据不兼容(已有方案)。
比如以下是使用两个 32核 16G:
所以官网也给出建议尽量通过helm去平滑扩容。
经过压测,milvus是可以满足我们当前业务场景的。以上压测中的一些遗留问题,我们还在跟进中,比如:大量growing segment问题,节点扩增等问题。这些问题并不是100%出现的,有些是在我们极端测试条件下才出现的。后续我们还会持续测试,定位原因,并反馈给社区进一步优化。以上压测的索引采用的是FLAT,官方建议我们采用图索引可以取得更高性能。由于我们当前的业务场景要用到FLAT索引,所以当前先基于FLAT索引去压测。后续会用到图索引,也会进行压测。
通过对milvus的压测,顺便了解并学习下milvus的设计。总体来说milvus是一款优秀的云原生向量数据库,它的一些设计理念还是比较先进的,把向量搜索与k8s结合在一起,通过简单的查询节点扩增便可以线性提升向量搜索的性能。对于一款分布式数据库,它实现了读写分离,存算分离。官网给出的文档也比较丰富,工具也比较多,比如:attu,birdwatcher等。
新闻标题:Milvus探究与压测分析
文章地址:http://www.shufengxianlan.com/qtweb/news16/327616.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联