🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI

Что такое JuiceFS?

  • Engineering
June 15, 2021
Changjian Gao and Jingjing Jia

Сотрудничество между сообществами разработчиков открытого кода - волшебная вещь. Увлеченные, умные и творческие добровольцы не только поддерживают инновационные решения с открытым исходным кодом, но и работают над тем, чтобы объединить различные инструменты интересными и полезными способами. Milvus, самая популярная в мире векторная база данных, и JuiceFS, общая файловая система, разработанная для облачных сред, были объединены в этом духе их соответствующими сообществами с открытым исходным кодом. В этой статье мы расскажем о том, что такое JuiceFS, как построить кластер Milvus на базе общей файловой системы JuiceFS, а также о производительности, которую могут ожидать пользователи от этого решения.

Что такое JuiceFS?

JuiceFS - это высокопроизводительная распределенная POSIX-файловая система с открытым исходным кодом, которая может быть построена поверх Redis и S3. Она была разработана для облачных нативных сред и поддерживает управление, анализ, архивирование и резервное копирование данных любого типа. JuiceFS обычно используется для решения задач, связанных с большими данными, создания приложений искусственного интеллекта (ИИ) и сбора логов. Система также поддерживает совместное использование данных несколькими клиентами и может быть использована непосредственно в качестве общего хранилища в Milvus.

После того как данные и соответствующие им метаданные сохраняются в объектном хранилище и Redis соответственно, JuiceFS выступает в качестве промежуточного ПО без статических данных. Совместное использование данных реализуется за счет того, что различные приложения могут беспрепятственно взаимодействовать друг с другом через стандартный интерфейс файловой системы. Для хранения метаданных JuiceFS опирается на Redis, хранилище данных in-memory с открытым исходным кодом. Redis используется потому, что он гарантирует атомарность и обеспечивает высокую производительность операций с метаданными. Все данные хранятся в объектном хранилище через клиент JuiceFS. Схема архитектуры выглядит следующим образом:

juicefs-architecture.png juicefs-architecture.png

Построение кластера Milvus на базе JuiceFS

Кластер Milvus, построенный на основе JuiceFS (см. схему архитектуры ниже), работает путем разделения запросов на восходящие потоки с помощью Mishards, промежуточного ПО для шардинга кластеров, чтобы каскадировать запросы вниз к своим субмодулям. При вставке данных Mishards распределяет восходящие запросы на узел записи Milvus, который хранит новые вставленные данные в JuiceFS. При чтении данных Mishards загружает их из JuiceFS через узел чтения Milvus в память для обработки, а затем собирает и возвращает результаты от подсервисов выше по потоку.

milvus-cluster-built-with-juicefs.png 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.

installation-success.png installation-success.png

Шаг 3: Запустите Milvus

На всех узлах кластера должен быть установлен Milvus, и каждый узел Milvus должен быть настроен с правами чтения или записи. Только один узел Milvus может быть настроен как узел записи, остальные должны быть узлами чтения. Сначала задайте параметры секций cluster и general в файле конфигурации системы Milvus server_config.yaml:

Секция cluster

ПараметрОписаниеКонфигурация
enableВключать ли режим кластераtrue
roleРоль развертывания Milvusrw/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 mishards-launch-success.png

Контрольные показатели производительности

Решения для совместного хранения данных обычно реализуются с помощью сетевых систем хранения (NAS). Обычно используются такие типы систем NAS, как сетевая файловая система (NFS) и блок серверных сообщений (SMB). Публичные облачные платформы обычно предоставляют управляемые сервисы хранения, совместимые с этими протоколами, например Amazon Elastic File System (EFS).

В отличие от традиционных NAS-систем, JuiceFS реализована на базе Filesystem in Userspace (FUSE), где все операции чтения и записи данных происходят непосредственно на стороне приложения, что еще больше снижает задержки доступа. Кроме того, JuiceFS обладает уникальными функциями, которые не встречаются в других NAS-системах, например, сжатие и кэширование данных.

Бенчмарк-тестирование показало, что JuiceFS имеет значительные преимущества перед EFS. В бенчмарке метаданных (рис. 1) количество операций ввода-вывода в секунду (IOPS) в JuiceFS в десять раз выше, чем в EFS. Кроме того, в бенчмарке I/O throughput (рисунок 2) JuiceFS превосходит EFS как в однозадачном, так и в многозадачном сценарии.

performance-benchmark-1.png performance-benchmark-1.png

performance-benchmark-2.png performance-benchmark-2.png

Кроме того, тестирование показало, что время получения первого запроса, или время загрузки новых данных с диска в память, для кластера Milvus на базе JuiceFS составляет в среднем всего 0,032 секунды, что говорит о том, что данные загружаются с диска в память практически мгновенно. В этом тесте время поиска по первому запросу измерялось с использованием одного миллиона строк 128-мерных векторных данных, вставляемых партиями по 100 тыс. с интервалом от 1 до 8 секунд.

JuiceFS - это стабильная и надежная файловая система хранения данных общего доступа, а кластер Milvus, построенный на JuiceFS, обеспечивает высокую производительность и гибкие возможности хранения данных.

Узнайте больше о Milvus

Milvus - это мощный инструмент, способный обеспечить работу огромного количества приложений искусственного интеллекта и векторного поиска сходства. Чтобы узнать больше о проекте, ознакомьтесь со следующими ресурсами:

  • Читайте наш блог.
  • Общайтесь с нашим сообществом разработчиков открытого кода в Slack.
  • Используйте самую популярную в мире базу данных векторов на GitHub и вносите в нее свой вклад.
  • Быстро протестируйте и разверните приложения ИИ с помощью нашего нового буткемпа.

writer bio-changjian gao.png биография писателя чанцзянь гао.png writer bio-jingjing jia.pngбиография писателя цзинцзин цзя.png

Like the article? Spread the word

Продолжить чтение