Создание кластера Milvus на базе JuiceFS
Сотрудничество между сообществами open-source — волшебная вещь. Страстные, умные и творческие волонтёры не только помогают open-source-решениям оставаться инновационными, но и работают над тем, чтобы объединять различные инструменты интересными и полезными способами. Milvus, самая популярная в мире векторная база данных, и JuiceFS, общая файловая система, разработанная для cloud-native сред, были объединены в этом духе своими соответствующими open-source-сообществами. В этой статье объясняется, что такое JuiceFS, как построить кластер Milvus на основе общего файлового хранилища JuiceFS и какой производительности пользователи могут ожидать при использовании этого решения.
Что такое JuiceFS?
JuiceFS — это высокопроизводительная open-source распределённая POSIX-файловая система, которую можно построить поверх Redis и S3. Она была разработана для cloud-native сред и поддерживает управление, анализ, архивирование и резервное копирование данных любого типа. JuiceFS обычно используется для решения задач больших данных, создания приложений искусственного интеллекта (AI) и сбора логов. Система также поддерживает совместное использование данных несколькими клиентами и может напрямую использоваться как общее хранилище в Milvus.
После того как данные и соответствующие им метаданные сохраняются соответственно в объектном хранилище и Redis, JuiceFS выступает в роли stateless-промежуточного ПО. Совместное использование данных реализуется за счёт возможности различным приложениям бесшовно взаимодействовать друг с другом через стандартный интерфейс файловой системы. JuiceFS использует Redis, open-source хранилище данных в памяти, для хранения метаданных. Redis используется потому, что он гарантирует атомарность и обеспечивает высокую производительность операций с метаданными. Все данные сохраняются в объектном хранилище через клиент JuiceFS. Архитектурная схема выглядит следующим образом:
Общая архитектура JuiceFS.
Создание кластера Milvus на основе JuiceFS
Кластер Milvus, построенный с использованием JuiceFS (см. архитектурную схему ниже), работает за счёт разделения входящих запросов с помощью Mishards, промежуточного ПО для шардирования кластера, чтобы каскадно передавать запросы вниз к его подмодулям. При вставке данных Mishards распределяет входящие запросы на узел записи Milvus, который сохраняет вновь вставленные данные в JuiceFS. При чтении данных Mishards загружает данные из JuiceFS через узел чтения Milvus в память для обработки, затем собирает и возвращает результаты из подслужб вверх по потоку.
Архитектура кластера Milvus, построенного с JuiceFS.
Шаг 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.
Успешная установка.
Шаг 3: Запустите Milvus
На всех узлах кластера должен быть установлен Milvus, и каждый узел Milvus должен быть настроен с разрешением на чтение или запись. Только один узел Milvus может быть настроен как узел записи, а остальные должны быть узлами чтения. Сначала задайте параметры разделов cluster и general в файле системной конфигурации Milvus server_config.yaml:
Раздел 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.
Тесты производительности
Решения общего хранилища обычно реализуются с помощью систем сетевого хранилища (NAS). К распространенным типам систем NAS относятся Network File System (NFS) и Server Message Block (SMB). Публичные облачные платформы обычно предоставляют управляемые сервисы хранения, совместимые с этими протоколами, например Amazon Elastic File System (EFS).
В отличие от традиционных систем NAS, JuiceFS реализован на основе Filesystem in Userspace (FUSE), где все чтение и запись данных выполняются непосредственно на стороне приложения, что дополнительно снижает задержку доступа. У JuiceFS также есть уникальные функции, которых нет в других системах NAS, например сжатие данных и кэширование.
Тестирование производительности показывает, что JuiceFS имеет значительные преимущества перед EFS. В тесте метаданных (рисунок 1) JuiceFS демонстрирует число операций ввода-вывода в секунду (IOPS) до десяти раз выше, чем EFS. Кроме того, тест пропускной способности ввода-вывода (рисунок 2) показывает, что JuiceFS превосходит EFS как в сценариях с одной задачей, так и с несколькими задачами.
Рисунок 1. Тест метаданных.
Рисунок 2. Тест последовательного чтения/записи.
Кроме того, тестирование производительности показывает, что время получения первого запроса, или время загрузки недавно вставленных данных с диска в память, для кластера Milvus на базе JuiceFS составляет в среднем всего 0,032 секунды, что указывает на то, что данные загружаются с диска в память практически мгновенно. Для этого теста время получения первого запроса измеряется с использованием одного миллиона строк 128-мерных векторных данных, вставляемых пакетами по 100 тыс. с интервалами от 1 до 8 секунд.
JuiceFS — это стабильная и надежная система общего файлового хранилища, а кластер Milvus, построенный на JuiceFS, обеспечивает как высокую производительность, так и гибкую емкость хранилища.
Узнайте больше о Milvus
Milvus — это мощный инструмент, способный обеспечивать работу широкого спектра приложений искусственного интеллекта и поиска по сходству векторов. Чтобы узнать больше о проекте, ознакомьтесь со следующими ресурсами:
- Читайте наш блог.
- Взаимодействуйте с нашим open-source сообществом в Slack.
- Используйте или вносите вклад в самую популярную в мире векторную базу данных на GitHub.
- Быстро тестируйте и развертывайте AI-приложения с нашим новым bootcamp.
Биография Changjian Gao.
Биография Jingjing Jia.
Читать далее

Zilliz Cloud On-Demand Compute: Pay Only for What You Use
The customer case behind Zilliz Cloud On-Demand: how a $10K vector search bill came down to under $500, and the engineering changes that made it possible.

Vector Databases vs. Graph Databases
Use a vector database for AI-powered similarity search; use a graph database for complex relationship-based queries and network analysis.

Introducing DeepSearcher: A Local Open Source Deep Research
In contrast to OpenAI’s Deep Research, this example ran locally, using only open-source models and tools like Milvus and LangChain.



