分散ファイルストレージの仕組みを解説
IPFSやCephなどの分散ファイルストレージシステムにおける、レプリケーション、一貫性、フォールトトレランスの仕組みを解説します。
個人情報保護委員会(PPC)は2024年以降、クラウドストレージを利用した個人データの越境移転に関する監視を強化している。分散ストレージシステムがどのようにデータを配置・複製・保護するかを理解することは、個人情報保護法(APPI)に準拠したサービス設計の前提条件だ。分散ファイルストレージはデータを多数のノードに分散させ、単一マシンがボトルネックや単一障害点にならないようにする。
レプリケーションとイレイジャーコーディング
ノード障害から保護する2つの戦略がある。レプリケーションは完全なコピーを複数保持する。Cephのデフォルトは3倍レプリケーションで、1GBのオブジェクトが3GBの生ストレージを消費する。単純で読み取りが速いが、ストレージコストが高い。イレイジャーコーディングはReed-Solomonコードを使ってデータをk個のデータチャンクとm個のパリティチャンクに分割する。(10,4)方式なら14チャンクを保存して4つの障害に耐えられ、オーバーヘッドは200パーセントでなく40パーセントで済む。MinIOはイレイジャーコーディングをデフォルトとし、Backblaze Vaultsは17+3のReed-Solomonを使用する。
一貫性ハッシュとデータ配置
どのノードがどのオブジェクトを保存するかの決め方として、一貫性ハッシュがある。Karger他(1997年)の学術研究で紹介され、DynamoDBとCassandraで広まったこの手法は、キーをリングにハッシュし各範囲をノードにマッピングする。ノードの追加や削除時に移動するキーの割合が最小限に抑えられる。CephはCRUSH(Controlled Replication Under Scalable Hashing)を使い、トポロジーマップ(ラック、行、データセンター)に基づいてオブジェクトを配置し、レプリカが多様な障害ドメインに分散するよう保証する。
一貫性モデル:強一貫性、結果整合性、因果整合性
CAP定理は一貫性・可用性・分断耐性を同時に持てないことを述べる。強一貫性(線形化可能性)は読み取りが最新の書き込みを見ることを意味し、SpannerやetcdはPaxosやRaftを介して提供する。結果整合性(DynamoDB、Cassandra、一部のS3操作)はレプリカが時間をかけて収束し、伝播中は古い読み取りが発生しうる。因果一貫性は完全な線形化可能性なしに原因と効果の順序を保持する。ファイルストレージはメタデータに結果整合性を許容しつつ、同じオブジェクトの書き込み後読み取りに強一貫性を保つことが多い。
Cephアーキテクチャ:OSD、Monitor、Manager、MDS
Cephは4種類のデーモンを実行する。OSD(Object Storage Daemon)がオブジェクトを保存・複製し、クラスターは通常10〜1,000個のOSDを持つ。Monitor(MON)がPaxosでクラスター状態を管理し、3または5台でクォーラムを形成する。ManagerがメトリクスとダッシュボードUIを提供する。MDSがCephFSのPOSIXファイルシステム層を担当する。RADOS Gateway(RGW)がS3とSwift APIを提供し、RBDがOpenStackのボリュームとVMディスクを支える。
HDFSとそのHadoopのレガシー
HDFS(Hadoop Distributed File System)はMapReduceとSparkジョブの大規模逐次読み取りに特化している。ファイルは128MBまたは256MBのブロックに分割され、各ブロックはDataNode全体にデフォルトで3倍複製される。NameNodeがメタデータをメモリに保持するため、スケールは1NameNodeあたり約5億ファイルに制限される。小さなファイルには不向き(メタデータが支配的)だが、TBスケールのデータセット分析には優れている。クラウド時代においてコンピュートとストレージが分離するに伴い、オブジェクトストレージに置き換えられつつある。
コンテンツアドレスストレージ:IPFSとFilecoin
IPFS(InterPlanetary File System)は場所でなくコンテンツのハッシュ(CID:Content IDentifier)でコンテンツを識別する。同じ内容のファイルを保存すれば誰でも同じCIDが生成される。Kademliaベースのデータ分散ハッシュテーブル(DHT)を使ってコンテンツを保持するノードを検索する。FilecoinはPoRep(Proof-of-Replication)とPoSt(Proof-of-Spacetime)による経済的インセンティブを追加する。DHT検索レイテンシ(数百ミリ秒〜数秒)のためインタラクティブなワークロードには低速だ。
オブジェクトストレージ:S3、R2、B2、MinIO
オブジェクトストレージはフラットなキーバリューAPIを提供する。この単純さにより大規模なスケールが実現し、AWS S3は11ナインの耐久性で数兆のオブジェクトを保存する。Cloudflare R2、Backblaze B2、Wasabi、DigitalOcean SpacesがS3 APIを実装している。MinIOはオープンソースAGPL v3でオンプレミス動作する。APIが単純で、料金が明確で、耐久性が信頼できるため、オブジェクトストレージはクラウドストレージ市場でほぼ勝者となっている。
障害ドメインとデータ多様性
3つのレプリカを配置しても、3つが同じラックにあればラックのスイッチ障害で全滅する。障害ドメイン認識とは、レプリカを異なるラック・行・データセンターに分散させることだ。CephのCRUSHルールは「少なくとも2コピーを異なるラックに、1コピーを異なるデータセンターに」をエンコードする。S3 Cross-Region Replication(CRR)は非同期でオブジェクトを別リージョンに複製し、個人情報保護法が求めるデータ所在地の要件への対応にも有用だ。
ファイル転送サービスへの実践的示唆
ファイル転送サービスは通常、POSIXファイルシステムでなくオブジェクトストレージの上に構築する。S3互換バックエンド(AWS S3、Cloudflare R2、MinIO)が耐久性とスケールを処理する。HexaTransferはクライアントサイドAES-256-GCM暗号化を備えたS3互換バックエンドを使用しており、分散ストレージ層が耐久性を処理しながら、アプリ層がファイル内容をすべての階層からプライベートに保つ。詳細は https://hexatransfer.com で。無料、アカウント不要、最大10GB。
エンドツーエンド暗号化で大容量ファイルを安全に送信
エンドツーエンド暗号化で最大10GBのファイルを無料で転送。アカウント不要。ファイルはアップロード前にブラウザで暗号化されるため、他の誰にも読まれません。
ファイルを送信