Transcript
00:00:00これはJuiceFSです。クラウドオブジェクトストレージの無限の拡張性と、ローカルファイルシステムの全機能および高速性を両立させるために設計された、高性能なオープンソースの分散ファイルシステムです。
00:00:14この動画では、JuiceFSの仕組みを確認し、JuiceFSを使って独自のローカル高性能NAS(ネットワーク接続ストレージ)ソリューションを構築する方法を紹介します。
00:00:24とても面白い内容になるので、さっそく見ていきましょう。
00:00:30S3、Google Cloud Storage、Backblaze B2のような標準的なオブジェクトストレージは非常にコスト効率が高いですが、それらを利用するには通常、専用のAPIやツールが必要であり、従来のアプリケーションのワークフローが崩れてしまいます。
00:00:48JuiceFSは透過的な抽象化レイヤーとして機能します。
00:00:51データとメタデータを分離し、生データのチャンクは直接クラウドプロバイダーに転送しつつ、ファイルシステムのレイアウト、権限、ディレクトリ構造はRedis、Postgres、TiKVといった高速なデータベースで管理します。
00:01:07JuiceFSが従来のクラウドゲートウェイや標準的なネットワークファイル共有と全く異なる点は、この厳格なアーキテクチャの分離と、積極的なマルチティア・キャッシュエンジンにあります。
00:01:19アプリケーションがファイルにアクセスするたびに、レイテンシの高いクラウドネットワーク経由の要求を待たせるのではなく、
00:01:26JuiceFSはファイルを小さく最適化されたブロックに分割し、ローカルのNVMeやSSDパーティションをホットなスクラッチ領域として活用します。
00:01:35アプリケーションが最初にデータを読み書きする際はネットワーク経由で行われますが、2回目以降の要求ではローカルストレージからハードウェアラインスピードで即座に応答します。
00:01:47これにより、レガシーアプリケーション、データベース、機械学習のトレーニングパイプライン、コンテナ環境を、コードを一行も書き換えることなく、オブジェクトストレージ上で直接動作させることができます。
00:01:59素晴らしい機能ですが、実際にテストしてその動作を確認してみましょう。
00:02:04今回のデモでは、リモートのS3バケットをホストとし、Redisをメタデータエンジンとして使用するローカルNASを構築します。
00:02:16最初に行うべきことは、DockerでRedisインスタンスを立ち上げることです。このコマンドで簡単に実行できます。
00:02:24次に、juicefs formatコマンドを実行してファイルシステムを初期化する必要があります。
00:02:29このステップで、データベースをストレージバケットにどのようにマッピングするかをJuiceFSに正確に伝えます。
00:02:34Redisの接続文字列、AWS S3のバケット名、およびクラウドのアクセス認証情報を渡します。
00:02:41ただし、その前に、S3バケット、アクセスキー、シークレットキーを作成しておくことを忘れないでください。
00:02:48私はあらかじめ作成しておきました。
00:02:50これで実行しても、JuiceFSはまだS3バケットの中身を何も変更しません。
00:02:56Redis内部のストレージスキーマを構成し、新しい仮想ファイルシステムに一意のUUIDを割り当てるだけです。
00:03:03フォーマット手順が完了したら、juicefs mountコマンドを使用してデバイスをローカルマシンにマウントします。
00:03:10JuiceFSにRedisインスタンスを指し示し、ローカルのディレクトリパスを指定します。
00:03:15私の場合は、ホームディレクトリ内のフォルダです。
00:03:18実行前に、重要な注意点があります。
00:03:21Macの場合、macOSは標準ではカスタムファイルシステムをサポートしていないため、先に「MacFUSE」というカーネル拡張ユーティリティをインストールする必要があります。
00:03:30これが、JuiceFSがMac OSと通信するために必要な基礎的なソフトウェアフックを提供します。
00:03:37さらに、キャッシュの空き容量比率のフラグも指定します。デフォルトではドライブ容量の20%に設定されており、これはかなり高めだからです。
00:03:47基本的には、キャッシュを保持しているローカルドライブの空き容量が一定の割合を下回ると、
00:03:55新しいキャッシュファイルの書き込みを停止し、最も古く、アクセス頻度の低いブロックを積極的にパージ(削除)するようにJuiceFSに伝えます。
00:04:01これにより、ローカルOSのディスク容量が完全になくなることを防げます。
00:04:05さて、では実行しましょう。
00:04:06コマンドを実行します。
00:04:07実行した瞬間、OSは標準のPOSIX準拠ファイルシステムとしてマウントを登録します。
00:04:15コンピュータから見ると、まるで1テラバイトの空き容量がある巨大な外付けハードドライブを接続したように見えます。
00:04:23これで、外付けドライブのように簡単にこのディレクトリにファイルをドラッグできます。
00:04:28そしてS3バケットのダッシュボードに行くと、JuiceFSがファイルを保存し、データチャンクに分割したことがわかります。
00:04:37これらすべてが舞台裏で行われ、私たちは大変な作業を何一つする必要はありません。
00:04:42キャッシュの仕組みを見せるために、定番のターミナルコマンド「dd」を使用してファイルシステムをベンチマークしてみます。
00:04:49ddを使ったことがなければ説明すると、これはrawデータのコピーに使用される組み込みユーティリティです。
00:04:55この特定のコマンドでは、「if」は入力ファイルを表し、JuiceFSドライブに追加した巨大なビデオファイルの1つを指しています。
00:05:03「of」は出力ファイルです。
00:05:06ここではデータを「/dev/null」に送信します。これはOSにおけるブラックホールのようなもので、データをコピーするのではなく単に破棄するため、ベンチマークには最適です。
00:05:17この例ではテスト目的で行っています。
00:05:19また、JuiceFSのデータチャンクのサイズに合わせてブロックサイズを4MBに設定しました。
00:05:25最後に、転送時間を正確に測定するために、コマンド全体をtimeユーティリティでプレフィックスします。
00:05:32Enterキーを押すと、アップロード直後なのでこれは「コールドリード」と呼ばれます。
00:05:38ローカルマシンにはまだコピーがありません。
00:05:41そのため、JuiceFSはインターネット経由でS3バケットにアクセスし、4MBのデータチャンクを一つずつ取得してストリーミングする必要があります。
00:05:50ご覧の通り、私の回線では最初の実行にかなりの時間がかかりました。
00:05:55しかし、2回目に全く同じコマンドを実行したときの結果を見てください。
00:05:59ほら。
00:06:00見ての通りです。
00:06:01ターミナルのプロンプトがほぼ瞬時に戻ってきました。
00:06:03キャッシュに入り、ローカルで読み込んでいるため、2回目は1秒もかかりませんでした。
00:06:10これがマルチティア・キャッシュエンジンの実際の動作です。
00:06:14最初の実行中にJuiceFSがチャンクをダウンロードしている間、バックグラウンドでローカルのNVMeスクラッチディスクに静かにコピーしていたのです。
00:06:222回目はインターネットを完全にバイパスし、ローカルのハードウェアスピードで直接データを取り出しました。
00:06:29つまり、クラウドの無限の安価なストレージ容量と、ローカルドライブのゼロレイテンシスピードを両立できるのです。
00:06:37このデモではビデオファイルを使用しましたが、これはほとんどの現実的なインフラストラクチャシナリオにも適用できます。
00:06:45DevOpsエンジニアであれば、コンテナ環境においてKubernetesクラスター間で共有の永続ストレージを提供するためにJuiceFSを使用できます。
00:06:54すべてのノードに対して高価なクラウドブロックストレージを支払うのではなく、すべてのPodが同時に全く同じJuiceFSボリュームをマウントできるのです。
00:07:03設定ファイル、アプリケーション資産、またはユーザーのアップロードデータをグローバルに共有しつつ、コストを非常に低く抑えられます。
00:07:10また、機械学習やデータサイエンスのパイプラインにとっても大きなメリットがあります。
00:07:14例えば、S3バケットに数百ギガバイトの学習画像やテキストデータがある場合、MLモデルをトレーニングするには通常、データセット全体をローカルにダウンロードする必要があり、時間とストレージを無駄にします。
00:07:30しかしJuiceFSを使えば、学習スクリプトは即座に実行を開始できます。
00:07:35パイプラインはマウントを通じてデータを順次読み込み、JuiceFSがバックグラウンドで高スループットのストリーミングとローカルキャッシュを処理するため、ローカルストレージのボトルネックなしにGPUを常に飽和状態に保てます。
00:07:49もう一つ、見せたいすごい機能があります。
00:07:51Better Stackを使えば、ファイルシステムのメトリクスを簡単に接続できます。
00:07:55JuiceFSボリュームをマウントするたびに、バックグラウンドでPrometheus互換のローカルメトリクスサーバーが静かに起動します。
00:08:03ブラウザでこのURLを開くと、キャッシュヒット率、読み込み時間、S3要求エラーなどのメトリクスがリアルタイムでテキスト形式で確認できます。
00:08:13このテレメトリデータをダッシュボードに直接送信するために、Better StackのネイティブなPrometheusスクレイピング機能を使用できます。
00:08:21まず「Sources」に移動し、JuiceFSをソースとして接続します。
00:08:25「Metrics」タブから「Prometheus scrape」を選択し、「Connect source」をクリックします。
00:08:31次はログを取り込みます。
00:08:33その前に、ngrokのようなツールを使ってローカルのメトリクスポートへの安全なパブリックトンネルを開き、ngrokのURLを貼り付ける必要があります。
00:08:43ngrokで動作させるために、詳細設定で「ngrok-skip-browser-warning」というカスタムHTTPヘッダーを追加し、値を「true」に設定する必要もあります。
00:08:53これにより、ngrokが警告ページを完全にバイパスし、Better Stackが数秒ごとにrawメトリクスを安全にスクレイプできるようになります。
00:09:01これでメトリクスの取り込みが自動的に開始されます。
00:09:05最もクールな部分をお見せしましょう。
00:09:07Better StackのAI SREに移動して、キャッシュパフォーマンスやレイテンシ、システムスループットを監視するダッシュボードを作成するようAIに頼むだけです。
00:09:19数秒で、AI SREがJuiceFSから送られてくるすべてのメトリクスを表示する美しくカスタマイズされたダッシュボードを作成してくれます。
00:09:27リアルタイムで更新されていることも確認できます。
00:09:32いかがでしょうか。
00:09:34このデモで、モダンなインフラ監視と組み合わせたJuiceFSがいかに強力かを感じてもらえたはずです。
00:09:41安価な標準クラウドストレージを、ハードウェアラインスピードで動作する無限に拡張可能なローカルドライブに変え、わずか数分で完全に自動化された監視ダッシュボードに接続することができました。
00:09:57以上となります。
00:09:58これがJuiceFSの概要です。
00:10:00JuiceFSについてどう思いましたか?
00:10:02試したことはありますか?
00:10:03使ってみたいですか?
00:10:04下のコメント欄で教えてください。
00:10:06また、このような技術的な解説動画が気に入ったら、ぜひ動画の下にある「いいね!」ボタンを押してください。
00:10:12そして、チャンネル登録も忘れずにお願いします。
00:10:15Better StackのAndrusでした。また次の動画でお会いしましょう。
Community Posts
No posts yet. Be the first to write about this video!
Write about this video