プログラマでありたい

おっさんになっても、プログラマでありつづけたい

ファイルストレージ・ブロックストレージ・オブジェクトストレージの違いと、AWSのストレージサービスとのマッピング

 こんにちは。仕事でAWSの構築し、プライベートでAWSの研究と技術書の執筆をし、Amazonで本を売っているAmazon依存症疑惑のある佐々木(@dkfj)です。
 AWS使い始めてまず悩むことのベスト10の一つが、ストレージサービスの選び方です。AWSにはS3やEBSの他に、EFSやFSxなど多種多様なストレージサービスがあります。今回は、ストレージサービスの種類から、AWSのサービスの使い分けを説明したいと思います。

ストレージサービスの種別

 一口にストレージといっても、用途に応じて幾つか分類できます。代表的なのが、ファイルストレージ・ブロックストレージ・オブジェクトストレージです。まずは、この3つの違いをみてみましょう。

ブロックストレージ

 まず一番イメージしにくいのが、このブロックストレージ。ブロックストレージは、ものすごくザックリいうとハードディスクのようなもので、ブロックと呼ばれる論理単位でのアクセスします。ハードディスクは物理的な単位に制約されますが、クラウドのブロックストレージはバックエンドのストレージを論理的にまとめて好きな単位に切り売りしてくれます。人間が直接扱うというより、OSとかが使う低レイヤーなストレージになります。

ファイルストレージ

 次にファイルストレージとは何かです。こちらはいわゆるファイルサーバーのようなイメージです。ユーザーは、ストレージ上のデータを個々のファイル単位で扱います。OSを介して見えるのがファイルストレージですし、それをネットワーク越しに利用するのがNAS(ネットワーク・アタッチト・ストレージ )です。

オブジェクトストレージ

 最後にオブジェクトストレージです。字義的には、データをオブジェクト単位で扱うストレージです。これだと、ファイル単位で扱うファイルストレージと何が違うのだという気がしますが、その通りです。ディレクトリ構造で管理するファイルストレージと違い、オブジェクトストレージはオブジェクトを一意に識別するIDと、それを管理するメタデータで構成されています。さらにS3のようにアクセスするためのAPIが提供されているケースもあります。というか、オブジェクトストレージの概念と実装は、S3の存在が大きいんですね。知らなかった。

ストレージ種別のまとめ

 ブロックストレージ⇒ファイルストレージ⇒オブジェクトストレージとレイヤーが上がってくるイメージですかね。この辺りRedHatさんが上手くまとめています。流石、ストレージ会社の側面がありますね。

www.redhat.com

ストレージ種別とAWSのサービスのマッピング

 ストレージ種別の概要がザックリ解ったところで、AWSのサービスをマッピングしてみましょう。

ストレージ種別 サービス名 概要
オブジェクトストレージ S3 AWSが誇るオブジェクトストレージ
オブジェクトストレージ Glacier S3のストレージクラスの一部に取り込まれたアーカイブ用ストレージ
ブロックストレージ EBS 不揮発性のストレージ
ブロックストレージ EC2のインスタンスストア 揮発性のストレージ
ファイルストレージ EFS NASみたいに複数のインスタンスからマウントできる
ファイルストレージ FSx for Windowsとfor Lustreの2種類があるよ

ファイルストレージの使い分け

 オブジェクトストレージは2種類ありますが、Glacierはアーカイブ用と用途と機能がはっきりしているので使い分けに悩みません。またブロックストレージも永続化&使いまわししたければEBSで、インスタンスストアはローカルで高速なI/O処理に利用すると、これも使い分け方がはっきりしています。一番悩むのが、ファイルストレージだと思います。ファイルストレージには、EFSとFSx for WindowsとFSx for Lustreがあります。ここをどう使い分けたらよいのか難しいので、個人的な見解含みでザックリと分けたいと思います。

EFS

 まずEFSは、Linux向けのファイルシステムとして考えましょう。何故ならば、Windowsの素のドライバーでは、未だEFSをサポートしていないからです。EFSはNFSv4プロトコル経由でのアクセスを前提としていますが、Windowsは今のところNFSv4に対応していません。利用したい場合は、サードパーティ製のドライバを使うという手がありますが、それであれば次で紹介するFSx for Windowsを使ったほうが良いです。
 それ以外の特徴として、参照系のアクセスに強く書き込み性能は高くないという点があります。『何千もの Amazon EC2 インスタンスに対して大規模な並列共有アクセスを提供するように設計されている』と豪語されているのですが、一方でWrite Manyなシステムには向いていません。あと、EBSに比べるとRead・Writeとも性能はそこまで高くないです。更にスループットモードがバーストとがあり、バーストモードはサイズによって基本性能が変わります。使い所として悩みますが、CMSの共有ストレージとしてのコンテンツの置き場に使いやすいのも事実です。その際は、CloudFront等と併用してキャッシュを上手く使いましょう。

FSx for Windows

 EFSがWindowsに使えないとすると、じゃぁどうすんのという時に出てくるのがこのFSx for Windowsです。FSxは、FとSが大文字でxが小文字というこだわりのネーミングですが、そもそも何の略称か解りません。FSxにはfor Windowsとfor Lustreの2種類があり、アーキテクチャ・機能・用途も大きく違っています。for Windowsは名前の通りWindows用のサービスで、フルマネージドなWindowsのファイルサーバとして使えます。ということで、Windowsでファイルストレージが必要になった場合は、FSx for Windowsを使いましょう。

www.slideshare.net

FSx for Lustre

 最後のファイルストレージがFSx for Lustreです。Lustreは、フルマネージドな分散ファイルシステムで、S3とシームレスに統合できるファイルストレージです。個々の単語の意味を理解できても、つなげると解らなくなってしまいます。まずS3とのシームレスな統合というのは何かというと、ファイルシステム作成時にS3のバケットと関連付けできます。そして、S3上のファイルをインデックスし、あたかも自前のファイルのようにみせます。初回アクセス時はS3から取得するので遅いのですが、2回目以降はキャッシュしているので高速です。なんとなくStorage Gatewayのキャッシュ型ボリュームの挙動と似ていますね。主な用途は、高速なデータアクセスが必要なハイパフォーマンス・コンピューティングや機械学習とのことです。

www.slideshare.net

まとめ

 AWSのサービスはいろいろあって悩むと思います。悩んだ時は、一度基本に立ち返ってどのレイヤーに対応したサービスなのかを確認するといいのかもしれません。


See Also

blog.takuros.net

blog.takuros.net