オブジェクトストレージとブロックストレージ、どちらが最適?
性能、コスト、スケーラビリティ、ユースケースの観点から、ファイル転送アプリケーション向けのオブジェクトストレージとブロックストレージを比較します。
オブジェクトストレージが有利なのは、ユーザーがアップロードしたファイル・静的アセット・バックアップ・アーカイブです。基本的にHTTP経由でアクセスし、インプレースで変更することがほとんどないものすべてです。ブロックストレージが有利なのは低レイテンシなランダム書き込みが必要な場合です。データベース・ブートボリューム・高トランザクションのファイルシステムです。ファイル転送のワークロードには、ほぼ常にオブジェクトストレージが正解です。水平スケール可能で、ブロックストレージの月0.08〜0.125ドル/GBに対して0.015〜0.023ドル/GBのコスト、そして再パーティショニングなしでペタバイト規模のバケットを扱えます。
内部でどう違うか
ブロックストレージは生のデバイス(LUNまたはEBSボリューム)を公開し、OSがext4・XFS・NTFSでフォーマットします。読み書きはiSCSI・NVMe-oF・SCSIを経由して通常4KBまたは16KBの固定サイズのブロックで行われます。OSがファイルシステムを所有し、ブロックデバイスはファイルではなくオフセットのみを知っています。
オブジェクトストレージはHTTP API(S3・Azure Blob・GCS)を公開し、各オブジェクトはキー・バイト・メタデータを持ちます。内部にファイルシステムはなく、オブジェクトはPUTとGETで操作するアトミックな単位です。書き込みは新しいバージョンを生成します。2GBオブジェクトの100万バイト目だけを変更することはできず、オブジェクト全体を書き直す必要があります。この不変性は機能です。マルチリージョンレプリケーション・バージョニング・ライフサイクルルールを可能にし、ブロックストレージでは簡単に実現できません。
比較表
| 側面 | オブジェクトストレージ | ブロックストレージ | |-----------|----------------|---------------| | 典型的なAPI | S3 HTTP REST | POSIX + iSCSI/NVMe | | コスト(AWSホット層) | 0.023ドル/GB/月 | 0.08ドル/GB/月(gp3) | | 最大単位 | オブジェクト当たり5TB | EBSボリューム当たり64TiB | | レイテンシ | 10〜100ms | サブミリ秒 | | 同時読み取り | 無制限 | 通常は1ホストのみ | | 耐久性 | イレブンナイン(S3) | 5〜6ナイン(EBS) | | 向いている用途 | ファイル・メディア・バックアップ | データベース・ブートディスク | | 向いていない用途 | 大きなファイルへのランダム書き込み | 1ボリュームを超える水平スケール |
スループット対レイテンシ:勝者は異なる
gp3のEBSボリュームは4KBの読み取りを1ms未満で処理しますが、S3の同じ4KBのGETはリージョンにより20〜80msかかります。PostgreSQLの書き込み先行ログが毎秒5,000トランザクションを処理する場合、このレイテンシ差は致命的です。ユーザーが500MBの.zipをダウンロードする場合、初回バイト遅延はスループットの背後に消えるため無関係です。
シーケンシャルスループットでは、スケールではオブジェクトストレージが勝つことが多いです。S3はプレフィックスあたり毎秒5,500 GETリクエストでバケットを処理でき、リクエストレートパーティショニング(ハッシュプレフィックスキー)で数万に達します。単一のgp3ボリュームは1,000MB/sと16,000 IOPSで頭打ちになります。10人のユーザーが10GBのファイルを同時にダウンロードする場合、オブジェクトストレージはそれぞれの回線を飽和させ、ブロックストレージはボトルネックになります。
スケールにおけるコスト
コールドメディア100TBの場合:
- S3 Standard:月230,000円
- S3 Standard-IA:月125,000円
- S3 Glacier Instant Retrieval:月40,000円
- S3 Glacier Deep Archive:月9,900円
- EBS gp3:月800,000円
- EBS st1(スループット最適化HDD):月450,000円
ブロックストレージは階層化しません。年に1回しか触れないデータにも最高アクセス価格を払います。オブジェクトストレージのライフサイクルルールはオブジェクトを自動的に移動します。30日はホット、60日でStandard-IA、90日後にGlacier。7日間の有効期限付きでアップロードを保存するファイル転送サービスには、Expirationルール付きのオブジェクトストレージがEBSバックのサーバーより大幅に安くなります。
整合性と並行性
S3は現在、PUTとDELETEに対してグローバルに強い書き込み後読み取り整合性を提供しています。Azure BlobとGCSも同様です。オブジェクトストレージへの歴史的な批判の1つが解消されました。以前は新しくアップロードされたファイルが数秒間404を返す「結果整合性」の問題がありました。
ただし、同時書き込みはまだ問題になります。ブロックストレージは通常単一の書き込み者を前提とし、マルチアタッチモードは存在しますが複雑さを増します。オブジェクトストレージは100万クライアントが同時にPUTでき、最後の書き込みが勝つセマンティクスです(またはバージョニングで全部保持)。2人のユーザーが同じキーで異なるファイルをアップロードするファイル共有システムでは、バケットのバージョニングが両方を保持します。
ファイル転送アプリがブロックストレージも必要な場合
注意点:オブジェクトストレージを提供するアプリケーション自体はしばしばブロックバックのホスト上で動作します。ファイルアップロードAPIはローカルディスクを一時的なスプールに使い(マルチパートチャンク・ウイルススキャン)、メタデータストレージ(通常EBS上のPostgreSQL)とログが必要です。オブジェクト自体はS3/R2/Blobに行き、その周りの仕組みはブロックに置かれます。
高スループットのストリーミングアップロードには、インメモリパイプラインがディスクより優れています。aws-sdk-jsやboto3のようなライブラリは、ローカルディスクに一切書き込まないストリーミングマルチパートアップロードをサポートしています。適切にチューニングされたアップロードサービスは、500MB未満のRAMとゼロの一時ファイルで5GBのファイルをクライアントからオブジェクトストレージにプッシュできます。
メタデータ:気づきにくい差
オブジェクトストレージは各オブジェクトにメタデータを保持します。システムメタデータ(サイズ・mtime・etag)・ユーザーメタデータ(任意のキーと値のペア、x-amz-meta-*ヘッダー)・タグです。S3 Object Lambda・Inventoryレポート・DynamoMBとの組み合わせでメタデータで検索できます。ブロックストレージはメタデータを完全にファイルシステムに任せるため、1,000万ファイルにタグを付けるにはカスタムデータベースが必要です。
「先週フランスのユーザーがアップロードした100MB超のファイルをすべて見つけて」という質問に即座に答えるシステムには、オブジェクトメタデータ+ParquetインベントリによりAthenaで数秒でクエリできます。NFSマウントのブロックボリュームに対する同じ質問は何時間もかかるfindコマンドになります。
暗号化とアクセス制御
両方のストレージタイプはAES-256による保存時の暗号化をサポートします。オブジェクトストレージはオブジェクトごとのアクセス制御を簡単にします。バケットポリシー・事前署名URL・オブジェクトACL・IAM条件です。ブロックストレージのアクセスはより粗いです。ボリューム全体がアタッチされているかどうかです。
時間制限付きダウンロードリンクによる安全なファイル共有には、事前署名S3 URL(最大7日間有効)が標準パターンです。サーバーサイドで平文を一切公開しない転送には、アップロード前のクライアントサイド暗号化がどのオブジェクトストアでも機能します。HexaTransferはAES-256-GCMでブラウザ内で暗号化し、暗号文のみを保存します。オブジェクトバックエンドには意味のないバイトしか届きません。
シンプルな判断ルール
3つの質問をしてください。
- ファイルシステムAPI(POSIX・SMB・NFS)でデータにアクセスするか?はいなら、ブロックまたはファイルストレージ。
- HTTP経由でアクセスし、変更することはほとんどなく、無制限のスケールを望むか?はいなら、オブジェクトストレージ。
- データセットが10TBを超えて成長しているか?ほぼ常にオブジェクトストレージ。
ファイル転送ワークロードでは、(2)の答えは常にはいです。ファイル自体にはS3・R2・Azure Blob・GCSを使い、それらを管理するデータベースとWebサーバーのためにブロックストレージを確保してください。
hexatransfer.com で今すぐ試せます — 無料、アカウント不要、最大10GB。
エンドツーエンド暗号化で大容量ファイルを安全に送信
エンドツーエンド暗号化で最大10GBのファイルを無料で転送。アカウント不要。ファイルはアップロード前にブラウザで暗号化されるため、他の誰にも読まれません。
ファイルを送信