1.目的

クラウドが普及して、もう一般的になっています。その中でストレージのいわゆる種類がいくつかあります。 ストレージの種類とは、オブジェクト、ファイル、ブロックなどのストレージのことを扱います。 また、多くの場合、クラウドはクラウド、オンプレはオンプレで整理されがちなので、その辺をまとめておきたいと思います。

2.ストレージの種類

先に結論をまとめましょう。今回の整理範囲は以下の通りです。

種類 データ転送 利用基盤 プロトコル 物理Disk管理 使用例
ローカル
ストレージ
ブロック オンプレ NVMe 自OS DAS
ブロック
ストレージ
ブロック クラウド
オンプレ
SCSI/FCoE 自OS SAN
AWS EBSなど
ファイル
ストレージ
ファイル クラウド
オンプレ
CFS/NFS 他OS NAS
AWS EFSなど
オブジェクト
ストレージ
オブジェクト クラウド HTTPS 他OS AWS S3
DropBox など

ストレージの種類

では行きましょう。

3.ローカルストレージ

概要

ローカルストレージとは、そのままになりますが、ローカルにあるストレージです。 言い換えると「CPUと同じ筐体などに設置されたり、物理的に距離の近い」ストレージと言えます。

PCであれば分かりやすく、PC内に入っているHDD,SSDのことですね。基本的には自分(OSから見て自分自身)が利用するためのデータ領域です。このようなストレージをDAS(Direct Attached Storage)ともいいます。

使用イメージ

ローカルストレージ

データ領域のアクセス方法(プロトコル)とデータの単位

データ領域、つまりHDDやSSDへのアクセス方法(プロトコル)はACHIやNVMeといった規格があります。 その時のデータの受け渡しのサイズは4KBであることが多いです(特にLinux)。Windowsもクラスターサイズという表現になりますが4KBでアクセスすることが多いです。

このようにブロック単位でアクセスするのでローカルストレージも分類的にはブロックストレージになります。

4.ブロックストレージ

概要

ブロックストレージとは、OSがブロック単位でアクセスするストレージです。

と言ってしまうと、先ほどのローカルストレージと違いがないですね。実はその通りで、データのアクセス単位という見方をすると、ローカルストレージとは差がありません。 ただストレージの種類として「ブロックストレージ」という場合は、多くの場合は「SAN(Storage Area Network)」(もしくはそれと同等の仕組み)を指すことが多いです。

ブロックストレージ

データ領域のアクセス方法(プロトコル)とデータの単位

アクセス方法(プロトコル)はiSCSIやFCoE(Fiber Channel over Ethernet)といった規格があります。 物理的なケーブルの種類の差分はありますが、ブロック単位でのアクセスであるため、ローカルストレージと同等の扱いができます。

使い道

なぜローカルストレージと分別しているか、というといくつかメリット(もちろんデメリットも)があります。

  • メリット
    1. ディスクを束ねることで管理がしやすい。過不足に応じて再割り当てなどが可能
    2. NWとは異なる接続(ケーブル)となるため、負荷を分散可能
    3. OSが直接ファイルシステムを管理することでアクセス速度が速い
    4. バックアップ対象の集約による効率化や、OS領域のシステムバックアップなどが簡単になる
  • デメリット
    1. NW同等に利用台数が増えるとFC用のスイッチが必要になる。
    2. OSやハードがSANに対応している必要があり、設定にも専門的な知識が必要
    3. NASに比べると効果となる。(FC関連が高い)

    私の個人的な意見としてはバックアップの効率化、容易化はオンプレにおいてはすごく重要です。

    ローカルディスクしかないサーバを何台もイメージバックアップ用のディスクでブートしLTOに取得する、というような マンパワーに依存したシステムを経験すると有難みがすごく分かります。

    補足

    クラウドでこのような位置づけに該当するものはAWSならEBS、Azureならマネージドディスクと呼ばれます。 これらは仮想化をされているのでSANと同じものではありませんが、ブロックストレージです。 仮想化およびサーバから独立しているため、イメージバックアップや割付の変更ができたりとSANのメリット(もしくはそれ以上)の 恩恵を受けることができます。

    5.ファイルストレージ

    概要

    ファイルストレージとは、OSがファイル単位でアクセスするストレージです。そのまんまですね。オブジェクトでも同じことを言います。 もう少しかみ砕くと、ファイルの読み書きを行う場合に、「ファイル単位」でデータのアクセスが完結する。というイメージです。

    これを具体的に理解するには少しOSの動きを理解する必要があります。 OSはブロックストレージを「ファイルシステム」として認識しています。「ファイルシステム」が何かというと、 具体的にはNFTSとか、XFSを指すのですが、イメージでいうと、「この装置はディスクで、容量1TB、使用率は20%」みたいなことが 分かるということです。 これは「ストレージの管理は自分である」という風に言えます。

    一方で、ファイルストレージはストレージの管理(物理的な管理)は自分ではない、と言えます。

    ファイルストレージ

    データ領域のアクセス方法(プロトコル)とデータの単位

    ファイルストレージはアクセスする単位が「ファイル」で、OSが認識できるものは「フォルダ(ディレクトリ)とファイル」しか ありません。全体容量や使用率はどれくらいかは分かりません (マウント等すればアクセス可能な範囲は見れますが、アクセスできない領域は分かりません)

    使い道

    主にオンプレではNAS(Network Attached Storage)として構築されます。 もちろんこれによりメリット、デメリットがあります。

  • メリット
    1. OSがストレージの管理をしなくてよい。(ディスクの不足に対する追加、など)
    2. NW(TCPIP)で構築するため構築難易度が低い
    3. SANに比べ安価に構築できる
  • デメリット
    1. 性能はNWに依存する

    6.オブジェクトストレージ

    概要

    オブジェクトストレージとは、ファイルなどを「オブジェクト」という単位で扱い、アクセスするストレージです。

    このオブジェクトとは、AWSのS3が始まりのようですが、ファイル+メタデータ(例えばファイルID)で管理しています。 このメタデータ(のファイルID)を指定してファイルにアクセスを行います。

    これまでのストレージと異なり、ファイルへたどり着くにはメタデータで指定するため、ディレクトリ階層表現は不要で、「フラットな構成」 が特徴です。

    少し仕組みの裏側を記載すると、AWSなどのクラウドの中身では、ブロックストレージでディレクトリ共有しているものが基本です。

    このディレクトリ共有を大量に作成し、仮想的に1つのストレージとして見せている、というイメージを持ってもらえればと思います。

    オブジェクトストレージ

    データ領域のアクセス方法(プロトコル)とデータの単位

    オブジェクトストレージへはアクセスする単位は「オブジェクト」となります。アクセス方法はHTTP(S)であり、いわゆるブラウザからアクセスするか アプリケーション(Restful API)などを介して利用します。

    基本的にはアプリケーションがアクセスするものの認識でOKです。

    使い道

    こちらはオンプレではあまり実装されないです。例えばですが、windowsではDFSを用いて実現することは可能です。

    ただ以下のメリットを損なってしまっていると思います。

  • メリット
    1. OSがストレージの管理をしなくてよい。(ディスクの不足に対する追加、など)
    2. 大容量(PBなど)、大多数ファイルを扱うことができる。
    3. メタデータのインデックス作成により高速なアクセスが可能
  • デメリット
    1. 性能はNWに依存する
    2. 同一オブジェクトを頻繁に更新する処理には不向き

    7.まとめ

    長くなりましたが、ストレージの種類についてアクセス方法やその特徴を整理しました。 いずれのストレージも一長一短あるため、利用目的に応じたものを活用する用にしましょう。