Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >探索 Milvus 数据存储系统:如何评估和优化 Milvus 存储性能

探索 Milvus 数据存储系统:如何评估和优化 Milvus 存储性能

作者头像
Zilliz RDS
发布于 2024-07-31 09:24:57
发布于 2024-07-31 09:24:57
66500
代码可运行
举报
运行总次数:0
代码可运行
欢迎来到探索 Milvus 系列。Milvus 是一款支持水平扩展和具备出色性能的开源向量数据库。Milvus 的核心是其强大的存储系统,是数据持久化和存储的关键基础。该系统包括几个关键组成部分:元数据存储(meta storage)、消息存储(log broker)和对象存储(object storage)。

本文将深入探讨 Milvus 架构,分析其核心存储组件,并介绍如何有效评估 Milvus 存储系统性能。

01.Milvus架构

Milvus 采用了分布式架构,确保了存储和计算的分离,并支持水平扩展计算节点。Milvus 架构主要分为四层:接入层(Access Layer)、协调服务(Coordinator Service)、执行节点(Worker Node)和存储服务 (Storage)。每一层都可以独立扩展并针对灾难恢复进行了优化。

  • 接入层:作为系统的主要用户接口,由无状态代理组成,处理用户请求并优化响应。
  • 协调服务:作为系统中央协调服务,管理任务分配、集群拓扑、负载均衡和跨工作节点的数据管理
  • 执行节点:作为执行者,负责完成协调服务下发的指令和 proxy 发起的数据操作语言(DML)命令。
  • 存储服务 :对数据持久性至关重要,负责 Milvus 数据的持久化,分为元数据存储(meta store)、消息存储(log broker)和对象存储(object storage)三个部分。

02.Milvus存储组件

Milvus 使用以下三个主要的存储组件来确保数据的完整性和可用性。

元数据存储

负责存储元信息的快照,比如 collection schema 信息、节点状态信息、消息消费的 checkpoint 等。鉴于对高可用性、强一致性和事务支持的需求,Milvus 利用 etcd 作为其元信息存储解决方案。etcd 是一个健壮且分布式的键值存储,对 Milvus 内部的分布式系统至关重要。同时它还处理服务注册和健康检查以及元数据保存等任务。

对象存储

负责存储日志的快照文件、标量/向量索引文件以及查询的中间处理结果。Milvus 采用 MinIO 作为对象存储,另外也支持 AWS S3 和Azure Blob 这两大最广泛使用的低成本存储。但是由于对象存储访问延迟较高,且需要按照查询计费,因此 Milvus 未来计划支持基于内存或 SSD 的缓存池,通过冷热分离的方式提升性能以降低成本。

消息存储

消息存储是一套支持回放的发布订阅系统,用于持久化流式写入的数据,以及可靠的异步执行查询、事件通知和结果返回。执行节点宕机恢复时,通过回放消息存储保证增量数据的完整性。目前分布式 Milvus 依赖 Pulsar 作为消息存储,Milvus standalone 依赖 RocksDB 作为消息存储。消息存储也可以替换为 Kafka 等流式存储。

03.如何评估和优化Milvus存储的性能

持续评估和改进存储性能至关重要。

Etcd:Milvus 的元数据存储

Etcd 是为分布式系统设计的分布式键值存储。在 Milvus 中,etcd 用作元数据存储,存储诸如collection schema 信息、节点状态信息、消息消费的 checkpoint 等关键数据。

磁盘写入延迟对于 etcd 的性能至关重要;速度较慢的磁盘可能会显著增加请求延迟并危及系统稳定性。我们推荐在生产环境中至少保持 500+ IOPS(每秒输入/输出操作)以获得最佳性能,确保 99% 的 fdatasync 持续时间在十毫秒以下。虽然 etcd 通常只需适度的磁盘带宽,但增加带宽可以显著减少恢复时间。因此,我们推荐生产环境的最低磁盘带宽至少为 100MB/s。

为了验证您的存储解决方案是否满足这些标准,可以考虑使用 Fio 进行性能评估,Fio 是一种磁盘性能测试工具。

首先,请确保您的系统上安装了 Fio。然后,运行以下命令,指定挂载存储的目录作为测试数据目录。这个目录应该位于您的存储连接点之下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest

查看结果,确保 99% 的 fdatasync 持续时间少于 10 毫秒,且写入 IOPS 高于 500。如果满足这些条件,则代表存储性能良好。

以下为输出结果示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Jobs: 1 (f=1): [W(1)][100.0%][w=1771KiB/s][w=788 IOPS][eta 00m:00s]
mytest: (groupid=0, jobs=1): err= 0: pid=703: Mon Jul 25 08:36:48 2022
 write: IOPS=967, BW=2173KiB/s (2225kB/s)(220MiB/103664msec); 0 zone resets
   clat (nsec): min=1903, max=29662k, avg=287307.76, stdev=492386.04
    lat (nsec): min=1981, max=29662k, avg=287583.67, stdev=492438.10
   clat percentiles (usec):
    |  1.00th=[    3],  5.00th=[    4], 10.00th=[    4], 20.00th=[    5],
    | 30.00th=[    6], 40.00th=[    9], 50.00th=[  233], 60.00th=[  343],
    | 70.00th=[  437], 80.00th=[  553], 90.00th=[  701], 95.00th=[  742],
    | 99.00th=[ 1172], 99.50th=[ 2114], 99.90th=[ 6390], 99.95th=[ 8455],
    | 99.99th=[15533]
  bw (  KiB/s): min= 1630, max= 2484, per=100.00%, avg=2174.66, stdev=193.65, samples=207
  iops        : min=  726, max= 1106, avg=968.37, stdev=86.19, samples=207
 lat (usec)   : 2=0.03%, 4=16.49%, 10=27.68%, 20=3.21%, 50=0.71%
 lat (usec)   : 100=0.27%, 250=2.65%, 500=24.64%, 750=20.40%, 1000=2.57%
 lat (msec)   : 2=0.82%, 4=0.30%, 10=0.18%, 20=0.03%, 50=0.01%
 fsync/fdatasync/sync_file_range:
   sync (usec): min=309, max=21848, avg=741.93, stdev=489.64
   sync percentiles (usec):
    |  1.00th=[  392],  5.00th=[  437], 10.00th=[  474], 20.00th=[  529],
    | 30.00th=[  578], 40.00th=[  619], 50.00th=[  660], 60.00th=[  709],
    | 70.00th=[  742], 80.00th=[  791], 90.00th=[  988], 95.00th=[ 1369],
    | 99.00th=[ 2442], 99.50th=[ 3523], 99.90th=[ 6915], 99.95th=[ 8586],
    | 99.99th=[11994]

在云环境中部署 Milvus 集群时,由于 etcd 对磁盘性能的敏感性,选择适合的块存储类型至关重要。云服务提供商提供了各种块存储选项,每种都具备独特性能特征,适用于不同的工作场景。

以下是在各个云提供商推荐的使用的卷类型和性能指标。

您还可以使用 Fio 来确认所选的块存储是否满足 etcd 在 Milvus 部署中正常运行所需的性能基准。

MinIO:Milvus 对象存储工具

MinIO 是一种高性能、Kubernetes 原生的对象存储解决方案,专门针对云原生任务进行了优化。Milvus 使用 MinIO 来存储日志的快照文件、标量/向量索引文件以及查询的中间处理结果。

像 MinIO 这样的对象存储的性能主要通过 I/O 吞吐量而不是 IOPS 来衡量。这个指标显著影响 Milvus 中的各种操作,如加载 Collection、构建索引和插入数据。许多因素影响 MinIO 的吞吐性能,包括网络带宽、Linux 内核性能调优以及单个磁盘驱动器的性能。其中,磁盘性能尤为关键。

我们可以使用 dd 命令来测量单个驱动器的性能。DD 是一个 Unix 工具,它按位从一个文件复制数据到另一个文件,并提供了各种选项来控制每次读写的块大小。

在下面的示例中,当使用 16MB 块大小测试单个 NVMe 驱动器时, O_DIRECT 选项 count=64,每个驱动器写入性能超过每秒 2GB。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ dd if=/dev/zero of=/mnt/drive/test bs=16M count=64 oflag=direct
64+0 records in
64+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.443096 s, 2.4 GB/s

在同一示例中,当使用 16MB 块大小测试单个 NVMe 驱动器时,O_DIRECT 选项 count=64,每个驱动器读取性能超过每秒 5GB。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ dd of=/dev/null if=/mnt/drive/test bs=16M count=64 iflag=direct
64+0 records in
64+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.187263 s, 5.7 GB/s

磁盘驱动器的读写性能越高,MinIO 的整体吞吐性能越好。我们建议在 MinIO 设置中使用 SSD 或 NVMe 类型的驱动器作为存储磁盘,以获得最佳性能。这些驱动器可以有效支持 MinIO 操作的高吞吐量要求。请避免使用 SAN/NAS 设备作为 MinIO 存储,因为此类存储方式通常会引入并发问题和性能瓶颈,可能会降低系统的效率和响应性。

Pulsar/Kafka:Milvus 消息存储工具

如上所述,Milvus 根据特定的部署模式使用不同的日志代理工具。Milvus 分布式版使用 Pulsar 或 Kafka,而 Milvus Standalone 版本通常使用 RocksDB。

Pulsar 和 Kafka 都用于支持持久性消息存储,并为消息消费提供高吞吐量。它们的性能严重依赖于所使用的磁盘存储类型,因为它们依赖于磁盘 I/O 操作。

对于 Pulsar,高性能磁盘对于保证 BookKeeper 的日志文件数据完整性和持久性至关重要。Pulsar Ledgers 和 Kafka 都针对磁盘效率进行了优化,利用文件系统缓存,并且在 HDD 和 SSD 上表现良好。然而,对于追求低延时的应用或大规模部署,SSD 有着显著的性能优势。

为了优化性能,应为 Pulsar 和 Kafka 使用多个磁盘设备。特别是对于 Pulsar,使用单独的磁盘存储日志可以将写操作的延迟与读操作隔离开来。为了确保最佳的延迟,不要使用相同的驱动器存储数据、应用程序日志或其他操作系统的活动。这些驱动器可以使用 RAID 配置为单个卷,或者每个驱动器可以格式化并挂载为自己的目录。应避免使用共享存储(SAN/NAS),因为它的性能较慢,延迟更高且更不稳定,并且可能成为单点故障。

04.总结

本文对 Milvus 存储系统进行了深入探索,并全面介绍了 Milvus 存储架构和组件,展现了这些存储组件在支持大规模数据管理和分析中的作用。此外,本文还详细分析了 Milvus 的三个主要存储组件——元数据存储、对象存储和消息存储系统,并提供了评估和优化 Milvus 存储性能的最佳实践。

作者介绍

朱伟达

Zilliz高级工程师

DevOps & Infrastructure

团队负责人

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ZILLIZ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Fio工具详解【强大的IO性能压测工具】
​ 是否使用 direct io,测试过程不使用OS 自带的buffer,使测试磁盘的结果更真实。Linux读写的时候,内核维护了缓存,数据先写到缓存,后面在后台写到SSD。读的时候也优先读缓存里的数据。这样速度可以加快,但是一旦掉电,缓存里的数据就没有了。所以有一种模式叫做direct io,跳过缓存,直接读写SSD。
233333
2023/09/03
3.9K0
Linux 中使用 Fio 测评硬盘性能
Fio(Flexible I/O Tester) 是一款由 Jens Axboe 开发的用于测评和压力/硬件验证的自由开源的软件。它支持 19 种不同类型的 I/O 引擎 (sync、mmap、libaio、posixaio、SG v3、splice、null、network、 syslet、guasi、solarisaio,以及更多), I/O 优先级(针对较新的 Linux 内核),I/O 速度,fork 的任务或线程任务等等。它能够在块设备和文件上工作。
Debian中国
2018/12/21
3.6K0
如何在 Linux 中使用 Fio 来测评硬盘性能
Fio(Flexible I/O Tester) 是一款由 Jens Axboe 开发的用于测评和压力/硬件验证的自由开源的软件。
用户8639654
2021/10/21
2K0
工具| IO测试fio详解
FIO是一款开源的 I/O 压力测试工具,主要是用来测试磁盘的IO性能。它可以支持多种不同的I/O引擎。
用户1278550
2021/11/26
8.1K0
KubeSphere 最佳实战:KubeSphere 部署向量数据库 Milvus(GitHub Star 28.5k)实战指南
Milvus 是一个为通用人工智能(GenAI)应用而构建的开源向量数据库。它以卓越的性能和灵活性,提供了一个强大的平台,用于存储、搜索和管理大规模的向量数据。Milvus 能够执行高速搜索,并以最小的性能损失扩展到数百亿向量。其分布式架构确保了系统的高可用性和水平可扩展性,满足不断增长的数据需求。同时,Milvus 提供了丰富的 API 和集成选项,使其成为机器学习、计算机视觉和自然语言处理等 AI 应用的理想选择。
运维有术
2024/07/25
2000
KubeSphere 最佳实战:KubeSphere 部署向量数据库 Milvus(GitHub Star 28.5k)实战指南
KubeSphere 最佳实战:GitHub Star 28.5k!KubeSphere 部署向量数据库 Milvus实战指南
Milvus 是一个为通用人工智能(GenAI)应用而构建的开源向量数据库。它以卓越的性能和灵活性,提供了一个强大的平台,用于存储、搜索和管理大规模的向量数据。Milvus 能够执行高速搜索,并以最小的性能损失扩展到数百亿向量。其分布式架构确保了系统的高可用性和水平可扩展性,满足不断增长的数据需求。同时,Milvus 提供了丰富的 API 和集成选项,使其成为机器学习、计算机视觉和自然语言处理等 AI 应用的理想选择。
运维有术
2024/07/29
960
KubeSphere 最佳实战:GitHub Star 28.5k!KubeSphere 部署向量数据库 Milvus实战指南
linux 磁盘IO测试工具:fio (同时简要介绍dd工具测试)
FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。
西湖醋鱼
2020/12/30
6.8K0
Milvus 2.0 新版本一览:重新定义向量数据库
2018 年 10 月,我们写下了向量数据库 Milvus 的第一行代码;在历经了 29 个月、19 个版本的迭代与全球 1000 家用户的实践验证后,终于在 2021 年 3月迎来了 Milvus 1.0 版本。Milvus 解决了对向量数据进行增删改查(CRUD)操作和数据持久化的问题,但随着新需求的出现,更多问题也逐渐浮现出来。本文旨在总结过去三年的经验,聊聊 Milvus 2.0 期待解决的问题,以及为什么 Milvus 2.0 是解决这些问题的良药。
Zilliz RDS
2021/07/23
3.4K0
Milvus 2.0 新版本一览:重新定义向量数据库
SSD硬件测试
这两天有一个临时性的小任务,使用fio工具对SSD磁盘进行硬件测试,fio这个工具之前没有用过,这两天简单研究了一下这个工具,把一些常用的参数在这里说明一下。
AsiaYe
2020/11/02
3.4K0
etcd:增加30%的写入性能
本文最终的解决方式很简单,就是将现有卷升级为支持更高IOPS的卷,但解决问题的过程值得推荐。
charlieroro
2023/05/10
8170
etcd:增加30%的写入性能
IO测试工具之fio详解
目前主流的第三方IO测试工具有fio、iometer和Orion,这三种工具各有千秋。
jwangkun
2021/12/23
12.9K0
如何定位Milvus性能瓶颈并优化
在此前的文章中,我们已经介绍了评估各种向量数据库时使用的关键指标和性能测试工具。本文将以 Milvus 向量数据库为例,特别关注 Milvus 2.2 或以上版本,讲解如何监控搜索性能、识别瓶颈并优化向量数据库性能。
Zilliz RDS
2024/07/20
5820
如何定位Milvus性能瓶颈并优化
浅谈如何优化 Milvus 性能
Milvus 是全球最快的向量数据库,在最新发布的 Milvus 2.2 benchmark[1] 中,Milvus 相比之前的版本,取得了 50% 以上的性能提升。值得一提的是,在 Master branch 的最新分支中,Milvus 的性能又更进一步,在 1M 向量串行执行的场景下取得了 3ms 以下的延迟,整体 QPS 甚至超过了 ElasticSearch 的 10 倍。那么,如何使用 Milvus 才能达到理想的性能呢?本文暂且不提社区大神贡献的黑科技优化,先聊聊使用 Milvus 过程中的一些经验,以及如何进行性能调优。
Zilliz RDS
2023/01/10
4.4K0
浅谈如何优化 Milvus 性能
云原生向量数据库Milvus知识大全,看完这篇就够了[基本概念、系统架构、主要组件、应用场景]
Milvus 是一款云原生向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。
汀丶人工智能
2023/10/11
21.8K0
云原生向量数据库Milvus知识大全,看完这篇就够了[基本概念、系统架构、主要组件、应用场景]
Milvus 数据处理流程解剖
Milvus 2.0 中主要的数据处理流程包括读写路径、建表等数据定义操作以及向量索引构建流程。
Zilliz RDS
2022/04/08
9640
Milvus 数据处理流程解剖
ceph分布式存储-块存储BlueStore性能测试
mon组件部署: ceph-xxx-osd00, ceph-xxx-osd01, ceph-xxx-osd02 osd组件部署: ceph-xxx-osd00, ceph-xxx-osd01, ceph-xxx-osd02,ceph-xxx-osd03, ceph-xxx-osd04 磁盘: SATA ceph版本: ceph 12.2.2 bluestore
Lucien168
2020/07/20
9.9K0
深入理解 新一代存储引擎BlueStore,需四步
”走暗路、耕瘦田、进窄门、见微光” 告诉我 面试关键就 深入理解自己项目 这个才是最考察基本功的地方。
早起的鸟儿有虫吃
2025/04/28
1010
深入理解 新一代存储引擎BlueStore,需四步
Milvus性能优化提速之道:揭秘优化技巧,避开十大误区,确保数据一致性无忧,轻松实现高性能
Milvus 是全球最快的向量数据库,在最新发布的 Milvus 2.2 benchmark中,Milvus 相比之前的版本,取得了 50% 以上的性能提升。值得一提的是,在 Master branch 的最新分支中,Milvus 的性能又更进一步,在 1M 向量串行执行的场景下取得了 3ms 以下的延迟,整体 QPS 甚至超过了 ElasticSearch 的 10 倍。那么,如何使用 Milvus 才能达到理想的性能呢?本文暂且不提社区大神贡献的黑科技优化,先聊聊使用 Milvus 过程中的一些经验,以及如何进行性能调优。
汀丶人工智能
2023/11/15
2.5K0
Milvus性能优化提速之道:揭秘优化技巧,避开十大误区,确保数据一致性无忧,轻松实现高性能
“加速AI搜索和分析:Milvus数据库解析与实践指南“
在当今数字化时代,人工智能 AI 正迅速改变着我们的生活和工作方式。从智能助手到自动驾驶汽车,AI 正在成为各行各业的创新引擎。然而,这种 AI 的崛起也带来了一个关键的挑战:如何有效地处理和分析越来越丰富和复杂的数据。在这个背景下,向量数据库技术应运而生,为 AI 提供了强大的加速引擎。
汀丶人工智能
2023/10/18
1.4K0
“加速AI搜索和分析:Milvus数据库解析与实践指南“
Annoy vs Milvus:哪个向量数据库更适合您的AI应用?知其然知其所以然
Annoy 和 Milvus 都是用于向量索引和相似度搜索的开源库,它们可以高效地处理大规模的向量数据。
汀丶人工智能
2023/10/18
9940
Annoy vs Milvus:哪个向量数据库更适合您的AI应用?知其然知其所以然
推荐阅读
相关推荐
Fio工具详解【强大的IO性能压测工具】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验