データを「ディスクのブロック」で扱うか、「ファイル」で扱うか、「丸ごとの箱(オブジェクト)」で扱うかの違い。用途で使い分ける。
ブロックストレージは、OSからは普通のディスクに見えます。データを決まった大きさのブロックに分けて読み書きし、その上にOSがファイルシステム(ext4やXFS)を作ります。一部だけを素早く書き換えられ、レイテンシが低いので、DBのデータ置き場やOSの起動ディスクに向いています。AWSではEBSで、基本は1台のインスタンスに接続し、同じAZの中で使います。
ファイルストレージは、ネットワーク越しの共有フォルダです。NFSなどで複数のサーバーが同じディレクトリを同時に読み書きできます。複数台のサーバーで共有したいアップロードファイルや設定に使います。AWSではEFS(Linux向け)やFSxです。便利ですが、ブロックストレージより遅く高めです。
オブジェクトストレージは、HTTPのAPIで、キー(名前)を指定してデータを丸ごと出し入れする箱です。フォルダのように見えるのはキーに「/」が入っているだけで、実際には階層がありません。容量は事実上無制限で安く、耐久性も非常に高い一方、ファイルの一部だけを書き換えることはできず、全体を置き換えます。AWSではS3で、静的ファイル、ログ、バックアップ、データ分析の置き場に使います。
| ブロック(EBS) | ファイル(EFS) | オブジェクト(S3) | |
|---|---|---|---|
| アクセス方法 | OSのディスクとして | NFSでマウント | HTTPのAPI |
| 同時接続 | 基本は1台 | 多数のサーバー | 制限なし(どこからでも) |
| レイテンシ | 最も低い(ミリ秒未満〜) | やや高い | 高め(数十ミリ秒〜) |
| 一部の書き換え | できる | できる | できない(丸ごと置き換え) |
| 容量 | 作るときに決める | 自動で伸びる | 事実上無制限 |
| 向く用途 | DB、起動ディスク | 共有ファイル、コンテナの永続領域 | 静的ファイル、ログ、バックアップ、データレイク |
補足:インスタンスストアは、EC2のホストに物理的についている高速なディスクですが、インスタンスを停止すると中身が消えます。一時的なキャッシュや作業領域にだけ使います。
「DBのデータをS3に置く」「ログをEBSに貯め続ける」など、性質に合わない使い方が障害やコストの原因になる。
面接ではこう答える
ブロックストレージはOSからディスクとして見え、低レイテンシで一部の書き換えができるのでDBに向きます。ファイルストレージはNFSなどで複数台から共有できます。オブジェクトストレージはHTTPのAPIでキーを指定して丸ごと出し入れし、容量が事実上無制限で安く、静的ファイルやログ、バックアップに向きます。AWSではそれぞれEBS、EFS、S3です。
SREとの関わりストレージの選定、ディスク容量の障害、ログやバックアップの保管設計、コスト最適化に関わります。