ブロックストレージ
データをブロック単位に分割して保存する方法で、HDDやSSDへのデータの保管はブロックストレージに分類される。
OSのファイルシステムを介することでユーザーはブロックを意識する必要がなくなる。
オーバーヘッドが発生しないためアクセスが高速になる。
AWSではEBSがブロックストレージに該当する。
ファイルストレージ
データをファイルとして階層構造になったフォルダに保管する方法。
SMBやNFSプロトコルを使用してネットワーク越しに接続し、ファイル共有ストレージなどの用途で使用する。
ブロックストレージと比べるとデータアクセスの速度が遅くなる。
AWSではEFSが該当する。
オブジェクトストレージ
オブジェクトストレージはデータをオブジェクトという単位で管理するストレージ。各データに固有のURIとメターデータを付与してオブジェクトとしてデータを保管する。
(上記の2つと異なりブロックやファイルの階層、OSを気にせずにデータを保管できるという理解。サーバーレスストレージ的な?)
マシンにマウントするのではなく、HTTP通信によってデータの読み書きを行う。
S3がオブジェクトストレージに該当する。
ブロックに分割せず、階層構造も持たないので拡張・増設が容易な一方アクセス速度が遅くなる。
個人的なまとめ
プログラミング的に考えると、EBSを使用していればパスを指定して保存やら読み込みが可能であるが、S3だとAPIを介したHTTP通信を使用したデータへのアクセスが必要になる。こうすることによってOSに依存しない方法でストレージを使用することができ、より汎用性が出る。
一方でOSの機能を使えないため、SDKを使用するような開発が一般的になる。
S3はHTTPによるアクセスであるため、セキュリティ面では、アクセスを制限するために署名付きURLやCloudFrontを使用する。特にCloudFrontはセキュリティ面だけでなく、アクセス速度が遅いオブジェクトストレージという特性からも使用が必須になる。
参考書でS3の使用がCloudFrontとセットで記載されている理由が少し分かった。
より汎用的、抽象的な仕組みにすることでクラウドライクな仕組みになるのだろう。
因みにクラウドライクという言葉は存在するか知りません。