Milvus - 架构设计详解

Milvus 是一个专为在大规模密集向量数据集上进行相似性搜索而设计的开源向量数据库系统。其架构建立在流行的向量搜索库之上,如 Faiss、HNSW、DiskANN 和 SCANN,能够处理数百万、数十亿甚至数万亿的向量数据。为了全面了解 Milvus 架构,我们首先需要熟悉嵌入检索的基本原理。

Milvus 的核心功能

Milvus 支持多种高级功能,包括数据分片、流式数据摄取、动态模式、结合向量和标量数据的混合搜索、多向量搜索、稀疏向量搜索等。此外,Milvus 的架构设计灵活,支持不同场景下的嵌入检索。为确保高性能和可扩展性,建议将 Milvus 部署在 Kubernetes 上,以实现最佳的弹性和可用性。

Milvus 的架构概览

Milvus 采用共享存储架构,遵循计算与存储分离的设计原则。它的架构由四层组成:接入层、协调服务、工作节点和存储层。通过这种设计,各个层在扩展或灾难恢复时可以独立运作。

Milvus Architecture

1. 接入层

接入层是用户与系统交互的入口。该层由一组无状态的代理组成,负责验证客户端请求并返回搜索结果。其功能包括:

  • 代理无状态:使用 Nginx、Kubernetes Ingress、NodePort 和 LVS 等负载均衡组件提供统一服务地址。
  • 大规模并行处理(MPP)架构:代理会对中间结果进行汇总和后处理,并将最终结果返回给客户端。

2. 协调服务

协调服务是系统的“大脑”,负责将任务分配给工作节点。其任务包括集群拓扑管理、负载均衡、时间戳生成、数据管理等。协调器分为三种类型:

  • 根协调器(Root Coordinator):处理 DDL 和 DCL 请求,管理时间戳 Oracle(TSO)等。
  • 查询协调器(Query Coordinator):负责查询节点的拓扑管理和负载均衡。
  • 数据协调器(Data Coordinator):管理数据节点和索引节点的拓扑结构,触发数据刷新、压缩和索引构建。

3. 工作节点

工作节点是系统的“手”和“脚”,负责执行来自代理的 DML 命令。由于存储和计算分离,工作节点是无状态的,因此可以灵活扩展和灾难恢复。工作节点包括:

  • 查询节点:订阅增量日志数据,运行向量和标量数据之间的混合搜索。
  • 数据节点:处理数据插入、更新等操作,将日志数据快照存储在对象存储中。
  • 索引节点:负责索引构建。

4. 存储层

存储层是系统的“骨架”,负责数据的持久性。包括以下子模块:

  • 元存储:用于存储元数据,如集合模式和消息检查点。Milvus 使用 etcd 作为元存储,确保高可用性和强一致性。
  • 对象存储:用于存储日志快照文件、索引文件和中间查询结果。Milvus 支持 MinIO、AWS S3 和 Azure Blob 作为对象存储。
  • 日志代理:负责日志的持久化和发布-订阅服务。Milvus 集群使用 Pulsar 作为日志代理,单机版使用 RocksDB。
    存储

数据处理流程

Milvus 的数据处理包括数据插入、索引建立和数据查询三个关键步骤。

1. 数据插入

每个集合可以分为若干分片,每个分片对应一个虚拟通道(vChannel)。插入或删除请求根据主键的哈希值路由到不同的分片,代理会为每个请求分配时间戳,确保数据请求的顺序正确。DML 请求会写入日志序列,并最终由数据节点处理并存储。

写日志顺序

2. 索引构建

Milvus 通过索引节点构建索引,每个集合分为多个分段,每个分段都有自己的索引。索引构建过程中需要加载日志快照,将其反序列化为向量数据,并进行训练后建立索引。索引构建是一个计算和内存密集型操作,常用 K-means 或图遍历等技术加速处理。

索引建立

3. 数据查询

查询节点从对象存储中加载索引,并对指定的集合进行向量搜索。搜索请求会并发分发给所有查询节点,每个节点独立处理搜索请求,最后由代理汇总并返回最终结果。
数据查询

Knowhere:核心向量执行引擎

Knowhere 是 Milvus 的核心向量执行引擎,支持异构计算。它集成了多个向量搜索库,如 Faiss、Hnswlib 和 Annoy,并根据硬件选择最适合的计算方式(如 SIMD 指令)。Knowhere 支持多种性能优化,包括比特集机制(实现软删除)、二进制向量索引和 SIMD 指令集优化等。

Knowhere

Knowhere 的代码结构

Knowhere 中的主要计算涉及向量操作,其索引建立流程包括四个步骤:创建索引、训练数据、插入数据和建立索引。Knowhere 支持多种索引类型,如 IVF、HNSW、Annoy 等。此外,Knowhere 还支持自动选择合适的 SIMD 指令,以优化查询和索引构建的性能。

总结

Milvus 通过其共享存储架构、无状态工作节点和多层设计,实现了大规模密集向量数据的高效处理和查询。其灵活的架构不仅支持多种向量搜索库,还能根据不同硬件环境进行优化,确保性能的最大化。通过合理利用 Kubernetes 进行部署,Milvus 可以轻松应对各种数据量和查询场景的需求。

附录1:应用技术介绍

1. etcd

etcd 是一个分布式键值存储系统,专门用于存储和共享数据,特别适合在分布式系统中作为元数据存储和服务注册使用。它通过 Raft 共识算法保证高可用性和强一致性,使其非常适合用于分布式系统的配置管理、服务发现、分布式锁等场景。

  • 高可用性:etcd 使用 Raft 算法,提供分布式系统中数据的强一致性,即使在网络分区或节点故障时,也能保证数据一致。
  • 服务发现:etcd 通过其键值存储,允许系统中的服务注册自己并相互发现。这对于分布式系统中的自动化扩展和动态配置非常重要。
  • 数据持久性:etcd 支持数据的持久化,适合用作系统的配置存储、元数据存储等场景。它的事务支持确保了操作的原子性。

常用场景:

  • Kubernetes 使用 etcd 作为其集群数据的存储系统。
  • 在 Milvus 中,etcd 用于存储系统的元数据(如集合模式、消息检查点等),并且提供服务注册和健康检查。

2. MinIO

MinIO 是一款高性能的对象存储系统,完全兼容 Amazon S3 API,旨在处理大量非结构化数据(如图片、视频、备份文件等)。它特别擅长在私有云和本地存储环境中提供与 AWS S3 相似的对象存储功能。

  • 兼容性:MinIO 提供与 AWS S3 API 兼容的接口,应用程序可以使用标准 S3 客户端与 MinIO 进行交互,无需修改代码。
  • 性能优越:MinIO 针对高速对象存储进行了优化,特别是对大规模并行请求的处理能力。
  • 轻量级和可扩展性:MinIO 是一个轻量级的存储解决方案,可以在较小的计算资源下运行,但它也支持水平扩展,以应对更大的存储需求。

常用场景:

  • 私有云环境中提供类似 AWS S3 的对象存储。
  • 用于存储非结构化数据的集群架构中,比如 Milvus 的对象存储层。

3. AWS S3

AWS S3(Amazon Simple Storage Service) 是 Amazon Web Services 提供的对象存储服务,是世界上最受欢迎的云存储服务之一。S3 适合存储任何规模的文件,并通过 REST API 提供高可用的存储解决方案。

  • 可扩展性和高可用性:AWS S3 提供几乎无限的存储空间,能够自动扩展以处理海量数据。S3 背后的架构可以容忍多个数据中心的故障,确保数据的高可用性。
  • 安全性和权限控制:通过提供精细的权限控制机制(如基于 IAM 角色的权限、存储桶策略、对象级别的权限等),S3 允许对存储的对象进行严格的访问控制。
  • 按需定价:S3 根据存储的数据量和 API 调用频率收费,按使用付费,非常适合具有弹性需求的应用场景。

常用场景:

  • 存储备份数据、媒体文件、大数据分析结果等。
  • 用于静态网站托管或内容分发网络(CDN)。
  • Milvus 可以选择将对象存储部分托管在 AWS S3 上,进行数据的持久化和索引管理。

4. Azure Blob

Azure Blob 存储 是 Microsoft Azure 提供的对象存储服务,适用于存储大量非结构化数据。Blob 是 Binary Large Object 的缩写,意味着 Azure Blob 可以存储任何类型的数据,如文档、图片、视频等。

  • 对象存储模型:Azure Blob 提供三种存储模式:块 Blob、追加 Blob 和页 Blob。块 Blob 是最常见的存储类型,通常用于存储视频、图片和文档等数据。追加 Blob 则适合日志数据的存储,页 Blob 则用于大规模随机访问数据。
  • 全球分布和冗余:Azure Blob 可以在全球多个数据中心间复制数据,支持区域冗余存储(ZRS)、本地冗余存储(LRS)和异地冗余存储(GRS)等多种冗余模式,确保数据安全和可访问性。
  • 与 Azure 生态系统集成:作为 Microsoft Azure 云的一部分,Blob 存储可以无缝地与其他 Azure 服务集成,如虚拟机、容器、数据湖等。

常用场景:

  • 存储数据备份、大文件、日志数据等。
  • 作为大数据分析、机器学习工作流的输入数据存储。
  • Milvus 可以使用 Azure Blob 来托管其对象存储层的数据。

5. Pulsar

Apache Pulsar 是一个分布式的、原生支持多租户的消息队列和流处理平台。它具备消息的发布-订阅机制,允许消息在不同的生产者和消费者之间传递。Pulsar 具有高可用性、低延迟和水平扩展能力,非常适合用于处理实时数据流。

  • 多租户架构:Pulsar 设计支持多租户,这使得它能够在单个集群中支持多个独立的应用或团队,具有很好的隔离性。
  • 消息队列和流处理:Pulsar 同时支持队列模式和流处理模式,用户可以根据需求选择不同的消息处理模式。
  • 持久性和高可用性:Pulsar 内置了持久化存储机制,能够保证消息的持久性和高可用性。它还提供了多副本容错机制,在系统出现故障时也能保证消息数据不会丢失。

常用场景:

  • 实时消息处理,如物联网数据、金融交易日志的处理。
  • Milvus 中使用 Pulsar 作为日志代理,确保数据流的持久性和事件通知机制。

6. RocksDB

RocksDB 是一个高性能的嵌入式键值存储系统,基于 LSM 树结构。它由 Facebook 开发,用于需要高写入性能的场景,如持久化缓存、流式数据处理、区块链等。

  • LSM 树存储引擎:RocksDB 使用 LSM(Log-Structured Merge Tree)结构,这使得它非常适合高写入密集型的工作负载。LSM 树通过批量写入和合并操作优化了磁盘 IO 性能。
  • 持久化和快速读写:RocksDB 支持持久化的键值对存储,并且能够在 SSD 等硬件上实现非常高的读写性能。
  • 内嵌式存储:RocksDB 通常作为嵌入式数据库与应用一起运行,应用可以直接与其进行交互,而不需要通过网络协议访问外部数据库。

常用场景:

  • 高性能缓存、流处理、日志持久化。
  • 在 Milvus 单机版中,RocksDB 作为日志代理使用,提供本地持久化服务。

附录2:MinIO实例

以下是一个 MinIO 安装和使用的详细步骤示例,适用于本地部署环境(Linux 环境为例)。

1. 安装 MinIO

a. 下载 MinIO 服务器二进制文件

你可以直接从 MinIO 官方网站下载最新版的 MinIO 服务器二进制文件:

wget https://dl.min.io/server/minio/release/linux-amd64/minio
b. 给二进制文件添加执行权限

下载完成后,需要给 MinIO 二进制文件添加执行权限:

chmod +x minio
c. 启动 MinIO 服务器

启动 MinIO 服务器时,需要指定一个目录来存储数据,例如 /mnt/data 目录。如果你还没有该目录,可以先创建一个:

mkdir -p /mnt/data

启动 MinIO 服务器:

./minio server /mnt/data

此命令将在本地启动一个 MinIO 服务器,并将数据存储在 /mnt/data 目录下。默认情况下,MinIO 服务会运行在 9000 端口,你可以通过 http://127.0.0.1:9000 访问它。

启动后,你会看到类似如下的信息:

Endpoint:  http://127.0.0.1:9000  http://192.168.1.100:9000
AccessKey: YOUR-ACCESS-KEY
SecretKey: YOUR-SECRET-KEY
Region:    us-east-1
SQS ARNs:  <none>

记下这些信息中的 AccessKeySecretKey,因为你稍后需要使用它们进行身份验证。

2. 访问 MinIO 控制台

打开浏览器,访问 http://127.0.0.1:9000,你会看到 MinIO 的登录界面。使用刚刚在终端中显示的 AccessKeySecretKey 登录。

登录成功后,进入 MinIO 的 Web 控制台,你可以在这里管理存储桶和对象文件。

3. 使用 mc(MinIO Client)与 MinIO 交互

MinIO 提供了一个名为 mc 的客户端工具,用于与 MinIO 服务器进行交互。你可以使用 mc 进行对象存储的管理操作,如创建存储桶、上传文件等。

a. 下载 mc 客户端
wget https://dl.min.io/client/mc/release/linux-amd64/mc
b. 给 mc 文件添加执行权限
chmod +x mc
c. 配置 mc 客户端

在配置之前,你需要为 MinIO 添加一个别名。运行以下命令,指定你的 MinIO 服务地址、AccessKey 和 SecretKey:

./mc alias set myminio http://127.0.0.1:9000 YOUR-ACCESS-KEY YOUR-SECRET-KEY

这里的 myminio 是你为 MinIO 服务设置的别名。

d. 创建存储桶

你可以通过以下命令创建一个存储桶:

./mc mb myminio/mybucket
e. 上传文件到存储桶

将本地文件上传到刚刚创建的存储桶:

./mc cp /path/to/yourfile.txt myminio/mybucket
f. 列出存储桶中的对象

列出存储桶中的对象:

./mc ls myminio/mybucket
g. 下载文件

从存储桶下载文件:

./mc cp myminio/mybucket/yourfile.txt /path/to/local/directory/

4. MinIO 访问策略

MinIO 允许你为存储桶设置访问策略。例如,可以将存储桶设为公开访问,允许所有人读取存储桶内的文件。

a. 设置公开访问策略

将存储桶 mybucket 设置为公开可读:

./mc policy set public myminio/mybucket

5. 通过 S3 API 进行操作

MinIO 是兼容 S3 的对象存储,因此你可以使用 S3 SDK 与 MinIO 进行交互。

a. Python 示例

安装 boto3(Python 的 S3 SDK):

pip install boto3

以下是一个简单的 Python 示例,用于上传文件到 MinIO:

import boto3
from botocore.client import Config# 创建 S3 客户端
s3 = boto3.client('s3',endpoint_url='http://127.0.0.1:9000',aws_access_key_id='YOUR-ACCESS-KEY',aws_secret_access_key='YOUR-SECRET-KEY',config=Config(signature_version='s3v4'),region_name='us-east-1')# 上传文件到存储桶
s3.upload_file('local_file.txt', 'mybucket', 'remote_file.txt')

这个例子使用了 boto3 连接到 MinIO,上传本地文件到 mybucket 存储桶中。

6. 停止 MinIO 服务

如果你需要停止 MinIO 服务器,可以使用以下命令终止进程:

pkill minio

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149054.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

R包:ggheatmap热图

加载R包 # devtools::install_github("XiaoLuo-boy/ggheatmap")library(ggheatmap) library(tidyr)数据 set.seed(123) df <- matrix(runif(225,0,10),ncol 15) colnames(df) <- paste("sample",1:15,sep "") rownames(df) <- sapp…

Temu全球下载量突破7.3亿次!Temu怎么上架产品?

拼多多旗下的出海跨境平台自2022年9月推出以来&#xff0c;在国际上的市场份额不断扩大中。最新数据显示&#xff0c;截至今年8月&#xff0c;Temu在全球的下载量已经超过了7.35亿次。这一数据充分显示了Temu在全球范围内的受欢迎程度和快速增长的势头。 具体来说&#xff0c;T…

【深度学习】03-神经网络 4-1 Dropout 正则化 - 神经网络缓解过拟合的正则化方法

参数更新&#xff0c;只是更新一部分&#xff0c;剩下的部分&#xff0c;是进行缩放。即分数会扩大。 Dropout 正则化是一种深度学习中常用的正则化技术&#xff0c;最早由 Geoffrey Hinton 等人在 2012 年提出&#xff0c;旨在防止神经网络的过拟合。 1. 来源 Dropout 是由…

【Elasticsearch系列廿二】特殊参数

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Kafka系列之:安装使用kafka_exporter详细步骤

Kafka系列之:安装使用kafka_exporter详细步骤 一、kafka_exporter二、下载kafka_exporter三、理解Topic Metrics指标四、理解Consumer Groups Metrics指标五、启动kafka_exporter六、查看页面七、systemctl托管服务一、kafka_exporter kafka_exporter源码kafka_exporter下载页…

企业智能培训新方案,高效打造金牌员工

标品市场竞争激烈&#xff0c;小微企业因长期专注于非标业务或者偏定制化路线&#xff0c;在团队专业能力与大型企业间存在显著差距。专业人才短缺、培养成本高企、培训滞后、效果难测、资源不均、考核标准不一及知识转化率低等问题&#xff0c;成为其业务转型的绊脚石。 如何高…

Java项目: 基于SpringBoot+mybatis+maven师生共评的作业管理系统(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven师生共评的作业管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、…

Python办公自动化案例:实现XMind文件转换成Excel文件

案例:实现XMind文件转换成Excel文件 将XMind文件转换为Excel文件的过程可以通过几个步骤来实现,主要涉及到读取XMind文件,解析其内容,然后创建一个Excel文件并将解析的内容写入。以下是一个简化的Python脚本,展示了如何使用xmindparser库来解析XMind文件,并使用pandas库…

虚拟现实技术在相亲交友中的应用未来趋势

随着虚拟现实&#xff08;VR&#xff09;技术的不断进步&#xff0c;它已经开始渗透到我们生活的方方面面&#xff0c;其中包括相亲交友领域。相亲交友网站作为人们寻找另一半的重要平台&#xff0c;也在积极探索VR技术的应用可能性。本文将探讨VR技术在未来相亲交友网站上的几…

球体检测系统源码分享

球体检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

2024年双十一有哪些值得买?这些好物来看看!

2024年双十一有哪些值得入手的好物&#xff1f;在这个全民共享的购物盛宴里&#xff0c;我们精心挑选了一系列好物&#xff0c;旨在为您的生活添彩加温。从科技尖货到日常百货&#xff0c;从时尚潮流到家居必备&#xff0c;每一分每一秒都蕴含着超值优惠与惊喜发现。不论是自我…

无人机视角下的车辆数据集

车辆数据集 无人机视角下的车辆数据集。数据集为无人机俯拍的真实场景下的车辆机动车数据集。数据集已经标注好&#xff0c;yolo格式&#xff0c;txt标签。数据集已经划分好训练集&#xff08;20970张图片&#xff09;验证集&#xff08;5242张图片&#xff09;测试集&#xff…

峟思:山洪灾害监测预警系统全面解析

在自然灾害频发的今天&#xff0c;山洪灾害以其突发性强、破坏力大而备受关注。为了有效预防和减少山洪灾害带来的损失&#xff0c;山洪灾害监测预警系统应运而生。本文将详细介绍该系统的主要组成部分、关键传感器及其工作机制&#xff0c;以期为防灾减灾工作提供有力支持。 山…

影响RPA流程稳定运行的若干因素|实在RPA研究

RPA发展现状 当前&#xff0c;中国正处于实现高质量发展、数字化转型升级的关键时期。RPA作为数字化转型的一项重要工具&#xff0c;已经开始在许多领域发挥积极作用。 RPA&#xff08;Robotic Process Automation 机器人流程自动化&#xff09;是一种通过软件机器人自动执行…

路劲单伟彪:不乐观、不悲观,不藏着、不掖着

路劲单伟彪&#xff1a;不乐观、不悲观&#xff0c;不藏着、不掖着_简篇-美篇工作版 9月10日&#xff0c;史上超强台风“摩羯”已逐渐远离香港&#xff0c;天空开始放晴。在香港屯门凯和山&#xff0c;路劲集团主席单伟彪时隔一年再一次接受凤凰网专访。 对话自然从这一年的市场…

为什么自学python那么难?

在科技日新月异的今天&#xff0c;编程能力已成为一项备受追捧的技能。仿佛一夜之间&#xff0c;各种编程学习资源如雨后春笋般涌现&#xff0c;让人眼花缭乱。然而&#xff0c;许多人投身于自学编程的行列&#xff0c;却往往在半路折戟沉沙。究竟是什么原因让自学编程变得如此…

远程监控电脑屏幕用什么软件?8款真实好用的远程监控电脑屏幕软件推荐!

远程监控电脑屏幕是现代企业管理、远程协作以及家庭安全中的重要需求。 为了满足这一需求&#xff0c;市场上涌现出了多款功能强大、操作便捷的远程监控软件。 以下是8款真实好用的远程监控电脑屏幕软件推荐&#xff1a; 1. 安企神软件 特点&#xff1a;此软件专为企业设计&…

骨传导耳机哪个牌子好?深度解析五大高销量骨传导耳机!

在快节奏的现代生活中&#xff0c;耳机已成为我们不可或缺的伴侣&#xff0c;无论是在通勤路上、健身时还是日常工作中&#xff0c;它都能为我们提供音乐、通话和信息的即时接入。随着科技的发展&#xff0c;耳机的种类也日益丰富&#xff0c;其中骨传导耳机以其独特的声音传导…

恢复数据解决方案 :因意外删除而丢失重要数据的痛苦急救方法

您是否因意外删除 iOS 设备上的重要文件而丢失了文件&#xff1f;您听说过Geekersoft iPhone 数据恢复工具吗&#xff1f;Geekersoft iPhone 数据恢复工具提供了恢复丢失数据的完美解决方案。此 iOS 数据恢复工具具有多种恢复模式&#xff0c;可恢复已删除的文件。 全球许多用…

老包莫名被暂停、删除?Google Play审核这些坑你踩了吗?

相信很多开发者都经历过这样的“晴天霹雳”&#xff1a;自己辛辛苦苦维护多年的应用&#xff0c;突然之间被Google Play暂停或直接删除&#xff0c;理由是“欺骗行为”。收到这样的邮件&#xff0c;开发者往往是一脸懵逼&#xff0c;尤其是那些在架时间长、老老实实运营的“老包…