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はJuiceFSからMilvus readノードを通じてデータをメモリにロードして処理し、上流のサブサービスから結果を収集して返します。
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ノードは1台のみ書き込みノードに設定でき、残りは読み込みノードに設定する必要があります。まず、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)などがある。パブリッククラウドプラットフォームは通常、Amazon Elastic File System(EFS)など、これらのプロトコルと互換性のあるマネージドストレージサービスを提供しています。
従来のNASシステムとは異なり、JuiceFSはFUSE(Filesystem in Userspace)に基づいて実装されており、すべてのデータの読み書きがアプリケーション側で直接行われるため、アクセスの待ち時間がさらに短縮されます。また、データ圧縮やキャッシングなど、他のNASシステムにはないJuiceFS独自の機能もあります。
ベンチマークテストにより、JuiceFSがEFSよりも大きな利点を提供していることが明らかになりました。メタデータベンチマーク(図1)では、JuiceFSの1秒あたりの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は、膨大な数の人工知能やベクトル類似性検索アプリケーションを強化できる強力なツールです。プロジェクトの詳細については、以下のリソースをご覧ください:
- ブログを読む
- Slackでオープンソースコミュニティと交流する。
- GitHubで世界で最も人気のあるベクトル・データベースを利用したり、貢献する。
- 新しいブートキャンプでAIアプリケーションを素早くテストし、デプロイする。
writer bio-changjian gao.png
writer bio-jingjing jia.png
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word