什么是 JuiceFS?
开源社区之间的合作是一件神奇的事情。充满热情、智慧和创造力的志愿者们不仅让开源解决方案不断创新,他们还努力将不同的工具以有趣而有用的方式结合在一起。Milvus 是世界上最流行的向量数据库,而JuiceFS 则是专为云原生环境设计的共享文件系统,它们在各自的开源社区中本着这种精神联合在一起。本文将解释什么是 JuiceFS、如何基于 JuiceFS 共享文件存储构建 Milvus 集群,以及用户使用该解决方案可以期待的性能。
什么是 JuiceFS?
JuiceFS 是一个高性能、开源的分布式 POSIX 文件系统,可以构建在 Redis 和 S3 的基础上。它专为云原生环境设计,支持管理、分析、归档和备份任何类型的数据。JuiceFS 常用于解决大数据难题、构建人工智能(AI)应用以及收集日志。该系统还支持多个客户端之间的数据共享,并可直接用作 Milvus 中的共享存储。
数据及其相应的元数据分别持久化到对象存储和Redis后,JuiceFS 就成了一个无状态中间件。通过标准的文件系统接口,不同的应用程序可以无缝对接,从而实现数据共享。JuiceFS 依靠开源内存数据存储 Redis 来存储元数据。之所以使用 Redis,是因为它能保证原子性并提供高性能的元数据操作。所有数据都通过 JuiceFS 客户端存储在对象存储中。架构图如下:
juicefs-architecture.png
基于 JuiceFS 构建 Milvus 集群
使用 JuiceFS 构建的 Milvus 集群(见下面的架构图)通过使用集群分片中间件 Mishards 对上游请求进行拆分,从而将请求级联到其子模块。插入数据时,Mishards 将上游请求分配给 Milvus 写节点,后者将新插入的数据存储在 JuiceFS 中。读取数据时,Mishards 通过 Milvus 读节点将数据从 JuiceFS 加载到内存中进行处理,然后从上游的子服务收集并返回结果。
Milvus-cluster-built-with-juicefs.png
步骤 1:启动 MySQL 服务
在群集中的任意节点上启动 MySQL 服务。有关详细信息,请参阅使用 MySQL 管理元数据。
第 2 步:创建 JuiceFS 文件系统
为演示目的,使用预编译的二进制 JuiceFS 程序。为你的系统下载正确的安装包,并按照《JuiceFS快速入门指南》了解详细的安装说明。要创建 JuiceFS 文件系统,首先要为元数据存储设置一个 Redis 数据库。对于公共云部署,建议将 Redis 服务托管在与应用程序相同的云上。此外,为 JuiceFS 设置对象存储。本例中使用的是 Azure Blob Storage,但 JuiceFS 支持几乎所有对象服务。请选择最适合您的应用场景需求的对象存储服务。
配置好 Redis 服务和对象存储后,格式化一个新文件系统并将 JuiceFS 挂载到本地目录:
1 $ export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX;EndpointSuffix=core.windows.net"
2 $ ./juicefs format \
3 --storage wasb \
4 --bucket https://<container> \
5 ... \
6 localhost test #format
7 $ ./juicefs mount -d localhost ~/jfs #mount
8
如果 Redis 服务器不在本地运行,请将 localhost 替换为以下地址:
redis://<user:password>@host:6379/1
。
安装成功后,JuiceFS 会返回共享存储页面/root/jfs。
安装成功.png
第 3 步:启动 Milvus
集群中的所有节点都应安装 Milvus,每个 Milvus 节点都应配置读或写权限。只有一个 Milvus 节点可以配置为写节点,其余的必须是读节点。首先,在 Milvus 系统配置文件server_config.yaml 中设置cluster
和general
部分的参数:
部分 cluster
参数 | 说明 | 配置 |
---|---|---|
enable | 是否启用群集模式 | true |
role | Milvus 部署角色 | rw /ro |
部分 general
# meta_uri is the URI for metadata storage, using MySQL (for Milvus Cluster). Format: mysql://<username:password>@host:port/database
general:
timezone: UTC+8
meta_uri: mysql://root:milvusroot@host:3306/milvus
安装过程中,配置的 JuiceFS 共享存储路径设置为/root/jfs/milvus/db。
1 sudo docker run -d --name milvus_gpu_1.0.0 --gpus all \
2 -p 19530:19530 \
3 -p 19121:19121 \
4 -v /root/jfs/milvus/db:/var/lib/milvus/db \ #/root/jfs/milvus/db is the shared storage path
5 -v /home/$USER/milvus/conf:/var/lib/milvus/conf \
6 -v /home/$USER/milvus/logs:/var/lib/milvus/logs \
7 -v /home/$USER/milvus/wal:/var/lib/milvus/wal \
8 milvusdb/milvus:1.0.0-gpu-d030521-1ea92e
9
安装完成后,启动 Milvus 并确认其已正常启动。 最后,在群集中的任意节点上启动 Mishards 服务。下图显示了 Mishards 的成功启动。有关详细信息,请参阅 GitHub教程。
mishards-launch-success.png
性能基准
共享存储解决方案通常由网络附加存储(NAS)系统实现。常用的 NAS 系统类型包括网络文件系统(NFS)和服务器消息块(SMB)。公共云平台通常提供与这些协议兼容的托管存储服务,如亚马逊弹性文件系统(EFS)。
与传统的 NAS 系统不同,JuiceFS 是基于用户空间文件系统(FUSE)实现的,所有数据读写都直接在应用程序端进行,从而进一步减少了访问延迟。JuiceFS 还有其他 NAS 系统所不具备的独特功能,如数据压缩和缓存。
基准测试表明,JuiceFS 比 EFS 具有更大的优势。在元数据基准测试中(图 1),JuiceFS 的每秒 I/O 操作符(IOPS)比 EFS 高出 10 倍。此外,I/O 吞吐量基准测试(图 2)显示,JuiceFS 在单任务和多任务情况下的性能均优于 EFS。
性能基准-1.png
性能基准-2.png
此外,基准测试表明,基于 JuiceFS 的 Milvus 集群的首次查询检索时间(或将新插入的数据从磁盘加载到内存的时间)平均仅为 0.032 秒,这表明数据几乎是瞬间从磁盘加载到内存的。在这项测试中,首次查询检索时间是使用 100 万行 128 维向量数据,以 100k 为一批,每隔 1 到 8 秒插入一次来测量的。
JuiceFS 是一个稳定可靠的共享文件存储系统,基于 JuiceFS 构建的 Milvus 集群既能提供高性能,又能提供灵活的存储容量。
了解有关 Milvus 的更多信息
Milvus 是一款强大的工具,能够为大量人工智能和向量相似性搜索应用提供动力。要了解有关该项目的更多信息,请查看以下资源:
writer bio-changjian gao.png
writer bio-jingjing jia.png
- 基于 JuiceFS 构建 Milvus 集群
- 性能基准
- 了解有关 Milvus 的更多信息
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word