- 3FSはDeepSeekが開発した高性能なオープンソース分散ファイルシステムで、大規模データ処理と高スループットをサポートする
- 一般的なファイルシステムのように動作するが、実際には複数のマシンにデータを分散保存しており、ユーザーはそれを意識しなくてよい抽象化構造を持つ
- 4つの主要コンポーネント(Meta、Mgmtd、Storage、Client) により、メタデータ、ノード管理、実データ保存、ユーザー要求処理などを分離して運用する
- CRAQアルゴリズムによって強い一貫性と耐障害性を実現し、チェーン構造で書き込み要求を安全に伝播する
- 3FSは他の分散ファイルシステムと比較して、実運用への適用可能性と性能のスケーラビリティで差別化されている
3FSとは?
- 3FSはFire-Flyer File Systemの略で、DeepSeekが公開した分散ファイルシステム
- DeepSeekのオープンソース公開週間にあわせてリリースされた
- 一般的なファイルパスのように見えるが、実際には複数マシンに分散保存されたデータを抽象化して提供する
分散ファイルシステムとは?
- ユーザーにはローカルファイルシステムのように見えるが、実際には複数のサーバーにデータを分散保存する
- 例:
/3fs/stage/notes.txt というパスは1つのファイルのように見えるが、実際には複数のサーバーに分かれて保存されている
- ユーザーは
mkdir、catのようなコマンドで通常のファイルのように利用できる
なぜ分散ファイルシステムを使うのか?
- 大容量データ(ペタバイト級) と 高スループット をサポート
- 耐障害性(fault tolerance) と 冗長性(redundancy) により安定性を保証
- 実際の利用例:
- HDFS + Spark のような並列処理フレームワーク
- ML学習パイプラインのチェックポイント
- GoogleのColossus
- Metaの写真ストレージであるHaystack
- AI向けストレージの例: JuiceFS vs CephFS
3FSの構成要素
Meta
- ファイルパス、属性、位置などのメタデータ管理
- RPCでクライアント要求を処理(open、stat、closeなど)
- メタ情報はFoundationDBに保存される
Inodeはファイルのサイズ、所有者などの情報を保存
DirEntryはパスとinodeを結びつける(シンボリックリンクのように1つのファイルに複数のパスが存在可能)
Mgmtd
- クラスターのノード登録と状態確認を担当
- ノードは起動時に自身を登録し、定期的にハートビートを送信する
- 中央ルーターの役割を果たし、ノード間で接続を直接維持する必要がない
- CRAQチェーン構成のための設定情報も管理する
Storage
- 実データの保存を担当
- RustベースのChunkEngineを通じてディスクブロックを管理
- ディスクブロックのサイズ、オフセット、チェックサム、バージョンなどを追跡
- ユーザーはブロックと直接やり取りせず、インターフェースが提供される
- メタ情報はLevelDBに保存
- さまざまなワーカーが存在
AllocateWorkerは新しいブロックを割り当てる
PunchHoleWorkerは未使用ブロックを回収する
AioReadWorkerはio_uringキューを通じて非同期読み取りを処理する
- 書き込み時はCRAQチェーンに沿って次のノードへ転送される
Client
- ユーザー要求を処理し、他ノードと通信する
- 処理の流れ:
- Mgmtdにノード位置を問い合わせる
- Metaにファイル操作を要求する
- Storageとデータを送受信する
CRAQアルゴリズム
- Chain Replication with Apportioned Queriesの略で、強い一貫性(linearizability) を提供する
- 書き込みの流れ:
- Head → Middle → Tailの順に書き込みを伝播
- 中間段階ではデータをdirtyとしてマーク(読み取り不可)
- Tailでコミット後、逆方向にclean状態を伝播
- 読み取りの流れ:
- cleanなら即時返却
- dirtyならtailに要求して最新データを取得
性能面で見たCRAQ
- 書き込み速度は最も遅いノードに制約される
- 頻繁にアクセスされるdirtyデータではtailに読み取り要求が集中し、読み取りボトルネックが発生する可能性 がある
- 例: Zipfian workloadで性能低下
- ノード数5のクラスターでは3つにレプリケーションし、障害時の性能損失を最小化する
他の分散ファイルシステムとの違い
- 構造は似ているが、実運用への適用性と実装方式に差別化要素がある
- 比較項目:
- どのワークロードで強みを持つか
- 性能調整の柔軟性
- デプロイのしやすさ
- スループットのスケーラビリティ
- SLO内でのレイテンシ管理
- 信頼性
- 詳細な技術要素:
- ボトルネックの原因と対処方法
- ロックの有無
- 使用されているデータ構造
- 対象ハードウェア
- 使用されている耐障害アルゴリズムまたは誤り訂正方式
ブログシリーズの次のテーマ
- 実際の性能分析を通じてDeepSeekの主張を検証する予定
- 検討項目:
- FUSEボトルネックに関するDeepSeekの主張
- 性能グラフの再現可能性
- 性能低下が起きる状況の分析
- ボトルネック要素(CPU、メモリ、ディスク、ネットワーク)
- どのワークロードで性能が優れているか
- 既存システムとの比較分析
- 既存システムの問題解決手法との違い
- 直接的な改善可能性の検討
追加資料
2件のコメント
自分も悩んでいた問題だったのですが、これを..
Hacker Newsの意見
S3FSはスケーラブルなメタデータファイルシステムで、さまざまな分散ファイルシステムと比較されている
これらのシステムを評価する際には、理論的限界、効率性、実際上の限界を考慮する必要がある
SeaweedFSとの比較に関心がある
CephFSを使わない理由についての質問
JuiceFSとの比較についての質問
小規模事業者やホームラボのユーザーとしては、大規模な分散ファイルシステムを使う機会はなさそうである
複雑な構成だが、ディープラーニングのワークロードに必須の機能が何なのかは明確ではない
DeepSeekの分散ファイルシステムを無効化するのがどれほど簡単かについての質問
複数のデバイスに分散したZFSドライブでこれを再現できるかという質問