インフラ・DevOps
ZeroFS vs. Amazon S3 Files
ZeroFS vs. Amazon S3 Files (zerofs.net)
要約
ZeroFSとAmazon S3 Filesは、どちらもオブジェクトストレージを基盤としたPOSIXファイルシステムを提供しますが、その内部構造とアプローチは大きく異なります。S3 FilesはファイルとS3オブジェクトの1対1のマッピングを維持するのに対し、ZeroFSはパフォーマンスとセキュリティのためにデータを圧縮・暗号化してセグメントオブジェクトにパックし、直接的なS3アクセスを犠牲にします。
全文翻訳
← ブログに戻る
ZeroFS vs. Amazon S3 Files
2026年7月11日 · Pierre Barre · 8分読書
Amazon S3 FilesとZeroFSは、オブジェクトストレージにバックエンドを持つPOSIXファイルシステムを公開しますが、共有インターフェースは反対のバケットレイアウトを隠しています。選択はバケットの役割にかかっています。ファイルが通常のS3オブジェクトのままでなければならない場合、S3 Filesはそのアイデンティティを維持します。バケットが内部永続レイヤーになりうる場合、ZeroFSは直接S3アクセスと引き換えにパッキング、圧縮、クライアントサイド暗号化を行います。
ストレージレイアウト
Amazon EFSを使用して構築されたS3 Filesの定義的なプロパティは、マウント上のimages/cat.jpgがバケット内の同じキーに対応し、変更が双方向に流れることです。アクティブなデータとメタデータは、AWSが「高性能ストレージ」と呼ぶ低レイテンシ層に存在します。その1ファイル、1オブジェクトのアイデンティティは、ZeroFSストレージフォーマットでは意図的に欠落しています。メタデータはLSMツリーに格納され、ファイルコンテンツはエクステントに分割され、圧縮・暗号化され、不変のセグメントオブジェクトにパックされます。S3クライアントは、マウントされたファイルではなく、不透明な内部レイアウトを見ます。
フローチャート TB
サブグラフ CLIENTS["クライアントレイヤー"]
NFS["NFSクライアント"]
P9["9Pクライアント"]
NBD["NBDクライアント"]
WEB["Webブラウザ"]
end
サブグラフ CORE["ZeroFSコア"]
NFSD["NFSサーバー"]
P9D["9Pサーバー"]
NBDD["NBDサーバー"]
WEBUI["Web UI"]
VFS["仮想ファイルシステム"]
SEG["セグメントストア:圧縮・暗号化されたファイルデータフレーム"]
SLATE["LSMツリー:メタデータと32バイトエクステントポインタ"]
CACHE["ローカルキャッシュ"]
NFSD --> VFS
P9D --> VFS
NBDD --> VFS
WEBUI --> VFS
VFS --> SEG
VFS --> SLATE
SEG --> CACHE
SLATE --> CACHE
end
サブグラフ BACKEND["ストレージバックエンド"]
SEGOBJ["不変セグメントオブジェクト"]
SSTS["メタデータSSTとマニフェスト"]
S3["S3オブジェクトストア"]
CACHE --> SEGOBJ
CACHE --> SSTS
SEGOBJ --> S3
SSTS --> S3
end
NFS --> NFSD
P9 --> P9D
NBD --> NBDD
WEB --> WEBUI
ZeroFSは、ファイルデータとファイルシステムメタデータを別々のパスに保持し、両方がオブジェクトストアに到達するまで続きます。両方のマウントはクライアントページキャッシュを使用します。以下のライトパス行は、クライアントがサーバーに書き込みを送信した後に始まります。
Amazon S3 Files
ZeroFS
ストレージモデル
バケットと同期されたAWS管理の高性能ストレージ。内部レイアウトは文書化されていません。
オブジェクトストレージ上のLSMツリーと不変データセグメント
オブジェクトレイアウト
1つのファイルが1つのS3オブジェクトにマッピングされます。
メタデータはLSMツリーに、ファイルデータフレームはセグメントにパックされます。
ライトパス(クライアントキャッシュ後)
高性能ストレージへのNFS書き込み、即時耐久性。書き込み非アクティブ後の非同期S3エクスポート。
9P経由で、fsyncはデータセグメントをアップロードし、LSMメタデータをオブジェクトストレージにフラッシュしてから成功を返します。
コールドリードとリードフォアード
Linux NFSリードフォアード、ディレクトリメタデータのインポート、オプションの小ファイルインポート、または直接S3リード。
LSMルックアップ、その後適応型オブジェクトとクロスセグメントフレームのプリフェッチ。
ファイルへのS3 APIアクセス
はい。ファイルシステムへの変更は非同期エクスポート後に表示されます。
いいえ。ファイルの読み取りにはZeroFSと暗号化パスワードが必要です。
クライアントインターフェース
NFS 4.1/4.2
ファイルには9PまたはNFS、ブロックにはNBD。
オブジェクトストアの選択肢
Amazon S3
S3、S3互換ストア、Azure Blob、またはGoogle Cloud Storage。
コストモデル
S3プラス高性能ストレージ、ファイルアクセス、同期料金。
オブジェクトストレージとリクエスト、 plus ZeroFSを実行するコンピュートとキャッシュ。
オブジェクトの相互運用性
1対1のマッピングを維持することは、マウントを通じて書き込まれたファイルが最終的に通常のS3オブジェクトになることを意味します。エクスポートは書き込みがない状態が60秒続いた後に開始されるため、継続的な書き込みはS3の可視性を遅延させます。エクスポートが完了すると、既存のツールはGetObjectでオブジェクトを読み取ることができ、S3側の変更はファイルシステムに逆流します。同期前に両方の側が同じファイルを変更した場合、S3が勝ち、ファイル側のバージョンはlost+foundに移動します。ZeroFSのパス名はS3 APIで取得できず、セグメントをParquetとしてスキャンすることもできません。その代わりに、小ファイルはそれぞれ1つのデータオブジェクトやPUTを必要としません。それらのエクステントは圧縮、暗号化され、一緒にパックされます。バケットと生のローカルキャッシュには暗号文が含まれているため、マウントまたはリカバリにはZeroFSとその暗号化パスワードが必要です。暗号化ドキュメントには、表示されたままの構造メタデータがリストされています。他のアプリケーションがファイルシステム書き込み後に即座にS3の可視性を必要とする場合、どちらのモデルもそれを実現しません。S3 Filesは非同期にエクスポートし、ZeroFSはマウントされたファイルをS3 API経由で公開しません。
コールドアクセス
最初のS3 Filesアクセスはインポートをトリガーする可能性があります。ディレクトリをリストすると、すべてのオブジェクトのメタデータがロードされ、インポートしきい値(デフォルトで128 KiB)以下のファイルが非同期に高性能ストレージにコピーされます。AWSによると、1,000オブジェクトの最初のリスト表示には数秒かかる場合があります。より大きなファイルはS3に残され、少なくとも1 MiBの読み取りは直接S3に行われます。ZeroFSは代わりに、読み取りからローカルRAMとディスクキャッシュを生成・アップロードします。新しくシールされたセグメントは、すでに手元にあるバイトからキャッシュに入力されるため、書き込み後の読み取りにはGETは不要です。キャッシュはライトバックではなく、セグメントがシールされメタデータがフラッシュされるときに書き込みはオブジェクトストレージに到達します。コールドミスは、LSMツリーを通じて要求されたエクステントを解決し、隣接するフレームを範囲GETに結合します。ファイル全体やディレクトリ内のすべての小ファイルをインポートすることなく、最初のオブジェクトストア往復料金を支払いますが、作業セットがローカルに収まると、データ読み取りはS3リクエストをほとんど生成しません。両方のパスはシーケンシャルトラフィックのためにリードフォアードを追加します。ZeroFSはセグメントオブジェクト内およびセグメント間でプリフェッチし、S3 FilesはLinux NFSリードフォアードと直接S3ルーティングに依存します。
コスト
どちらの場合も、S3ストレージとリクエスト料金が適用されます。S3 Filesは、高性能ストレージ層に対しても料金を請求します。GBあたりの常駐ストレージとGBあたりの読み書き料金です。公開時点のAWSの価格例では、これらのレートが使用されています。
S3 Filesの料金
AWSの例で使用されたレート
高性能ストレージ
$0.30/GB-月
ファイルには10 KiBの最小請求サイズがあります。
ファイル読み取り
$0.03/GB
高性能ストレージからの読み取り(S3へのエクスポートを含む)。
ファイル書き込み
$0.06/GB
高性能ストレージへの書き込み(S3からのインポートを含む)。
高性能ストレージに常駐する量は、設定されたインポートしきい値と有効期限ウィンドウによって異なります。リスト表示はメタデータと対象となる小ファイルをインポートし、読み取りはより多くのデータをロードする可能性があり、ファイルメタデータは期限切れになりません。インポートはファイルシステム書き込みとして測定され、エクスポートは読み取りとして測定されます。最小操作サイズは、ファイルデータの場合は32 KiB、メタデータの場合は4 KiBです。AWSはCloudWatchで常駐バイト数とinode数を報告しますが、バケットサイズだけでは請求額を予測できません。
例:10,000 GiBを保存し、それを1回読み取る
これは例示的なシナリオであり、一般的なコスト比較ではありません。us-east-1のS3 Standardで10,000請求可能GB(GiB)の論理データを使用し、1 GBあたり$0.023/月です。直接ケースはS3内のデータからの1 MiB読み取りを想定し、常駐ケースは1 MiB未満の読み取りで、すべてのデータも高性能ストレージにあると想定しています。インターネットイーサネットは除外されます。
ケース
ストレージ/月
1回読み取り
例示的な小計
ZeroFS (2:1)
~$115 + オーバーヘッド
S3 GETs
~$115 + インフラストラクチャ
ZeroFS (1:1)
~$230 + オーバーヘッド
S3 GETs
~$230 + インフラストラクチャ
S3 Files (1 MiB直接読み取り)
~$230 + メタデータ
$1.17 + S3 GETs
~$231 + メタデータとリクエスト
S3 Files (小規模常駐読み取り)
$3,230
$300
$3,530 + $600 (インポートされた場合)
ZeroFSの数値は推定値です。圧縮によりペイロードバイト数が削減されますが、メタデータ、一時的なコンパクションデータ、リクエストがコストに追加されます。理想的な8 MiB GETサイズでは、ファイルデータの読み取りコストは、2:1圧縮で約$0.26、1:1圧縮で$0.51ですが、メタデータや短時間/ランダムな読み取りは含まれません。ZeroFSは、サーバー1台(高可用性の場合は2台)とローカルディスクキャッシュも必要です。各ノードは、設定されたメモリキャッシュ以外に約2 GBのRAMが必要です。したがって、S3 Filesは大規模ファイルストリーミングではコストが低くなる可能性があります。データが高性能ストレージにインポートされたり、そこを通過したりすると、差は大きくなります。S3 Files経由で10,000 GiBを書き込むと、$600のファイルシステム書き込みと$300のエクスポートが追加され、1か月の常駐には$3,000が追加されます。実際のコストは、ファイル数、圧縮率、I/Oサイズ、常駐期間、fsync頻度によって異なります。