SeaweedFS と JuiceFS アーキテクチャの類似点と相違点の分析

SeaweedFS は効率的な分散型ファイル ストレージ システムです。初期の設計プロトタイプは、小さなデータ ブロックをすばやく読み書きする機能を備えた Facebook の Haystack を参考にしています。この記事は、読者が SeaweedFS と JuiceFS の設計と機能の違いを比較することで、より適切な選択を行うのに役立ちます。

SeaweedFS システム構成

SeaweedFS は、下層のファイル ストレージ用のボリューム サーバー、クラスター管理用のマスター サーバー、および上位の機能を提供するオプションのファイラー コンポーネントの 3 つの部分で構成されます。

ボリューム サーバーとマスター サーバー

システム運用に関しては、Volume Server と Master Server が一緒にファイル ストレージの役割を果たします。ボリューム サーバーはデータの書き込みと読み取りに重点を置いていますが、マスター サーバーはクラスターおよびボリューム管理サービスである傾向があります。

データを読み書きする場合、SeaweedFS の実装は Haystack の実装と似ています. ユーザーによって作成されたボリュームは、大きなディスク ファイルです (下図のスーパーブロック)。このボリュームでは、ユーザー (下図の針) によって書き込まれたすべてのファイルが、この大きなディスク ファイルにマージされます。

データの書き込みを開始する前に、呼び出し元は SeaweedFS (マスター サーバー) に申請する必要があり、その後、SeaweedFS は現在のデータ ボリュームに従ってファイル ID (ボリューム ID とオフセットで構成される) を返します。メタデータ情報 (ファイル長、チャンク、その他の情報) も書き込まれます。書き込みが完了すると、呼び出し元はファイルと返されたファイル ID を関連付けて、外部システム (MySQL など) に保存する必要があります。データを読み取る場合、File ID にはファイルの位置 (オフセット) を計算するためのすべての情報が既に含まれているため、ファイルの内容を効率的に読み取ることができます。

ファイラー

上記の基礎となるストレージ ユニットの上に、SeaweedFS は Filer と呼ばれるコンポーネントを提供します。Volume Server と Master Server を下向きに接続することで、豊富な機能と機能 (POSIX サポート、WebDAV、S3 インターフェイスなど) を提供します。JuiceFS と同様に、Filer も外部データベースに接続してメタデータ情報を保存する必要があります。

説明の便宜上、以下で参照する SeaweedFS には Filer コンポーネントが含まれています。

JuiceFS システム構造

JuiceFS は、「データ」と「メタデータ」に別のストレージ アーキテクチャを採用しています. ファイル データ自体はセグメント化されてオブジェクト ストレージ (Amazon S3 など) に保存されますが、メタデータはユーザーが選択したデータベース (など) に保存されます。 Redis、MySQL)。JuiceFS は、同じデータベースとオブジェクト ストレージを共有することで、強力な一貫性が保証された分散ファイル システムを実装し、「完全な POSIX 互換性」と「高いパフォーマンス」などの多くの機能も備えています。

メタデータの比較

SeaweedFS と JuiceFS はどちらも、外部データベースを介したファイル システムのメタデータ情報の保存をサポートしています。データベースのサポートに関しては、SeaweedFS は最大24 のデータベースをサポートします。JuiceFS にはデータベース トランザクション機能に対する高い要件があり (以下を参照)、現在合計 3 種類のトランザクション データベースをサポートしています。

アトミック操作

すべてのメタデータ操作の原子性を確保するために、JuiceFS は実装レベルでトランザクション処理機能を備えたデータベースを使用する必要があります。ただし、SeaweedFS は、名前変更操作を実行するときに一部のデータベース (SQL、ArangoDB、および TiKV) のトランザクションのみを有効にし、データベースのトランザクション機能の要件が低くなります。同時に、Seaweed FS は、名前変更操作中にメタデータをコピーするときに、元のディレクトリまたはファイルをロックしないため、プロセスで更新されたデータが失われる可能性があります。

変更ログ

SeaweedFS は、すべてのメタデータ操作の変更ログを生成します。このログは、データ レプリケーション (以下を参照)、操作の監査、およびその他の機能にさらに使用できますが、JuiceFS はまだこの機能を実装していません。

収納比較

前述のように、SeaweedFS のデータ ストレージはボリューム サーバー + マスター サーバーによって実装され、小さなデータ ブロックの「マージ ストレージ」や「消去コード」などの機能をサポートします。JuiceFS のデータ ストレージはオブジェクト ストレージ サービスに基づいており、関連する機能もユーザーが選択したオブジェクト ストレージによって提供されます。

ファイル分割

データを保存するとき、SeaweedFS と JuiceFS の両方がファイルをいくつかの小さなブロックに分割し、それらを基盤となるデータ システムに永続化します。SeaweedFS はファイルを 8 MB のブロックに分割し、非常に大きなファイル (8 GB を超える) の場合は、チャンク インデックスも基盤となるデータ システムに保存します。JuiceFS はまず 64MB のチャンクに分解され、次に 4MB のオブジェクトに分解されます. 内部スライスの概念により、ランダム書き込み、シーケンシャル読み取り、繰り返し書き込みのパフォーマンスが最適化されます. (詳細は、読込クリア依頼処理の流れをご覧ください

階層ストレージ

新しく作成されたボリュームの場合、SeaweedFS はデータをローカルに保存しますが、古いボリュームの場合、SeaweedFS はクラウドへのアップロードをサポートして、ホット データとコールド データを分離します。この点で、JuiceFS は外部サービスに依存する必要があります。

データ圧縮

JuiceFS は LZ4 または ZStandard を使用して書き込まれたすべてのデータを圧縮することをサポートしていますが、SeaweedFS は書き込まれたファイルの拡張子とファイル タイプに応じて圧縮するかどうかを選択します。

ストレージの暗号化

JuiceFS は、転送中の暗号化 (転送中の暗号化) と保存中の暗号化 (保存中の暗号化) をサポートしています. ユーザーが静的暗号化を有効にする場合、ユーザーは自己管理キーを渡す必要があり、書き込まれるすべてのデータはこのキーに基づいています. . 詳しくはデータの暗号化」をご覧ください。

SeaweedFS は、転送中の暗号化と保存中の暗号化もサポートしています。データの暗号化を有効にすると、ボリューム サーバーに書き込まれるすべてのデータがランダム キーで暗号化され、対応するランダム キー情報が「メタデータ」を保持する「ファイラー」によって管理されます。

アクセス規約

POSIX 互換性

JuiceFSは POSIX と完全に互換性がありますが、SeaweedFS は POSIX と部分的にしか互換性がなく ( "Issue 1558"Wiki )、機能はまだ改善されています。

S3 プロトコル

JuiceFS は、 MinIO S3 ゲートウェイを介してS3 ゲートウェイの機能を実装します。JuiceFS 内のファイルに S3 互換の RESTful API を提供し、s3cmd、AWS CLI、MinIO クライアント (mc)、およびその他のツールを使用して、JuiceFS に保存されているファイルをマウントするのが不便な場合に管理できます。

SeaweedFS は現在、約 20 の S3 API をサポートしており、読み取り、書き込み、クエリ、削除などの一般的に使用される要求をカバーしており、一部の特定の要求 (読み取りなど) の機能拡張も行っています. 詳細については、Amazon-S3-API を参照してください.

WebDAV プロトコル

JuiceFS と SeaweedFS はどちらも WebDAV プロトコルをサポートしています。

HDFS の互換性

JuiceFS はHDFS API と完全に互換性がありますHadoop 2.x および Hadoop 3.x との互換性だけでなく、Hadoop エコシステムのさまざまなコンポーネントと互換性があります。SeaweedFS はHDFS API との基本的な互換性を提供しますが、一部の操作 (turncate、concat、checksum、および拡張属性など) はまだサポートしていません。

CSI ドライバー

JuiceFSSeaweedFSはどちらも「Kubernetes CSI ドライバー」を提供し、ユーザーが Kubernetes エコシステムで対応するファイル システムを使用できるようにします。

拡張子

クライアントキャッシュ

JuiceFS には、メタデータからデータ キャッシングまでのすべての部分をカバーするさまざまなクライアント側キャッシング戦略があり、ユーザーは独自のアプリケーション シナリオ (詳細) に従って調整できますが、SeaweedFS にはクライアント側キャッシング機能がありません。

クラスタ データのレプリケーション

複数のクラスタ間のデータ レプリケーションについて、SeaweedFS は 2 つの非同期レプリケーション モード、「アクティブ-アクティブ」と「アクティブ-パッシブ」をサポートしています. どちらのモードも、変更ログを渡し、メカニズムを再適用することで、異なるクラスタ内のデータ間の一貫性を実現します.同じ変更が複数回繰り返されないようにするための署名情報。クラスタ内に 2 つ以上のノードがある Active-Active モードでは、SeaweedFS の一部の操作 (ディレクトリの名前変更など) にいくつかの制限が適用されます。

JuiceFS はクラスター間のデータ同期をネイティブにサポートしていないため、メタデータ エンジンとオブジェクト ストレージの独自のデータ レプリケーション機能に依存する必要があります。

クラウド上のデータ キャッシュ

SeaweedFS は、クラウド上のオブジェクト ストレージのキャッシュとして使用でき、コマンドによる手動のデータ プレヒートをサポートします。キャッシュされたデータへの変更は、非同期でオブジェクト ストレージに同期されます。JuiceFS はファイルをオブジェクト ストレージにチャンクで格納する必要があり、オブジェクト ストレージに既に存在するデータのキャッシュ アクセラレーションはまだサポートしていません。

ごみ箱

JuiceFS はデフォルトでごみ箱機能を有効にします。これにより、ユーザーが削除したファイルが自動的に JuiceFS ルート ディレクトリの下の .trash ディレクトリに移動され、データをクリーンアップする前に指定された時間だけデータが保持されます。SeaweedFS はまだこの機能をサポートしていません。

運用・保守ツール

JuiceFS には、juciefs stats と juicefs profile という 2 つのサブコマンドが用意されており、ユーザーは現在のパフォーマンス指標を表示したり、特定の期間のパフォーマンス指標をリアルタイムで再生したりできます。同時に、JuiceFS はメトリクスインターフェイスも外部で開発しており、ユーザーは監視データを Prometheus と Grafana に簡単に接続できます。

SeaweedFS は、Prometheus と Grafana を同時に接続する 2 つの方法 (プッシュとプル)を実現し、雑草シェルの対話型ツールを提供して、ユーザーが一連の操作と保守タスク (現在のクラスター ステータスの表示、ファイル リストの一覧表示など) を容易に実行できるようにします。など)。

他の

  • リリース時期に関しては、SeaweedFS は 2015 年 4 月にリリースされ、現在合計 16.4K スターを獲得しています。一方、JuiceFS は 2021 年 1 月にリリースされ、これまでに合計 7.3K スターを獲得しています。

  • プロジェクトに関しては、JuiceFS と SeaweedFS の両方がより商業的に使いやすい Apache License 2.0 を採用しています. SeaweedFS は主に Chris Lu によって維持され、JuiceFS は主に Juicedata によって維持されています.

  • JuiceFS と SeaweedFS はどちらも Go 言語で記述されています。

比較リスト

海藻FS ジュースFS
メタデータ マルチエンジン マルチエンジン
メタデータ操作の原子性 保証されない データベーストランザクションによる保証
変更ログ もつ なし
データストレージ 含む 外部サービス
消去コード サポート 外部サービスに頼る
データマージ サポート 外部サービスに頼る
ファイル分割 8MB 64MB + 4MB
階層ストレージ サポート 外部サービスに頼る
データ圧縮 サポートされています (拡張子に基づく) サポート(グローバル設定)
ストレージの暗号化 サポート サポート
POSIX 互換性 基本 全体
S3 プロトコル 基本 基本
WebDAV プロトコル サポート サポート
HDFS の互換性 基本 全体
CSI ドライバー サポート サポート
クライアントキャッシュ サポートしません サポート
クラスタ データのレプリケーション 双方向非同期、マルチモード サポートしません
クラウド上のデータ キャッシュ サポート (手動同期) サポートしません
ごみ箱 サポートしません サポート
運用・保守ツール 供給 供給
リリース時間 2015.4 2021.1
メインメンテナー パーソナル (クリス・ルー) 会社(ジュースデータ株式会社)
言語 行く 行く
オープンソース契約 アパッチ ライセンス 2.0 アパッチ ライセンス 2.0

お役に立てれば、私たちのプロジェクトJuicedata/JuiceFSに注目してください! (0ᴗ0✿)

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/5389802/blog/7634308