オブジェクトストレージとは
オブジェクトストレージは、データをオブジェクトと呼ばれる単位で扱うストレージアーキテクチャです。主に
オンラインストレージで利用されており、その
スケーラビリティ(拡張性)が大きな特徴です。
概要
オブジェクトストレージの最大の利点は、その高い拡張性です。例えば、
Facebookのように大量の写真を保管したり、Amazon S3のように膨大な顧客データを保存するのに適しています。容量の拡張は、ストレージ
サーバー(ノード)を追加するだけで、システムを停止させることなく行えます。
ペタバイト(PB)級の規模にも容易に拡張でき、
ロスアラモス国立研究所では500PBのストレージに採用されています。
オブジェクトストレージの説明で、データと
メタデータを結合してオブジェクトとして扱う点が強調されることがありますが、これはオブジェクトストレージの特徴の一部に過ぎません。
Linuxの
ファイルシステムである
XFSのように、拡張属性を使って属性とデータを一緒に格納する仕組みも存在しますが、これだけではオブジェクトストレージとは言えません。オブジェクトストレージは、後述するデータアクセス方法やデータ分散の仕組みなど、アーキテクチャ全体として理解する必要があります。
PB級の分散ストレージの仕組みとしては、Hadoop Distributed File System (HDFS) や Google File System なども存在します。これらは
ビッグデータ処理を考慮し、大きなファイルサイズに最適化された設計となっています(例えば、ファイルが100MB程度の大きさに分割されて保存されるなど)。一方、オブジェクトストレージは、ファイルサイズに関わらず、どのような大きさのデータにも適した設計であるとされています。
詳細
データのアクセス方法
オブジェクトストレージ内のデータは、固有のID(URI)を持ち、通常はRESTful APIを通じてアクセスします。Webブラウザなどのアプリケーションが
サーバーにAPIリクエストを送信することで、データの読み込み(GET)や書き込み(PUT)などの操作を行います。APIとデータIDを指定してアクセスするため、ファイル
サーバーやNASのように、WindowsのエクスプローラーやmacOSの
Finderから直接アクセスするためには、FUSEアダプターなどが必要になります。
オブジェクトストレージでは、データを直接更新したり上書きしたりすることはできません。データを更新する場合は、新しいデータを書き込み、古いデータを削除するという手順を踏む必要があります。
APIに関しては、
Amazon Web Services S3 APIが事実上の標準(デファクトスタンダード)となっており、S3互換を謳う製品も多く存在します。
データの格納方法
オブジェクトストレージには、
ディレクトリという概念が存在しません。データは、バケットまたはコンテナと呼ばれるフラットな空間に格納されます。バケットは複数作成することも可能です。
データの
可用性を高めるために、同じデータを複数のストレージに分散して記録する
レプリケーションという仕組みが用いられます。これにより、
RAIDなどの高
可用性技術を別途準備する必要がありません。また、容量効率を高めたイレイジャーコーディングという技術が実装されているオブジェクトストレージも存在します。
データと
メタデータを合わせてオブジェクトとします。
メタデータはユーザーが自由に登録でき、例えば、画像の
メタデータとして被写体や場所を登録し、検索や抽出に利用することができます。
欠点
オブジェクトストレージを利用する上での主な欠点は、既存のアプリケーションを変更する必要がある点です。特に、APIへの対応が必須となります。また、データの部分的な読み書きができないため、頻繁な部分更新を必要とする
データベースや、高速なI/Oを必要とする
トランザクション処理には適していません。しかし、
バックアップ、アーカイブ、
サーバーログの保存などには適しています。
コンポーネント
オブジェクトストレージは、主にProxyノードとストレージノードから構成されます。負荷分散のためにロードバランサが利用されることもあります。
Proxyノード: APIの提供やリクエストの管理を行います。クライアントからのAPIリクエストを受け取り、ストレージノードに指示を出します。データが保存されているノードの場所も管理します。例えば、OpenStack Swiftでは「Ring」と呼ばれるアルゴリズムが使用されています。Proxyノードは、クライアント側のパブリックネットワーク(LAN)と、ストレージノード側のプライベートネットワークの2つのネットワークインターフェースを持ちます。
ストレージノード: 実際にデータを格納します。Proxyノードの
プライベートネットワーク側に接続され、通常は
可用性を高めるために複数のノードで構成されます。
XFSなどのデータ属性を保持できる
ファイルシステムを利用します。オブジェクトストレージはAPIを通じてアクセスしますが、これは
クライアントからストレージ全体を見た場合の話です。ストレージノード単位で見ると、最終的にはオブジェクトは既存の
ファイルシステムに保存されます。
ハードウェア
オブジェクトストレージは、SANで利用される高価な
ファイバーチャネルを使用せず、低速ながら大容量で低価格なSATA HDDを活用するなど、コモディティ・ハードウェアの活用を基本設計としています。ストレージノード間はTCP/IPで通信され、SCSIプロトコルは使用されません。そのため、ストレージにはHDD、ネットワークには
イーサネットが用いられるのが一般的です。
ファイバーチャネルやテープデバイスは主流ではありません。
実装例
パブリッククラウドサービス
Amazon Simple Storage Service (S3)
Google Cloud Storage
Microsoft Azure Blob Storage
オープンソースソフトウェア
Ceph
OpenStack Swift
クローズドソースソフトウェア
Haystack (
Facebook)
ヤフー Dragon
関連項目
分散
ファイルシステム
ネットワークアタッチトストレージ (NAS)
ストレージエリアネットワーク (SAN)