Skip to content

Latest commit

 

History

History
82 lines (42 loc) · 3.84 KB

milvus云化.md

File metadata and controls

82 lines (42 loc) · 3.84 KB

mulvus架构

Milvus 作为一款针对海量特征向量的相似度搜索引擎,在单台服务器上就可以处理十亿级数据规模。而对于百亿或者千亿级数据,则需要具有水平扩展能力的 Milvus 集群来满足对海量向量数据的高性能检索需求。

本文使用了 Mishards 中间件来搭建 Milvus 集群。Mishards 是一个用 Python 开发的 Milvus 集群分片中间件,其内部处理请求转发、读写分离和水平扩展,为用户提供内存和算力可以扩容的 Milvus 实例。详情请参阅 MishardsMilvus集群采用helm chart方式部署在kubernetes集群上,底层管理kubernetes集群为汇智云计算组开发的云平台Rong

集群总体架构

mulvus基于mishards集群架构

01

基本服务组件

Service Founder:服务发现框架,本文采用kubernetes部署Milvus集群,服务发现框架为coredns;

Load balancer: 负载均衡入口,有NodePortingress contoller两种方式;

Mishards node: Mishards节点,该组件无状态,可伸缩;

Write-only Milvus node: 只写milvus节点,只有单个节点且不可伸缩,生成环境中需要采用高可用方案来避免单点故障;

Read-only Milvus node: 只读milvus节点,有状态服务,可以伸缩节点;

Shared File System: 所有Milvus节点使用的共享存储,用于存储数据,需支持ReadWriteMany ,方案中采用 NFS;

Metadata Store: 所有Milvus节点使用该服务存储公共的元数据,方案中使用Mysql ,生成环境中需考虑MySQL高可用方案;

可伸缩组件

  • Mishards
  • Read-only Milvus nodes

此外,可以按需要额外部署mulvus gui组件mulvus-admin,该组件为mulvusweb管理界面。

Mishards组件

Mishards组件负责将上游所有请求进行划分为子请求并且分发至milvus集群各个节点,将milvus集群各个节点的相应结果进行汇总返回给上游。

milvus是个无状态服务,不保存数据或者参与复杂计算,因此该节点不需要很高的计算资源配置。它的主要计算任务是分发请求和汇总子结果,可以通过扩展节点数量来处理大量并发请求。

Milvus所有节点

milvus节点负责增删改查核心操作,需要很高的资源配置。

1)节点的内存必须足够大以避免大量磁盘io操作;

2)节点的cpu配置影响计算性能;

3)可以扩增集群节点来提高系统吞吐量;

优点

1)读写分离

milvus的核心操作为向量插入和向量搜索,向量搜索需要极高的CPUGPU配置,向量插入和其他操作对计算能力要求较低,使用专用的只读节点进行搜索操作,其他操作通过只写节点,读写分离能合理的调配资源配置。

​ 从服务质量出发,当节点处于向量搜索操作时,节点相关的资源会处于满负荷运行状态,不能保证其他操作的服务质量。因此,读写分离能更好的提供高服务质量。

2)水平扩展

​ 可以通过扩展无状态服务Mishards节点数量来处理大量并发请求。

​ 可以通过扩展有状态服务只读milvus节点来提高系统吞吐量,以应对大数据集,低延迟率场景。

milvus部署

milvus集成到ai专用版Rong云平台,包含milvus集群监控管理,部署完ai专用版Rong云平台即部署完milvus集群。

卸载ai专用版Rong云平台即卸载milvus集群。

参考

https://milvus.io/docs/v0.10.4/mishards.md

https://github.com/milvus-io/milvus-helm

https://milvus.io/docs/v0.10.4/overview.md

https://dzone.com/articles/mishards-a-distributed-solution-to-scale-similarit